public TranslationGizmo(Vector3 scale, bool generateGeom = false) { Arrow XAxis = new Arrow(0.015f, 0.25f, new Vector3(1.0f, 0.0f, 0.0f), false, 20); Arrow YAxis = new Arrow(0.015f, 0.25f, new Vector3(0.0f, 1.0f, 0.0f), false, 20); Arrow ZAxis = new Arrow(0.015f, 0.25f, new Vector3(0.0f, 0.0f, 1.0f), false, 20); //Transform Primitives before merging //Scale matrix Matrix4 s = Matrix4.CreateScale(scale); //Move arrowhead up in place Matrix4 t = s * Matrix4.CreateRotationZ(MathUtils.radians(90)); XAxis.applyTransform(t); t = s * Matrix4.CreateRotationX(MathUtils.radians(90)); ZAxis.applyTransform(t); //Merge Primitives Primitive p1 = mergePrimitives(XAxis, YAxis); Primitive p = mergePrimitives(p1, ZAxis); verts = p.verts; indices = p.indices; colors = p.colors; if (generateGeom) { geom = getGeom(); } }
private void generateGizmoParts() { //Translation Gizmo GMDL.Primitives.Arrow translation_x_axis = new GMDL.Primitives.Arrow(0.015f, 0.25f, new Vector3(1.0f, 0.0f, 0.0f), false, 20); //Move arrowhead up in place Matrix4 t = Matrix4.CreateRotationZ(MathUtils.radians(90)); translation_x_axis.applyTransform(t); GMDL.Primitives.Arrow translation_y_axis = new GMDL.Primitives.Arrow(0.015f, 0.25f, new Vector3(0.0f, 1.0f, 0.0f), false, 20); GMDL.Primitives.Arrow translation_z_axis = new GMDL.Primitives.Arrow(0.015f, 0.25f, new Vector3(0.0f, 0.0f, 1.0f), false, 20); t = Matrix4.CreateRotationX(MathUtils.radians(90)); translation_z_axis.applyTransform(t); //Generate Geom objects translation_x_axis.geom = translation_x_axis.getGeom(); translation_y_axis.geom = translation_y_axis.getGeom(); translation_z_axis.geom = translation_z_axis.getGeom(); GLPrimitiveVaos["default_translation_gizmo_x_axis"] = translation_x_axis.getVAO(); GLPrimitiveVaos["default_translation_gizmo_y_axis"] = translation_y_axis.getVAO(); GLPrimitiveVaos["default_translation_gizmo_z_axis"] = translation_z_axis.getVAO(); //Generate PrimitiveMeshVaos for (int i = 0; i < 3; i++) { string name = ""; GMDL.Primitives.Primitive arr = null; switch (i) { case 0: arr = translation_x_axis; name = "default_translation_gizmo_x_axis"; break; case 1: arr = translation_y_axis; name = "default_translation_gizmo_y_axis"; break; case 2: arr = translation_z_axis; name = "default_translation_gizmo_z_axis"; break; } GLPrimitiveMeshVaos[name] = new GLMeshVao(); GLPrimitiveMeshVaos[name].type = TYPES.GIZMOPART; GLPrimitiveMeshVaos[name].metaData = new MeshMetaData(); GLPrimitiveMeshVaos[name].metaData.batchcount = arr.geom.indicesCount; GLPrimitiveMeshVaos[name].metaData.indicesLength = DrawElementsType.UnsignedInt; GLPrimitiveMeshVaos[name].vao = GLPrimitiveVaos[name]; GLPrimitiveMeshVaos[name].material = GLmaterials["crossMat"]; } }
private Primitive generatePrimitive(Vector3 scale) { Arrow XPosAxis = new Arrow(0.02f, scale.X, new Vector3(10.5f, 0.0f, 0.0f), false, 5); Arrow XNegAxis = new Arrow(0.01f, scale.X, new Vector3(10.5f, 0.1f, 0.1f), false, 5); Arrow YPosAxis = new Arrow(0.02f, scale.Y, new Vector3(0.0f, 10.5f, 0.0f), false, 5); Arrow YNegAxis = new Arrow(0.01f, scale.Y, new Vector3(0.1f, 10.5f, 0.1f), false, 5); Arrow ZPosAxis = new Arrow(0.02f, scale.Z, new Vector3(0.0f, 0.0f, 10.5f), false, 5); Arrow ZNegAxis = new Arrow(0.01f, scale.Z, new Vector3(0.1f, 0.1f, 10.5f), false, 5); //SquareCross2D c = new SquareCross2D(0.01f, new Vector3(0.0f, 10.5f, 0.0f), false); //Transform Primitives before merging //Global Scale matrix //Matrix4 s = Matrix4.CreateScale(scale); Matrix4 s = Matrix4.Identity; Matrix4 t; //Move arrowhead up in place t = s * Matrix4.CreateRotationZ(MathUtils.radians(90)); XNegAxis.applyTransform(t); t = s * Matrix4.CreateRotationZ(MathUtils.radians(-90)); XPosAxis.applyTransform(t); t = s * Matrix4.CreateRotationX(MathUtils.radians(90)); ZPosAxis.applyTransform(t); t = s * Matrix4.CreateRotationX(MathUtils.radians(-90)); ZNegAxis.applyTransform(t); t = s * Matrix4.CreateRotationX(MathUtils.radians(180)); YNegAxis.applyTransform(t); YPosAxis.applyTransform(s); //Merge Primitives Primitive py = mergePrimitives(YPosAxis, YNegAxis); Primitive px = mergePrimitives(XNegAxis, XPosAxis); Primitive pz = mergePrimitives(ZNegAxis, ZPosAxis); Primitive p = mergePrimitives(py, px); p = mergePrimitives(p, pz); return(p); }