码迷,mamicode.com
首页 > 其他好文 > 详细

15、事例十五:纹理映射

时间:2019-08-15 21:10:23      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:test   arp   send   size   partial   position   idt   sha   private   

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、事例十五:纹理映射

标签:test   arp   send   size   partial   position   idt   sha   private   

原文地址:https://www.cnblogs.com/lotuses/p/11360328.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!