`
hereson3
  • 浏览: 162917 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

OpenGL 入门教程(六)

 
阅读更多

OpenGL 入门教程(六)

本文源自:http://dev.gameres.com/Program/Visual/3D/OpenGLTutorial/OpenGL_6.htm

  OpenGL中从三维场景到屏幕图形要经历如下所示的变换过程:

  其中四种坐标经常要在程序中用到:世界坐标,物体坐标,设备坐标和眼坐标。

世界坐标是OpenGL中用来描述场景的坐标,Z+轴垂直屏幕向外,X+从左到右,Y+轴从下到上,是右手笛卡尔坐标系统。我们用这个坐标系来描述物体及光源的位置。

将物体放到场景中也就是将物体平移到特定位置、旋转一定角度,这些操作就是坐标变换。OpenGL中提供了glTranslate*/glRotate*/glScale*三条坐标变换命令,利用OpenGL的矩阵运算命令,则可以实现任意复杂的坐标变换。

非常重要: OpenGL中有一个坐标变换矩阵栈(ModelView),栈顶就是当前坐标变换矩阵,进入OpenGL管道的每个坐标(齐次坐标)都会先乘上这个矩阵,结果才是对应点在场景中的世界坐标。OpenGL中的坐标变换都是通过矩阵运算完成的,与图形学课本的描述完全一致。要注意的是变换中的矩阵乘法是左乘,而矩阵乘法与算术乘法不同,不符合交换律(万一不明白去看矩阵代数书好了)。

glTranslate*(x,y,z):平移,参数为各轴向的移动量。
glRotate(d,x,y,z):旋转,第一个参数为转动的度数,后三个参数表明是否绕该轴旋转。通常x,y,z中只有一个为1,其余为0,用连续几条旋转命令完成复杂旋转。由于矩阵运算的左乘特点,旋转命令的顺序与旋转动作的顺序正好相反

物体坐标是以物体某一点为原点而建立的?世界坐标?,该坐标系仅对该物体适用,用来简化对物体各部分坐标的描述。物体放到场景中时,各部分经历的坐标变换相同,相对位置不变,所以可视为一个整体,与人类的思维习惯一致。

眼坐标是以视点为原点,以视线的方向为Z+轴正方向的坐标系中的方向。OpenGL管道会将世界坐标先变换到眼坐标,然后进行裁剪,只有在视线范围(视见体)之内的场景才会进入下一阶段的计算。

同样的,有投影变换矩阵栈(Projection),栈顶矩阵就是当前投影变换矩阵,负责将场景各坐标变换到眼坐标,由所得到的结果是裁剪后的场景部分,称为裁剪坐标。前面提到过的视见体设定其实就是在建立该矩阵。

OpenGL的重要功能之一就是将三维的世界坐标经过变换、投影等计算,最终算出它在显示设备上对应的位置,这个位置就称为设备坐标。在屏幕、打印机等设备上的坐标是二维坐标。值得一提的是,OpenGL可以只使用设备的一部分进行绘制,这个部分称为视区或视口(viewport)。投影得到的是视区内的坐标(投影坐标),从投影坐标到设备坐标的计算过程就是设备变换了。

矩阵栈切换:glMatrixMode(GL_MODELVIEWING或GL_PROJECTION);本命令执行后参数所指矩阵栈就成为当前矩阵栈,以后的矩阵栈操纵命令将作用于它。

矩阵栈操纵命令:
glPushMatrix(); 当前矩阵入栈,这时矩阵栈将栈顶值压入栈。
glPopMatrix(); 栈顶出栈,通常与上一条命令配合使用。
glLoadIdentity(); 将栈顶设为不变矩阵(就是对角线全为1其它为0的那个)。
glMultMatrix(M);将栈顶T设为M?T。
 

分享到:
评论

相关推荐

    OpenGL入门教程(精).pdf

    ### OpenGL入门教程知识点详解 #### 一、OpenGL简介与优势 **OpenGL** 是一种跨语言、跨平台的应用程序编程接口(API),主要用于渲染2D、3D矢量图形。它是图形学领域的一个重要标准,被广泛应用于游戏开发、虚拟...

    OpenGL入门教程实例

    OpenGL入门教程实例 OpenGL入门教程实例 OpenGL入门教程实例 OpenGL入门教程实例 OpenGL入门教程实例 OpenGL入门教程实例 OpenGL入门教程实例

    OpenGL入门教程(精)

    OpenGL入门教程(精)

    OpenGL入门教程pdf(最基础)

    入门教程内容: - 学习OpenGL能使人掌握创建绚丽PC游戏所必需的编程技能,突破老旧图形接口的限制。 - OpenGL之所以是主流图形API之一,是因为它具有与C语言的紧密结合、优秀的可移植性以及高性能的图形渲染能力。 -...

    OpenGL入门经典教程

    ### OpenGL入门经典教程知识点概述 #### 一、OpenGL简介及特点 - **替代传统图形库**:传统的图形库,如TC中的`<graphics.h>`,虽然简单易用,但功能有限,仅支持较低分辨率(例如640x480)和较少的颜色模式(如16...

    OpenGL入门教程(精选)相关例子试验代码

    OpenGL入门教程是学习图形编程的重要资源,特别是对于初学者来说,它能帮助理解3D图形渲染的基本原理。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D、3D图像。在这个“OpenGL入门教程(精选)相关例子试验代码...

    OpenGL入门教程12讲代码加解析

    OpenGL入门教程12讲代码加解析

    OpenGL入门教程

    OpenGL入门教程 OpenGL入门教程 OpenGL入门教程

    OpenGL入门教程,教你理解

    OpenGL入门教程旨在帮助初学者快速掌握这一强大的图形编程接口,为3D图形处理打下坚实的基础。OpenGL是一种跨语言、跨平台的编程接口,用于渲染2D、3D矢量图形。它广泛应用于游戏开发、科学可视化、工程设计等多个...

    opengl入门教程.doc

    OpenGL入门教程旨在帮助初学者掌握这个强大的图形编程接口。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D和3D图形。它的核心库包含了115个基础函数,这些函数可在任何支持OpenGL的平台上运行。在此基础上,...

    OpenGL入门教程.pdf

    ### OpenGL入门教程知识点详解 #### 一、OpenGL简介与优势 **OpenGL**(Open Graphics Library)是一种跨语言、跨平台的应用程序编程接口(API),主要用于渲染2D、3D矢量图形。它由一系列调用构成,这些调用定义...

    android OpenGL 入门 教程

    android OpenGL 入门 教程 12 个小case 。

    OpenGL教程.pdf

    OpenGL教程.pdf

    opengl教程,轻松入门

    opengl教程,轻松入门 opengl教程,轻松入门 opengl教程,轻松入门 opengl教程,轻松入门

    Opengl入门案例教程.zip

    QT opengl入门教程案例

    Android opengl 入门教程

    android2.2 opengl es 2.0 入门基础代码教程 通过简单代码总结,帮助新手入门。 内容包括:绘制基础、投影方式、光照效果、纹理绘制几个方面。

Global site tag (gtag.js) - Google Analytics