public void RenderToGlRecursive(BoxPrimitive objectToProcess) { if (objectToProcess.CreateCentered) { //objectToProcess.Size; } else { } var partColor = new ColorF(.8, .8, 1).ToColor(); GLHelper.Render(CreateBox(objectToProcess.GetAxisAlignedBoundingBox()), partColor); }
public static void Render3DLineNoPrep(this WorldView world, Frustum clippingFrustum, Vector3 start, Vector3 end, Color color, double width = 1) { if (clippingFrustum.ClipLine(ref start, ref end)) { double unitsPerPixelStart = world.GetWorldUnitsPerScreenPixelAtPosition(start); double unitsPerPixelEnd = world.GetWorldUnitsPerScreenPixelAtPosition(end); Vector3 delta = start - end; var deltaLength = delta.Length; Matrix4X4 rotateTransform = Matrix4X4.CreateRotation(new Quaternion(Vector3.UnitX + new Vector3(.0001, -.00001, .00002), -delta / deltaLength)); Matrix4X4 scaleTransform = Matrix4X4.CreateScale(deltaLength, 1, 1); Vector3 lineCenter = (start + end) / 2; Matrix4X4 lineTransform = scaleTransform * rotateTransform * Matrix4X4.CreateTranslation(lineCenter); var startScale = unitsPerPixelStart * width; var endScale = unitsPerPixelEnd * width; for (int i = 0; i < unscaledLineMesh.Vertices.Count; i++) { var vertexPosition = unscaledLineMesh.Vertices[i]; if (vertexPosition.X < 0) { scaledLineMesh.Vertices[i] = new Vector3Float(vertexPosition.X, vertexPosition.Y * startScale, vertexPosition.Z * startScale); } else { scaledLineMesh.Vertices[i] = new Vector3Float(vertexPosition.X, vertexPosition.Y * endScale, vertexPosition.Z * endScale); } } if (true) { GL.Color4(color.Red0To255, color.Green0To255, color.Blue0To255, color.Alpha0To255); if (color.Alpha0To1 < 1) { GL.Enable(EnableCap.Blend); } else { //GL.Disable(EnableCap.Blend); } GL.MatrixMode(MatrixMode.Modelview); GL.PushMatrix(); GL.MultMatrix(lineTransform.GetAsFloatArray()); GL.Begin(BeginMode.Triangles); for (int faceIndex = 0; faceIndex < scaledLineMesh.Faces.Count; faceIndex++) { var face = scaledLineMesh.Faces[faceIndex]; var vertices = scaledLineMesh.Vertices; var position = vertices[face.v0]; GL.Vertex3(position.X, position.Y, position.Z); position = vertices[face.v1]; GL.Vertex3(position.X, position.Y, position.Z); position = vertices[face.v2]; GL.Vertex3(position.X, position.Y, position.Z); } GL.End(); GL.PopMatrix(); } else { scaledLineMesh.MarkAsChanged(); GLHelper.Render(scaledLineMesh, color, lineTransform, RenderTypes.Shaded); } } }
public void RenderToGlRecursive(Csg.Solids.MeshContainer objectToProcess) { var partColor = new ColorF(.8, .8, 1).ToColor(); GLHelper.Render(objectToProcess.GetMesh(), partColor); }
public void RenderToGlRecursive(Cylinder.CylinderPrimitive objectToProcess) { var partColor = new ColorF(.8, .8, 1).ToColor(); GLHelper.Render(CreateCylinder(objectToProcess), partColor); }