/// <summary> /// Complete all relevant items in the given Intersection object. /// </summary> /// <param name="inter">Intersection instance to complete.</param> public override void CompleteIntersection(Intersection inter) { // !!!{{ TODO: add your actual completion code here // normal vector: if (inter.SolidData is TmpData) { TmpData tmp = (TmpData)inter.SolidData; if (Smooth && mesh.Normals > 0) // smooth interpolation of normal vectors { int v1, v2, v3; mesh.GetTriangleVertices(tmp.face, out v1, out v2, out v3); tmp.normal = mesh.GetNormal(v1) * (float)(1.0 - tmp.uv.X - tmp.uv.Y); tmp.normal += mesh.GetNormal(v2) * (float)tmp.uv.X; tmp.normal += mesh.GetNormal(v3) * (float)tmp.uv.Y; } Vector3d tu, tv; Vector3d normal = (Vector3d)tmp.normal; Geometry.GetAxes(ref normal, out tu, out tv); tu = Vector3d.TransformVector(tu, inter.LocalToWorld); tv = Vector3d.TransformVector(tv, inter.LocalToWorld); Vector3d.Cross(ref tu, ref tv, out inter.Normal); } // 2D texture coordinates (not yet): inter.TextureCoord.X = inter.TextureCoord.Y = 0.0; // !!!}} }
private void RenderScene(SceneBrep scene) { if (scene != null && scene.Triangles > 0) { if (scene.HasNormals() && scene.Normals > 0) { GL.Begin(PrimitiveType.Triangles); for (int i = 0; i < scene.Triangles; ++i) { int v1, v2, v3; scene.GetTriangleVertices(i, out v1, out v2, out v3); GL.Normal3(scene.GetNormal(v1)); GL.Vertex3(scene.GetVertex(v1)); GL.Normal3(scene.GetNormal(v2)); GL.Vertex3(scene.GetVertex(v2)); GL.Normal3(scene.GetNormal(v3)); GL.Vertex3(scene.GetVertex(v3)); } GL.End(); } else { GL.End(); GL.Begin(PrimitiveType.Triangles); for (int i = 0; i < scene.Triangles; ++i) { Vector3 v1, v2, v3; scene.GetTriangleVertices(i, out v1, out v2, out v3); GL.Vertex3(v1); GL.Vertex3(v2); GL.Vertex3(v3); } GL.End(); } } else // color cube (JB) { GL.Begin(PrimitiveType.Quads); GL.Color3(0.0f, 1.0f, 0.0f); // Set The Color To Green GL.Vertex3(1.0f, 1.0f, -1.0f); // Top Right Of The Quad (Top) GL.Vertex3(-1.0f, 1.0f, -1.0f); // Top Left Of The Quad (Top) GL.Vertex3(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Quad (Top) GL.Vertex3(1.0f, 1.0f, 1.0f); // Bottom Right Of The Quad (Top) GL.Color3(1.0f, 0.5f, 0.0f); // Set The Color To Orange GL.Vertex3(1.0f, -1.0f, 1.0f); // Top Right Of The Quad (Bottom) GL.Vertex3(-1.0f, -1.0f, 1.0f); // Top Left Of The Quad (Bottom) GL.Vertex3(-1.0f, -1.0f, -1.0f); // Bottom Left Of The Quad (Bottom) GL.Vertex3(1.0f, -1.0f, -1.0f); // Bottom Right Of The Quad (Bottom) GL.Color3(1.0f, 0.0f, 0.0f); // Set The Color To Red GL.Vertex3(1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Front) GL.Vertex3(-1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Front) GL.Vertex3(-1.0f, -1.0f, 1.0f); // Bottom Left Of The Quad (Front) GL.Vertex3(1.0f, -1.0f, 1.0f); // Bottom Right Of The Quad (Front) GL.Color3(1.0f, 1.0f, 0.0f); // Set The Color To Yellow GL.Vertex3(1.0f, -1.0f, -1.0f); // Bottom Left Of The Quad (Back) GL.Vertex3(-1.0f, -1.0f, -1.0f); // Bottom Right Of The Quad (Back) GL.Vertex3(-1.0f, 1.0f, -1.0f); // Top Right Of The Quad (Back) GL.Vertex3(1.0f, 1.0f, -1.0f); // Top Left Of The Quad (Back) GL.Color3(0.0f, 0.0f, 1.0f); // Set The Color To Blue GL.Vertex3(-1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Left) GL.Vertex3(-1.0f, 1.0f, -1.0f); // Top Left Of The Quad (Left) GL.Vertex3(-1.0f, -1.0f, -1.0f); // Bottom Left Of The Quad (Left) GL.Vertex3(-1.0f, -1.0f, 1.0f); // Bottom Right Of The Quad (Left) GL.Color3(1.0f, 0.0f, 1.0f); // Set The Color To Violet GL.Vertex3(1.0f, 1.0f, -1.0f); // Top Right Of The Quad (Right) GL.Vertex3(1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Right) GL.Vertex3(1.0f, -1.0f, 1.0f); // Bottom Left Of The Quad (Right) GL.Vertex3(1.0f, -1.0f, -1.0f); // Bottom Right Of The Quad (Right) GL.End(); } }