OpenGL入门(四)-- OpenGL坐标系与坐标变换

OpenGL入门(四)-- OpenGL坐标系与坐标变换,第1张

上一篇文章《 OpenGL入门(三)-- OpenGL坐标解析与坐标变换 》,我们大概了解了OpenGL坐标系的一些常用概念认知,现在,我们继续深入介绍OpenGL坐标系的相关知识与坐标系的几何变换,让我们继续挖坑(入坑)吧。本文内容来自于:

为啥要转换到眼坐标系呢?

可以这样理解,通过前面的MODEVIEW变换,这个世界坐标系中的场景已经绘制好了。这时候我们还不能看到场景哦,因为我们的观察位置还没定呢,而且如果我们眼睛(照相机)的位置不同,那么观察物体的角度则不同,那看到的场景的样子肯定也不同,所以要有这一步,把场景与我们的观察位置对应起来。

默认情况下,眼坐标系与世界坐标系也是重合的。使用函数 gluLookAt()则可以指定眼睛(相机)的位置和眼睛看向的方向。该函数的原型如下:

函数参数中:

这个GL_PROJECTION矩阵定义了视景体( viewing volume),即确定哪些物体位于视野之内,位于视景体外的对象会被剪裁掉。除了视景体,投影变换还定义了顶点是如何投影到屏幕上的,是透视投影(perspective projection)还是正交投影(orthographic projection)。

透视投影似于日常生活看到的场景,远处物体看起来小,近处看起来大。使用透视投影函数glFrustum()和gluPerspective()

总的来说,OpenGL中的坐标处理过程包括模型变换、视变换、投影变换、视口变换等过程,三维物体的显示过程(OpenGL坐标变换全局过程)如下:

OpenGL中采用方式2的观点来解释视变换。再举一个例子,比如,一个物体中心位于原点,照相机也位于初始位置原点,方向指向-Z轴。为了对物体的+Z面成像,那么必须将照相机从原点移走,如果照相机仍然指向-Z轴,需要将照相机沿着+Z轴方向后退。通过在世界坐标系中指定相机的位置,指向的目标位置,以及viewUp向量来构造一个相机坐标系,通过视变换矩阵将物体坐标由世界坐标系转换到相机坐标系。

--

投影方式决定以何种方式成像,投影方式有很多种,OpenGL中主要使用两种方式,即透视投影(perspective projection)和正交投影( orthographic projection)。

视变换是将规范化设备坐标(NDC)转换为屏幕坐标的过程,如下图所示:

最后我们来看一下坐标变换过程从坐标计算角度的示意图:

--

总结:从上面的内容,我们可以了解了OpenGL坐标系和坐标变换的一些原理和关系,篇幅有点长,一定要坚持下去。下一篇文章尽请期待。。。

--

系列连载

x,y为鼠标按下式,光标相对于窗口左上角的位置

void glutMotionFunc(void (func)(int x, int y));

void glutPassiveMotionFunc(void (func)(int x, int y)); 设置移动回调函数;设置当前鼠标移动函数

Func为注册的鼠标移动函数

x,y为鼠标按下式,光标相对于窗口左上角的位置

当鼠标在窗口中按下并移动时调用glutMotionFunc注册的回调函数

当鼠标在窗口中移动时调用glutPassiveMotionFunc注册的回调函数

你在进行

glTranslatef(……)

glRotatef(……)

glRotatef(……)

glRotatef(……)

这些变换之前,先把当前矩阵保存起来,进行变换之后再还原,也就是这样:

glPushMatrix();

glTranslatef(……)

glRotatef(……)

glRotatef(……)

glRotatef(……)

glPopMatrix();

这样之后   所用的坐标还是世界坐标。做的变换世界上是在原来的世界坐标矩阵上乘以变化矩阵,如果不进行保存的话,那么世界矩阵也变了。

以上就是关于OpenGL入门(四)-- OpenGL坐标系与坐标变换全部的内容,包括:OpenGL入门(四)-- OpenGL坐标系与坐标变换、opengl哪个函数可以获取鼠标移动时的坐标、使用openGL如何计算世界坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9685408.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存