public override void RenderHandle(TransformGizmo gizmo, Vector4 color, bool outlined = false) { base.RenderHandle(gizmo, color); var editOffset = 0f; var renderScale = new Vector3(GizmoSize); if (gizmo.IsEditing && IsSelected) { editOffset = gizmo.TransformedAmount / 2f; renderScale += new Vector3(0, editOffset, 0); } var scaleMatrix = Matrix4.CreateScale(renderScale); var cubeRenderSize = GizmoSize * CubeSize; if (gizmo.IsEditing) { cubeRenderSize *= IsSelected ? 1.25f : 0.75f; } var cubeScale = Matrix4.CreateScale(cubeRenderSize); var cubeTrans = cubeScale * Matrix4.CreateTranslation(0, GizmoSize + editOffset, 0); var baseTransform = Orientation * gizmo.GetActiveTransform(); GL.PushAttrib(AttribMask.LineBit); GL.LineWidth(outlined ? 4.5f : 2.5f); RenderHelper.BeginDrawColor(gizmo.VertexBuffer, scaleMatrix * baseTransform, color); gizmo.VertexBuffer.DrawArrays(PrimitiveType.Lines, 32, 2); GL.PopAttrib(); if (outlined) { RenderHelper.BeginDrawWireframe(ModelManager.CubeModel.VertexBuffer, cubeTrans * baseTransform, 2f, color); ModelManager.CubeModel.DrawElements(); //gizmo.VertexBuffer.DrawElements(PrimitiveType.Triangles); RenderHelper.EndDrawWireframe(gizmo.VertexBuffer); } else { RenderHelper.BeginDrawColor(ModelManager.CubeModel.VertexBuffer, cubeTrans * baseTransform, color); ModelManager.CubeModel.DrawElements(); //gizmo.VertexBuffer.DrawElements(PrimitiveType.Triangles); } }
public void DrawOutlined(Matrix4 transform, Vector4 modelColor, Vector4 outlineColor, float outlineThickness) { RenderHelper.RenderWithStencil( () => { RenderHelper.BeginDrawColor(VertexBuffer, transform, modelColor); DrawElements(); RenderHelper.EndDrawColor(VertexBuffer); }, () => { RenderHelper.BeginDrawWireframe(VertexBuffer, transform, outlineThickness, outlineColor); DrawElements(); RenderHelper.EndDrawWireframe(VertexBuffer); }); }
public override void RenderHandle(TransformGizmo gizmo, Vector4 color, bool outlined = false) { base.RenderHandle(gizmo, color); if (gizmo.IsEditing && !IsSelected) { return; } var scale = Matrix4.CreateScale(GizmoSize); var arrowSize = GizmoSize * ArrowSize; var arrowScale = Matrix4.CreateScale(arrowSize / 2f, arrowSize, arrowSize / 2f); var arrowTrans = arrowScale * Matrix4.CreateTranslation(0, GizmoSize, 0); var baseTransform = Orientation * gizmo.GetActiveTransform(); GL.PushAttrib(AttribMask.LineBit); GL.LineWidth(outlined ? 4.5f : 2.5f); RenderHelper.BeginDrawColor(gizmo.VertexBuffer, scale * baseTransform, color); gizmo.VertexBuffer.DrawArrays(PrimitiveType.Lines, 32, 2); GL.PopAttrib(); if (outlined) { RenderHelper.BeginDrawWireframe(gizmo.VertexBuffer, arrowTrans * baseTransform, 2f, color); gizmo.VertexBuffer.DrawElements(PrimitiveType.Triangles); RenderHelper.EndDrawWireframe(gizmo.VertexBuffer); } else { RenderHelper.BeginDrawColor(gizmo.VertexBuffer, arrowTrans * baseTransform, color); gizmo.VertexBuffer.DrawElements(PrimitiveType.Triangles); } }
public void DrawWireframe(Matrix4 transform, float thickness, Vector4 color) { RenderHelper.BeginDrawWireframe(VertexBuffer, transform, thickness, color); DrawElements(); RenderHelper.EndDrawWireframe(VertexBuffer); }