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