15事例十五:纹理映射
Posted lotuses
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15事例十五:纹理映射相关的知识,希望对你有一定的参考价值。
namespace sharpGLTest15 public partial class SharpGLForm : Form float ang = 0f; SharpGL.SceneGraph.Assets.Texture[] textrue; float[] fLightPosition = new float[4] 0.0f, 0.0f, 0.0f, 1.0f ; //5f, 8f, -8f, 1f ;// 光源位置 float[] fLightAmbient = new float[4] 0f, 0f, 0f, 1f ;// 环境光参数 float[] fLightDiffuse = new float[4] 1f, 1f, 1f, 1f ;// 漫射光参数 float[] fLightSpecular = new float[4] 1f, 1f, 1f, 1f ; //镜面反射 public SharpGLForm() InitializeComponent(); private void openGLControl_OpenGLInitialized(object sender, EventArgs e) textrue = new SharpGL.SceneGraph.Assets.Texture[6]; for (int i = 0; i < 6; i++) textrue[i] = new SharpGL.SceneGraph.Assets.Texture(); OpenGL gl = openGLControl.OpenGL; gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_AMBIENT, fLightAmbient);//环境光源 gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_DIFFUSE, fLightDiffuse);//漫射光源 gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, fLightPosition);//光源位置 gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_SPECULAR, fLightSpecular); textrue[0].Create(gl, "a1.jpg"); textrue[1].Create(gl, "a2.jpg"); textrue[2].Create(gl, "a3.jpg"); textrue[3].Create(gl, "a4.jpg"); textrue[4].Create(gl, "a1.jpg"); textrue[5].Create(gl, "a2.jpg"); gl.ClearColor(0.0f, 0.2f, 0.2f, 0.0f); gl.ClearDepth(1f); gl.DepthFunc(OpenGL.GL_LEQUAL); gl.Enable(OpenGL.GL_DEPTH_TEST); gl.ShadeModel(OpenGL.GL_SMOOTH); gl.Enable(OpenGL.GL_LIGHTING);//开启光照 gl.Enable(OpenGL.GL_LIGHT0); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.Enable(OpenGL.GL_NORMALIZE); private void openGLControl_Resized(object sender, EventArgs e) OpenGL gl = openGLControl.OpenGL; gl.MatrixMode(OpenGL.GL_PROJECTION); gl.LoadIdentity(); gl.Perspective(45f, (double)Width / (double)Height, 0.01, 100.0); gl.LookAt(1, 1, -1, 0, 0, 0, 0, 1, 0); gl.MatrixMode(OpenGL.GL_MODELVIEW); private void openGLControl_OpenGLDraw(object sender, RenderEventArgs e) OpenGL gl = openGLControl.OpenGL; gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.LoadIdentity(); gl.Translate(-0.6f, 0f, 0.7f); gl.Rotate(ang, 0, 1, 0); drawBox(gl, 0f, 0f, 0.5f); ang += 2f; private void drawBox(OpenGL gl, float xPos, float yPos, float zPos) gl.PushMatrix(); gl.Translate(xPos, yPos, zPos); textrue[0].Bind(gl); gl.Begin(OpenGL.GL_QUADS); //前 gl.Normal(1, 1, 1); gl.TexCoord(0, 0); gl.Vertex(0, 0, 0); gl.TexCoord(1, 0); gl.Vertex(-1, 0, 0); gl.TexCoord(1, 1); gl.Vertex(-1, -1, 0); gl.TexCoord(0, 1); gl.Vertex(0, -1, 0); gl.End(); textrue[1].Bind(gl); gl.Begin(OpenGL.GL_QUADS); //底 gl.Normal(1, 1, 1); gl.TexCoord(0, 0); gl.Vertex(0, 0, 0); gl.TexCoord(1, 0); gl.Vertex(0, 0, -1); gl.TexCoord(1, 1); gl.Vertex(-1, 0, -1); gl.TexCoord(0, 1); gl.Vertex(-1, 0, 0); gl.End(); //textrue[2].Bind(gl); //gl.Begin(OpenGL.GL_QUADS); // // //左 // gl.Normal(1, 1, 1); // gl.TexCoord(0, 0); gl.Vertex(-1, 0, 0); // gl.TexCoord(1, 0); gl.Vertex(-1, 0, -1); // gl.TexCoord(1, 1); gl.Vertex(-1, -1, -1); // gl.TexCoord(0, 1); gl.Vertex(-1, -1, 0); // //gl.End(); //textrue[3].Bind(gl); //gl.Begin(OpenGL.GL_QUADS); // // //右 // gl.Normal(1, 1, 1); // gl.TexCoord(0, 0); gl.Vertex(0, 0, 0); // gl.TexCoord(1, 0); gl.Vertex(0, 0, -1); // gl.TexCoord(1, 1); gl.Vertex(0, -1, -1); // gl.TexCoord(0, 1); gl.Vertex(0, -1, 0); // //gl.End(); textrue[4].Bind(gl); gl.Begin(OpenGL.GL_QUADS); //后 gl.Normal(1, 1, 1); gl.TexCoord(0, 0); gl.Vertex(0, 0, -1); gl.TexCoord(1, 0); gl.Vertex(-1, 0, -1); gl.TexCoord(1, 1); gl.Vertex(-1, -1, -1); gl.TexCoord(0, 1); gl.Vertex(0, -1, -1); gl.End(); textrue[5].Bind(gl); gl.Begin(OpenGL.GL_QUADS); //顶 gl.Normal(1, 1, 1); gl.TexCoord(0, 0); gl.Vertex(0, -1, 0); gl.TexCoord(1, 0); gl.Vertex(0, -1, -1); gl.TexCoord(1, 1); gl.Vertex(-1, -1, -1); gl.TexCoord(0, 1); gl.Vertex(-1, -1, 0); gl.End(); gl.PopMatrix();
以上是关于15事例十五:纹理映射的主要内容,如果未能解决你的问题,请参考以下文章