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(); } } }