//------------------------------------- public override void ConvertPrimitive(I3DPrimitive primitive, SharpGL.OpenGL gl) { C3DPrimitiveQuad quad = primitive as C3DPrimitiveQuad; if (quad == null || quad.Points == null || quad.Points.Length != 4) { return; } for (int nTmp = 0; nTmp < 2; nTmp++) { if (nTmp == 0) { gl.PolygonMode(OpenGL.FRONT_AND_BACK, OpenGL.FILL); gl.Color(GetComposantsCouleur(quad.Couleur)); } else { gl.PolygonMode(OpenGL.FRONT_AND_BACK, OpenGL.LINE); gl.Color(0.0f, 0.0f, 0.0f, 1.0f); } gl.Material(OpenGL.FRONT_AND_BACK, OpenGL.SPECULAR, GetComposantsCouleur(quad.Couleur)); gl.Material(OpenGL.FRONT_AND_BACK, OpenGL.SHININESS, 100.0f); gl.Begin(OpenGL.QUADS); //Fond //gl.Normal3f(0f, 0f, -1.0f); for (int n = 0; n < 4; n++) { gl.Vertex(quad.Points[n].X, quad.Points[n].Y, quad.Points[n].Z); } gl.End(); } }
public static void CreateOpenGL(I3DPrimitive primitive, SharpGL.OpenGL gl) { CConvertisseurOpenGL convertisseur = null; if (m_dicConvertisseurs.TryGetValue(primitive.GetType(), out convertisseur)) { convertisseur.ConvertPrimitive(primitive, gl); } }
//------------------------------------- public override void ConvertPrimitive(I3DPrimitive primitive, SharpGL.OpenGL gl) { C3DPrimitiveLigne ligne = primitive as C3DPrimitiveLigne; if (ligne == null || ligne.Points == null || ligne.Points.Length < 2) { return; } gl.Begin(OpenGL.LINES); for (int n = 0; n < ligne.Points.Length; n++) { gl.Vertex(ligne.Points[n].X, ligne.Points[n].Y, ligne.Points[n].Z); } gl.End(); }
public abstract void ConvertPrimitive(I3DPrimitive primitive, SharpGL.OpenGL gl);
//------------------------------------- public override void ConvertPrimitive(I3DPrimitive primitive, SharpGL.OpenGL gl) { C3DPrimitiveCube cube = primitive as C3DPrimitiveCube; if (cube == null) { return; } for (int nTmp = 0; nTmp < 2; nTmp++) { if (nTmp == 0) { gl.PolygonMode(OpenGL.FRONT_AND_BACK, OpenGL.FILL); gl.Color(GetComposantsCouleur(cube.Couleur)); } else { gl.PolygonMode(OpenGL.FRONT_AND_BACK, OpenGL.LINE); gl.Color(0.0f, 0.0f, 0.0f, 1.0f); } gl.Material(OpenGL.FRONT_AND_BACK, OpenGL.SPECULAR, GetComposantsCouleur(cube.Couleur)); gl.Material(OpenGL.FRONT_AND_BACK, OpenGL.SHININESS, 100.0f); gl.Begin(OpenGL.QUADS); //Fond gl.Normal3f(0f, 0f, -1.0f); gl.Vertex(cube.Position.X, cube.Position.Y, cube.Position.Z); gl.Vertex(cube.Position.X, cube.Position.Y + cube.Size.Height, cube.Position.Z); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y + cube.Size.Height, cube.Position.Z); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y, cube.Position.Z); //Gauche gl.Normal(new float[] { -100.0f, 0.0f, 0.0f }); gl.Vertex(cube.Position.X, cube.Position.Y, cube.Position.Z); gl.Vertex(cube.Position.X, cube.Position.Y, cube.Position.Z + cube.Size.Depth); gl.Vertex(cube.Position.X, cube.Position.Y + cube.Size.Height, cube.Position.Z + cube.Size.Depth); gl.Vertex(cube.Position.X, cube.Position.Y + cube.Size.Height, cube.Position.Z); //Dessus //gl.Normal(new float[] { 0.0f, 1.0f, 0.0f }); gl.Vertex(cube.Position.X, cube.Position.Y + cube.Size.Height, cube.Position.Z); gl.Vertex(cube.Position.X, cube.Position.Y + cube.Size.Height, cube.Position.Z + cube.Size.Depth); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y + cube.Size.Height, cube.Position.Z + cube.Size.Depth); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y + cube.Size.Height, cube.Position.Z); //Dessous gl.Normal(new float[] { 0.0f, -1.0f, 0.0f }); gl.Vertex(cube.Position.X, cube.Position.Y, cube.Position.Z); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y, cube.Position.Z); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y, cube.Position.Z + cube.Size.Depth); gl.Vertex(cube.Position.X, cube.Position.Y, cube.Position.Z + cube.Size.Depth); //Droite gl.Normal(new float[] { 1.0f, 0.0f, 0.0f }); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y, cube.Position.Z); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y + cube.Size.Height, cube.Position.Z); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y + cube.Size.Height, cube.Position.Z + cube.Size.Depth); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y, cube.Position.Z + cube.Size.Depth); //Avant gl.Normal(new float[] { 0f, 0f, 1.0f }); gl.Vertex(cube.Position.X, cube.Position.Y, cube.Position.Z + cube.Size.Depth); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y, cube.Position.Z + cube.Size.Depth); gl.Vertex(cube.Position.X + cube.Size.With, cube.Position.Y + cube.Size.Height, cube.Position.Z + cube.Size.Depth); gl.Vertex(cube.Position.X, cube.Position.Y + cube.Size.Height, cube.Position.Z + cube.Size.Depth); gl.End(); /*if (nTmp == 0) * { * //Gauche * * gl.Normal(new float[] { -100.0f, 0.0f, 0.0f }); * for (int nY = 0; nY <= cube.Size.Height; nY += cube.Size.Height / 50) * { * gl.Begin(OpenGL.QUAD_STRIP); * gl.Vertex(cube.Position.X, cube.Position.Y + nY, cube.Position.Z); * gl.Vertex(cube.Position.X, cube.Position.Y + nY + cube.Size.Height / 50, cube.Position.Z); * * for (int nZ = 0; nZ <= cube.Size.Depth; nZ += cube.Size.Depth / 50) * { * gl.Vertex(cube.Position.X, cube.Position.Y + nY, cube.Position.Z + nZ); * gl.Vertex(cube.Position.X, cube.Position.Y + nY + cube.Size.Height / 50, cube.Position.Z + nZ + cube.Size.Depth / 50); * } * } * * gl.End(); * }*/ } }