admin管理员组

文章数量:1531428

在C# 使用SharpGL-Hello Word代码详解中的Resized函数里,出现了Perspective和LookAt,将Hello Word代码详解中的此部分复制过来,继续讲解里面的内容

        private void openGLControl_Resized(object sender, EventArgs e)
        {
   
            //  TODO: Set the projection matrix here.
            //  Get the OpenGL object.
            OpenGL gl = openGLControl.OpenGL;
            //  Set the projection matrix.
            gl.MatrixMode(OpenGL.GL_PROJECTION);
            //设置OpenGL矩阵模式,OpenGL都是通过矩阵操作的,不同的矩阵模式对应不同的操作
			//OpenGL.GL_PROJECTION:投影矩阵
			
            //  Load the identity.
            gl.LoadIdentity();

            //  Create a perspective transformation.
            gl.Perspective(60.0f, (double)Width / (double)Height, 0.01, 100.0);
            //透视投影设置
            //简单点理解就是,设置相机镜头:广角大小、视图长宽比、视野近点、视野远点
            //投影的目的是定义一个视景体,使得视景体外多余的部分不会显示
            //投影包括透视投影和正式投影,后续详讲

            //  Use the 'look at' helper function to position and aim the camera.
            gl.LookAt(-5, 5, -5, 0, 0, 0, 0, 1, 0);
            //设置相机参数,三个参数一组,分别代表:相机位置、镜头正对位置、相机正向位置
            //上述表示:相机放在(-5,5,-5)位置,镜头对着(0,0,0)点,相机正向与Y轴一致

            //  Set the modelview matrix.
            gl.MatrixMode(OpenGL.GL_MODELVIEW);
            //设置OpenGL矩阵模式,OpenGL.GL_MODELVIEW:模型视图矩阵
        }

一、**public void MatrixMode(uint mode)**函数
此函数主要是用来设定当前OpenGL操作的矩阵堆栈目标,由于OpenGL主要是一个大很大的状态机,运算都采用矩阵预算,通过MatrixMode可以设置当前操作的矩阵目标。一般,在需要绘制出对象或要对所绘制对象进行几何变换时,需要将变换矩阵设置成模型视图模式;而当需要对绘制的对象设置某种投影方式时,则需要将变换矩阵设置成投影模式;只有在进行纹理映射时,才需要将变换矩阵设置成纹理模式。
mode参数说明:
1、GL_MODELVIEW:指定矩阵堆栈目标是模型视图矩阵,可以在执行此命令后,输出自己的物体图形了,以及执行缩放、平移、旋转等几何变换。
2、GL_PROJECTION:指定矩阵堆栈目标是投影矩阵,执行此命令后,可以设置投影效果参数,以及相机参数。简单点理解就是,设置绘制出来的图像呈现到屏幕的效果:视图、视角、成像规则等。
3、GL_TEXTURE:指定矩阵堆栈目标是投影矩阵,执行此命令后,可以对纹理贴图进行操作。

二、几何变换
OpenGL变换实际上是通过矩阵运算来实现。无论是平移、旋转还是缩放,都是通过在当前矩阵的基础上乘以一个新的矩阵来达到目的。矩阵运算是一个比较基础的运算,在此就不做说明,需要补课的同学可以自己上网搜索。
一般几何变换操作需要以下几个步骤:
1、在做几何变换之前,需要将OpenGL当前矩阵堆栈设置为视图矩阵,需要用到matrixMode函数:

            //  Set the modelview matrix.
            gl.MatrixMode(OpenGL.GL_MODELVIEW);
            //设置OpenGL矩阵模式,OpenGL.GL_MODELVIEW:模型视图矩阵

2、在做几何变换前,将OpenGL当前矩阵设置为单位矩阵,确保后面的几何矩阵变换结果可寻,需要用到LoadIdentity函数:

            //  Load the identity.
            gl.LoadIdentity();
            //设置当前矩阵为单位矩阵

3、此时就可以做几何变换操作了,几何变换操作主要涉及三个操作:平移、旋转、缩放。
**平移函数:Translate(xPos, yPos, zPos):**把当前矩阵跟平移矩阵相乘,可以将当前矩阵矢量移动(xPos,yPos,zPos)量。其中,xPos:X轴方向平移量,yPos:Y轴方向平移量,zPos:Z轴方向平移量。
**旋转函数1:Rotate(anglex,angley,anglez):**以欧拉角的方式对当前矩阵进行旋转,三个参数分别对应:俯仰角(Pitch)、偏航角(Yaw)和滚转角(Roll)

此图出自LearnOpenGL CN网站
**旋转函数2:Rotate(angle,x,y,z):**以旋转角度+旋转轴方式对当前矩阵进行旋转,其中,angle:旋转角度,(x,y,z):以向量(x,y,z)为旋转轴,angle方向遵循右手螺旋法则。
**缩放函数:Scale(scalex,scaley,scalez)ÿ

本文标签: SharpGLperspectiveLookAt