openGL使用右手坐标
从左到右,x递增
从下到上,y递增
从远到近,z递增
--------------------------------------------------------------------------------
OPENGL坐标系可分为:世界坐标系和当前绘图坐标系。
世界坐标系以屏幕中心为原点(0, 0, 0)。你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴。长度单位这样来定: 窗口范围按此单位恰好是(-1,-1)到(1,1)。
当前绘图坐标系是 绘制物体时的坐标系。程序刚初始化时,世界坐标系和当前绘图坐标系是重合的。当用glTranslatef(),glScalef(), glRotatef()对当前绘图坐标系进行平移、伸缩、旋转变换之后, 世界坐标系和当前绘图坐标系不再重合。改变以后,再用glVertex3f()等绘图函数绘图时,都是在当前绘图坐标系进行绘图,所有的函数参数也都是相 对当前绘图坐标系来讲的。 OpenGL中的6种坐标系
在OpenGL中存在6种坐标系,
1. Object or model coordinates
2. World coordinates
3. Eye (or Camera) coordinates
4. Clip coordinates
5. Normalized device coordinates
6. Window (or screen) coordinates
从object coordainates到world coordinates再到camera coordinate的变换,在OPENGL中统一称为model-view转换,初始化的时候,object coordinates和world coordinates还有camera coordinates坐标重合在原点,变换矩阵都为Identity。model-view matix转换points,vectorsd到camera坐标系。
在opengl编程中,有个困惑的问题,就是那个坐标系是不动的,我想是你想参考坐标系是不动的。比如我想建立了一个object,放到 camera坐标系中,这时,我以camera的原点为参考点。当然,我想看这个物体的时候,我就以object的原点为参考点,移动camera坐标系的原点,就可以看到object了。好像写了一堆废话,呵呵。
其中四种坐标经常要在程序中用到:世界坐标,物体坐标,设备坐标和眼坐标。
世界坐标是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。
【转自】http://blog.chinaunix.net/space.php?uid=20622737&do=blog&id=1912946
分享到:
相关推荐
OpenGL坐标系讲解是针对计算机图形学领域中OpenGL编程的一个重要主题。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D和3D图形。在使用OpenGL进行开发时,理解和掌握坐标系的概念至关重要,因为它们定义了图形在...
### OpenGL坐标系详解 #### OpenGL坐标系概览 OpenGL(Open Graphics Library)是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。其坐标系的理解对于掌握OpenGL编程至关重要。在OpenGL中...
### OpenGL坐标系详解 #### 一、OpenGL坐标系概述 OpenGL是一种广泛应用于计算机图形学的跨语言、跨平台的应用程序接口(API)。它主要用于渲染2D、3D矢量图形,是开发图形应用的重要工具之一。OpenGL的强大之处在于...
### OpenGL坐标系详解 #### 一、OpenGL坐标系概述 OpenGL是一种广泛应用于计算机图形学的图形库,尤其在三维图形渲染领域发挥着重要作用。要掌握OpenGL的三维图形处理能力,理解其内部使用的坐标系至关重要。本文...
1. **OpenGL坐标系**: OpenGL的默认坐标系是一个右手坐标系,其中x轴指向右,y轴向上,z轴指向屏幕外,这种坐标系被称为规范化设备坐标(NDC)。原点(0,0,0)位于屏幕中心,x和y轴的范围是-1到1,z轴的范围通常在-1...
OpenGL坐标系是理解任何OpenGL渲染的基础,而在此项目中,它被用来构建和定位彩虹在3D空间中的位置。 OpenGL坐标系通常由三个正轴组成:X、Y和Z,它们分别代表水平、垂直和深度方向。在标准坐标系中,原点位于屏幕...
- 在OpenGL进行3D可视化,绘制网格形式的坐标系则能更清晰的展示所画图形位置。由于OpenGL本身并没有绘制文字的功能,所以想要显示刻度标签或者一些其他标签需要自己手撸代码。Qt的QOpenGLWidget可以较方便的解决这...
在深入探讨OpenGL的坐标系、投影和几何变换之前,我们需要理解这些概念的基本含义。 首先,让我们来了解OpenGL的坐标系。OpenGL采用右手坐标系,其中X轴向右,Y轴向上,Z轴指向屏幕外,这是所谓的标准设备坐标系...
在这个主题中,我们主要关注如何在Android平台上使用OpenGL ES绘制一个透明的三维/空间坐标系。这个过程涉及到几个关键的概念和技术。 首先,我们要理解OpenGL ES中的坐标系。OpenGL ES采用右手坐标系,其中X轴正...
下面我们将详细探讨世界坐标系、本地坐标系、OpenGL坐标系以及屏幕坐标系。 1. **世界坐标系 (World Coordinate System)**: 世界坐标系是整个游戏场景的全局坐标系统,用于定位所有游戏对象。在这个坐标系中,每...
"OpenGL坐标系详解" OpenGL坐标系是计算机图形学中一个非常重要的概念,它是描述三维空间中物体的位置和方向的坐标系统。在OpenGL中,坐标系可以分为世界坐标系和当前绘图坐标系。 世界坐标系是OpenGL中的一个固定...
本资源“MyMDOpenGL.rar”似乎包含了一个利用OpenGL实现三维坐标系旋转的示例程序,通过鼠标操作可以直观地展示三维物体的旋转效果。 在OpenGL中,坐标系是一个基础概念,它定义了图形在空间中的位置。OpenGL使用...
一、OpenGL坐标系 OpenGL使用右手坐标系统,其中X轴正方向向右,Y轴正方向向上,Z轴正方向指向屏幕外,形成一个标准的笛卡尔坐标系。原点(0,0,0)位于屏幕中心。在OpenGL的视图空间中,Z轴的负方向表示远离观察者的...
该函数接受两个整型参数`winx`和`winy`,分别代表屏幕坐标系中的x和y坐标,并返回三个双精度浮点数变量`ObjectX`、`ObjectY`和`ObjectZ`,它们分别对应于OpenGL坐标系中的x、y和z坐标。 代码的关键步骤包括: 1. **...
本文将详细介绍在Cocos2d-x中使用到的三种坐标系:OpenGL坐标系、世界坐标系和节点坐标系,并结合锚点的概念和转换函数深入解析它们的应用。 首先,让我们从UI坐标系开始。UI坐标系是许多操作系统中通用的坐标系统...
1. 对标架进行变换,使用glTranslate, glRotate等变换其实是对当前坐标架进行变换,然后把顶点坐标放置在当前的新坐标系中 2. 对坐标进行变换
OpenGL3Dtrack 2.1版本在原来2.0版本上做了一下的优化和修改: 1、修正了目前发现的BUG; 2、修改了界面,把在三个面的投影做成了一个公共的投影面,然后在工具栏中可以选择 3、把设置的面板做进了菜单的设置 4、...
本教程将详细介绍如何在Qt 5.9.0环境下利用OpenGL绘制一个3D坐标系。 首先,确保已安装了必要的库。在Ubuntu上,可以通过以下命令安装Qt和OpenGL开发环境: ```bash sudo apt-get update sudo apt-get install qt5...