コード例 #1
0
        protected void trianglesRender(Triangle[] tris, Material material, ModelEntityBase entities)
        {
            foreach (Triangle tri in tris)
            {
                Gl.glBegin(Gl.GL_TRIANGLES);
                // Vertex 1
                if (entities.normed)
                {
                    Gl.glNormal3d(tri.v1.norm.x, tri.v1.norm.y, tri.v1.norm.z);
                }
                if (material != null && material.TextureId >= 0)
                {
                    Gl.glTexCoord2f(tri.v1.tex_coord.U, tri.v1.tex_coord.V);
                }
                Gl.glVertex3d(tri.v1.v.x, tri.v1.v.y, tri.v1.v.z);

                // Vertex 2
                if (entities.normed)
                {
                    Gl.glNormal3d(tri.v2.norm.x, tri.v2.norm.y, tri.v2.norm.z);
                }
                if (material != null && material.TextureId >= 0)
                {
                    Gl.glTexCoord2f(tri.v2.tex_coord.U, tri.v2.tex_coord.V);
                }
                Gl.glVertex3d(tri.v2.v.x, tri.v2.v.y, tri.v2.v.z);
                // Vertex 3
                if (entities.normed)
                {
                    Gl.glNormal3d(tri.v3.norm.x, tri.v3.norm.y, tri.v3.norm.z);
                }
                if (material != null && material.TextureId >= 0)
                {
                    Gl.glTexCoord2f(tri.v3.tex_coord.U, tri.v3.tex_coord.V);
                }
                Gl.glVertex3d(tri.v3.v.x, tri.v3.v.y, tri.v3.v.z);
                Gl.glEnd();
            }
        }
コード例 #2
0
        protected void entitiesRender(ModelEntityBase entities)
        {
            foreach (ModelBase.Triangle tri in entities.triangles)
            {
                ModelBase.Material material = null;
                //material = material_DIC[tri];
                if (tri.material != null)
                {
                    material = tri.material;
                    if (material.TextureId >= 0)
                    {
                        Gl.glEnable(Gl.GL_TEXTURE_2D);
                        Gl.glBindTexture(Gl.GL_TEXTURE_2D, material.TextureId);
                    }
                    float   trans    = (float)material.Trans / 100f;
                    float[] ambient  = new float[] { material.Ambient[0], material.Ambient[1], material.Ambient[2], trans };
                    float[] diffuse  = new float[] { material.Diffuse[0], material.Diffuse[1], material.Diffuse[2], trans };
                    float[] specular = new float[] { material.Specular[0], material.Specular[1], material.Specular[2], trans };
                    Gl.glMaterialfv(Gl.GL_FRONT_AND_BACK, Gl.GL_AMBIENT, ambient);
                    Gl.glMaterialfv(Gl.GL_FRONT_AND_BACK, Gl.GL_DIFFUSE, diffuse);
                    Gl.glMaterialfv(Gl.GL_FRONT_AND_BACK, Gl.GL_SPECULAR, specular);

                    Gl.glColor3fv(diffuse);
                    Gl.glMaterialf(Gl.GL_FRONT_AND_BACK, Gl.GL_SHININESS, material.Shininess);
                }
                //@TODO
                //TextureIdでtriangleをまとめて、glBegin,glEndの数を減らす
                // 2012/09/11では、glBeginとEndの間にglBindがあるとエラーを起こすため回避
                Gl.glBegin(Gl.GL_TRIANGLES);
                // Vertex 1
                if (entities.normed)
                {
                    Gl.glNormal3d(tri.v1.norm.x, tri.v1.norm.y, tri.v1.norm.z);
                }
                if (material != null && material.TextureId >= 0)
                {
                    Gl.glTexCoord2f(tri.v1.tex_coord.U, tri.v1.tex_coord.V);
                }
                Gl.glVertex3d(tri.v1.v.x, tri.v1.v.y, tri.v1.v.z);

                // Vertex 2
                if (entities.normed)
                {
                    Gl.glNormal3d(tri.v2.norm.x, tri.v2.norm.y, tri.v2.norm.z);
                }
                if (material != null && material.TextureId >= 0)
                {
                    Gl.glTexCoord2f(tri.v2.tex_coord.U, tri.v2.tex_coord.V);
                }
                Gl.glVertex3d(tri.v2.v.x, tri.v2.v.y, tri.v2.v.z);
                // Vertex 3
                if (entities.normed)
                {
                    Gl.glNormal3d(tri.v3.norm.x, tri.v3.norm.y, tri.v3.norm.z);
                }
                if (material != null && material.TextureId >= 0)
                {
                    Gl.glTexCoord2f(tri.v3.tex_coord.U, tri.v3.tex_coord.V);
                }
                Gl.glVertex3d(tri.v3.v.x, tri.v3.v.y, tri.v3.v.z);
                Gl.glEnd();
                Gl.glDisable(Gl.GL_TEXTURE_2D);
            }
        }