/** * Utility method to rotate a given mesh using a given rotation matrix. * @param input the mesh to rotate. Not modified. * @param matrix the rotation to apply to the mesh. Not Modified. * @return the rotated mesh. */ public static MeshDataHolder rotate(MeshDataHolder input, Matrix3f matrix) { TexCoord2f[] texturePoints = input.getTexturePoints(); int[] triangleIndices = input.getTriangleIndices(); Point3f[] inputVertices = input.getVertices(); Vector3f[] inputNormals = input.getVertexNormals(); Point3f[] outputVertices = new Point3f[inputVertices.length]; Vector3f[] outputNormals = new Vector3f[inputNormals.length]; for (int i = 0; i < inputVertices.length; i++) { outputVertices[i] = new Point3f(); outputNormals[i] = new Vector3f(); matrix.transform(inputVertices[i], outputVertices[i]); matrix.transform(inputNormals[i], outputNormals[i]); } return new MeshDataHolder(outputVertices, texturePoints, triangleIndices, outputNormals); }
private static Vector3d rotate(Vector3d vector, Vector3d axis, double angle) { Matrix3f rotate = new Matrix3f(); rotate.set(new AxisAngle4f(new Vector3f(axis), (float) Math.toRadians(angle))); Vector3f result = new Vector3f(); Vector3f vector3f = new Vector3f(vector); rotate.transform(vector3f, result); return new Vector3d(result); }
private static Vector3d rotate(Vector3d vector, Vector3d axis, double angle) { Matrix3f rotate = new Matrix3f(); rotate.set(new AxisAngle4f(new Vector3f(axis), (float) Math.toRadians(angle))); Vector3f result = new Vector3f(); Vector3f vector3f = new Vector3f(vector); rotate.transform(vector3f, result); return new Vector3d(result); }
@Override public void put(int element, float... data) { VertexFormatElement.EnumUsage usage = parent.getVertexFormat().getElement(element).getUsage(); // transform normals and position if(usage == VertexFormatElement.EnumUsage.POSITION && data.length >= 3) { Vector4f vec = new Vector4f(data[0], data[1], data[2], 1f); transformation.transform(vec); data = new float[4]; vec.get(data); } else if(usage == VertexFormatElement.EnumUsage.NORMAL && data.length >= 3) { Vector3f vec = new Vector3f(data); normalTransformation.transform(vec); vec.normalize(); data = new float[4]; vec.get(data); } super.put(element, data); }
@Override public void put(int element, float... data) { VertexFormatElement.EnumUsage usage = parent.getVertexFormat().getElement(element).getUsage(); // transform normals and position if (usage == VertexFormatElement.EnumUsage.POSITION && data.length >= 3) { Vector4f vec = new Vector4f(data[0], data[1], data[2], 1f); transformation.transform(vec); data = new float[4]; vec.get(data); } else if (usage == VertexFormatElement.EnumUsage.NORMAL && data.length >= 3) { Vector3f vec = new Vector3f(data); normalTransformation.transform(vec); vec.normalize(); data = new float[4]; vec.get(data); } super.put(element, data); }
@Override public void put(int element, float... data) { VertexFormatElement.EnumUsage usage = parent.getVertexFormat().getElement(element).getUsage(); // transform normals and position if (usage == VertexFormatElement.EnumUsage.POSITION && data.length >= 3) { Vector4f vec = new Vector4f(data); vec.setW(1.0f); transformation.transform(vec); data = new float[4]; vec.get(data); } else if (usage == VertexFormatElement.EnumUsage.NORMAL && data.length >= 3) { Vector3f vec = new Vector3f(data); normalTransformation.transform(vec); vec.normalize(); data = new float[4]; vec.get(data); } super.put(element, data); }
@Override public void put(int element, float... data) { VertexFormatElement.EnumUsage usage = parent.getVertexFormat().getElement(element).getUsage(); // transform normals and position if (usage == VertexFormatElement.EnumUsage.POSITION && data.length >= 3) { Vector4f vec = new Vector4f(data); vec.setW(1.0f); transformation.transform(vec); data = new float[4]; vec.get(data); } else if (usage == VertexFormatElement.EnumUsage.NORMAL && data.length >= 3) { Vector3f vec = new Vector3f(data); normalTransformation.transform(vec); vec.normalize(); data = new float[4]; vec.get(data); } super.put(element, data); }
private void testTransformationConsistency(int x, int y, int z) { final Vector3f input = new Vector3f(x, y, z); final Vector3f separate = new Vector3f(); separate.x = orientation.transformX(x, y, z); separate.y = orientation.transformY(x, y, z); separate.z = orientation.transformZ(x, y, z); final Vector3f common = new Vector3f(input); orientation.getLocalToWorldMatrix().transform(common); Assert.assertEquals(separate, common); }