zoukankan      html  css  js  c++  java
  • 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();
    
            }
        }
    }
  • 相关阅读:
    Android开发经验一判断当前屏幕是全屏还是非全屏
    Android得到控件在屏幕中的坐标
    MyBatis简单的增删改查以及简单的分页查询实现
    Coreseek:第二步建索引及測试
    极静之渊
    统计电影票房排名前10的电影并存入还有一个文件
    AAA
    FreeLink开源呼叫中心设计思想
    树后台数据存储(採用webmethod)
    [乐意黎原创] 百度统计这个坑爹货
  • 原文地址:https://www.cnblogs.com/lotuses/p/11360328.html
Copyright © 2011-2022 走看看