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();
    
            }
        }
    }
  • 相关阅读:
    c#自动更新+安装程序的制作
    VS2013项目受源代码管理向源代码管理注册此项目时出错
    WinDbg配置和使用基础
    InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET程序)
    PowerDesigner 如何生成数据库更新脚本
    用户故事(User Story)
    Troubleshooting Record and Playback issues in Coded UI Test
    Coded UI
    compare two oracle database schemas
    How to: Use Schema Compare to Compare Different Database Definitions
  • 原文地址:https://www.cnblogs.com/lotuses/p/11360328.html
Copyright © 2011-2022 走看看