首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OpenGL ModelView混淆

OpenGL ModelView混淆
EN

Stack Overflow用户
提问于 2011-10-03 19:35:18
回答 1查看 1.3K关注 0票数 0

我使用的是具有固定函数管道的opengl 2.0。似乎在OpenGL2.0中,他们推动顶点通过模型-视图堆栈,这基本上是(视图矩阵*模型矩阵),其中模型矩阵不提供任何变换,它带来了一个对象,比如说一个立方体,中心在(0,0,0),如果模型视图矩阵有一个单位矩阵,loaded.Also相机本身将位于(0,0,0)向下的负z轴。

因此,如果我对立方体使用翻译调用,我真的是在Eye空间中移动立方体吗?

根据我所了解到的,广义的视图管道是

顶点->建模矩阵->世界空间,世界空间中的对象->查看矩阵->眼睛空间,眼睛空间对象->投影矩阵->裁剪空间,然后规格化等

因此,如果我切换到模型视图矩阵stack() loadidentity () negative (在负z方向上向上5个单位) gldrawcube()

它会根据平移将立方体从眼睛空间的中心移动吗?

我想我的困惑是,当程序启动时,我不知道模型视图矩阵堆栈中加载了什么,我假设它是一个将所有东西都带到眼睛空间中心的单位矩阵。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-04 07:11:44

在新创建的OpenGL上下文中,所有矩阵都是相同的,即向量经过未变换。在固定函数中,OpenGL顶点变换跳过了“→”步骤,将对象的世界和世界的→eye折叠为一个变换。不过,这没什么大不了的。无论如何,在眼睛空间中计算光照是最简单的。由于修复了函数OpenGL不识别着色器(除了作为扩展),因此不需要在世界空间中执行操作。

glTranslate、glRotate、glScale不会转换对象。它们操作堆栈顶部的矩阵以进行操作。因此,它们最终会对变换做出贡献,但不是在对象上,而是在顶点(位置)级别。

,它会根据平移将立方体从眼睛空间的中心移动?

的确,但“移动”(实际上是变换的)的是立方体的顶点;它可能不仅仅是一个平移。

由于注释而进行编辑

要理解的关键是转换组成。首先,也是最重要的转换是映射

代码语言:javascript
运行
AI代码解释
复制
T: R^4 -> R^4, v' = v |-> T(v)

有一个变换的子集,即线性变换,可以用矩阵乘法来表示:

代码语言:javascript
运行
AI代码解释
复制
v' = T * v

可以连接变换,即线性变换子集的v = v |-> T'○T (v),以矩阵形式编写,您可以将其扩展为

代码语言:javascript
运行
AI代码解释
复制
v' = T * v
v'' = T' * v'

=>

v'' = T' * T * v

现在,让V表示视图变换,让W表示世界变换。因此,总的转换是

代码语言:javascript
运行
AI代码解释
复制
M = V * W

矩阵乘法的顺序很重要(即矩阵乘法不是可交换的):

代码语言:javascript
运行
AI代码解释
复制
M, N{Matrices}: M * NN * M

视图变换V是整个世界的变换,因此它以一种方式移动,即世界中的摄影机最终位于原点,沿负Z轴向下查看。因此,假设V'是将“相机”从原点移动到它在世界中的位置的变换,该运动的反向运动以一种相机停在原点的方式移动世界。所以

代码语言:javascript
运行
AI代码解释
复制
V = inv(V')

最后但并非最不重要的是,给定一些矩阵A,B,C

代码语言:javascript
运行
AI代码解释
复制
A = B * C

然后

代码语言:javascript
运行
AI代码解释
复制
inv(A) = inv(C) * inv(B)

即操作顺序颠倒。因此,如果您使用逆OpenGL矩阵运算来“定位”您的“相机”,则运算的顺序必须颠倒。由于操作的整体顺序很重要,因此视图转换必须在模型转换之前进行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7639771

复制
相关文章
A simple augmented reality application
在 OpenGL 中主要使用 4x4 矩阵来表示转换,这个和 3x4 的相机矩阵不同。然而,OpenGL 中的 GL_PROJECTION 和 GL_MODELVIEW 是将相机矩阵分开来表示。其中 GL_PROJECTION 表示相机的内参数 K 矩阵;GL_MODELVIEW 表示物体和相机之间的转换关系,可以粗略地表示为 R 和 t 矩阵。
caoqi95
2019/10/18
8890
Qt Model/View教程——只读Table
一直想学习Qt Model/View,最终还是看的官方教程,现在将官方教程重新在梳理下。
用户5908113
2020/02/12
2.1K0
OpenGL的glPushMatrix()和glPopMatrix()矩阵栈顶操作函数详解「建议收藏」
OpenGL中图形绘制后,往往需要一系列的变换来达到用户的目的,而这种变换实现的原理是又通过矩阵进行操作的。opengl中的变换一般包括视图变换、模型变换、投影变换等,在每次变换后,opengl将会呈现一种新的状态(这也就是我们为什么会成其为状态机)。
全栈程序员站长
2022/07/23
1.5K0
OpenGL的glPushMatrix()和glPopMatrix()矩阵栈顶操作函数详解「建议收藏」
【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )
上一篇博客 【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 ) 简单介绍 OpenGL 中的一些理论概念 ; 本篇博客开始使用 OpenGL 绘制 点 ;
韩曙亮
2023/03/28
2.1K0
【OpenGL】十、OpenGL 绘制点  ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )
glPushMatrix和glPopMatrix的作用
终于明白为什么使用glPushMatrix()和glPopMatrix()的原因了。将本次需要执行的缩放、平移等操作放在glPushMatrix和glPopMatrix之间。glPushMatrix()和glPopMatrix()的配对使用可以消除上一次的变换对本次变换的影响。使本次变换是以世界坐标系的原点为参考点进行。下面对上述结论做进一步的解释:
全栈程序员站长
2022/07/22
5040
实验4 二维几何变换
根据示范代码1,使用OpenGL平移、旋转、缩放变换函数来改写代码实现所要求的功能。示范代码1的代码运行结果为图1。
步行者08
2019/02/25
1.1K0
【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )
上一篇博客 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★ 进行了 OpenGL 渲染环境初始化 ;
韩曙亮
2023/03/28
4.2K0
Android 代码混淆 混淆方案
本篇文章:自己在混淆的时候整理出比较全面的混淆方法,比较实用,自己走过的坑,淌出来的路。请大家不要再走回头路,可能只要我们代码加混淆,一点不对就会导致项目运行崩溃等后果,有许多人发现没有打包运行好好地,打包完成以后而又不不可以了,导致了许多困惑,本片文章来问大家解决困惑,希望对大家有帮助。
全栈程序员站长
2022/09/02
2.8K0
Qt ModelView教程(二)——应用举例(一)
因为是为一个Table设置Model,为了快速入门,我们选择继承QAbstractTableModel。继承后需要重写三个函数,分别是Model的行数和列数、以及每个Cell需要显示的内容。
用户5908113
2020/02/12
6940
js混淆与反混淆
由于设计原因,前端的js代码是可以在浏览器访问到的,那么因为需要让代码不被分析和复制从而导致更多安全问题,所以我们要对js代码进行混淆。
ek1ng
2023/03/08
11.9K0
js混淆与反混淆
实验5 OpenGL二维几何变换
(1)阅读实验原理,掌握OpenGL程序平移、旋转、缩放变换的方法。 (2)根据示范代码,完成实验作业。
步行者08
2020/10/27
2.5K2
实验5 OpenGL二维几何变换
001计算机图形学vs2015配置openGL及第一个opengl程序
OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库; gl是核心,glu是对gl的部分封装,glut是OpenGL的跨平台工具库,gl中包含了最基本的3D函数,而glu似乎对gl的辅助,如果算数好,不用glu的情况下,也是可以做出同样的效果。glut是基本的窗口界面,是独立于gl和glu的,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这就保证了我们编出的程序是跨平台的,如果用MFC或者Win32只能在windows操作系统上使用。选择OpenGL的一个很大原因就是因为它的跨平台性,所以我们可以尽量的使用glut库。
上善若水.夏
2018/09/28
1.4K0
Android开发笔记(一百五十四)OpenGL的画笔工具GL10
上一篇文章介绍了OpenGL绘制三维图形的流程,其实没有传说中的那么玄乎,只要放平常心把它当作一个普通控件就好了,接下来继续介绍OpenGL具体的绘图操作,这项工作得靠三维图形的画笔GL10来完成了。 GL10作为三维空间的画笔,它所描绘的三维物体却要显示在二维平面上,显而易见这不是一个简单的伙计。为了理顺物体从三维空间到二维平面的变换关系,有必要搞清楚OpenGL关于三维空间的几个基本概念。下面就概括介绍一下GL10编码的三类常见方法:
aqi00
2019/01/18
1.3K0
实验3 OpenGL几何变换
(1)阅读实验原理,运行示范实验代码,掌握OpenGL程序平移、旋转、缩放变换的方法;
步行者08
2018/10/09
1.3K0
Qt创建一个OpenGL窗口
点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多同志~
用户5908113
2019/12/19
2.4K0
实验5 OpenGL模型视图变换
2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它(物体运动,让人看它的不同部分)。(模型变换)
步行者08
2018/10/09
1.7K0
OpenGL透明与混色效果
一、理论讲解 在OpenGL中,物体透明技术通常被叫做混合(Blending)。 透明是物体(或物体的一部分)非纯色而是混合色,这种颜色来自于不同浓度的自身颜色和它后面的物体颜色。 一个有色玻璃窗就是一种透明物体,玻璃有自身的颜色,但是最终的颜色包含了所有玻璃后面的颜色。这也正是混合这名称的出处,因为我们将多种(来自于不同物体)颜色混合为一个颜色,透明使得我们可以看穿物体。 透明物体可以是完全透明(它使颜色完全穿透)或者半透明的(它使颜色穿透的同时也显示自身颜色)。一个物体的透明度,被定义为它的颜色的alp
Zoctopus
2018/06/04
1.8K0
【专业技术】Android平台下使用OpenGL
存在问题: 安卓平台下如何使用opengl? 解决方案: 1、GLSurfaceView GLSurfaceView是Android应用程序中实现OpenGl画图的重要组成部分。GLSurfaceView中封装了一个Surface。而android平台下关于图像的现实,差不多都是由Surface来实现的 2、Renderer 有了GLSurfaceView之后,就相当于我们有了画图的纸。现在我们所需要做的就是如何在这张纸上画图。所以我们需要一支笔。 Renderer是GLSurfaceView的内部静态接口
程序员互动联盟
2018/03/15
1.3K0
【专业技术】Android平台下使用OpenGL
Qt ModelView教程——设置表头与可编辑Table
点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~
用户5908113
2020/02/17
3.9K1
Qt ModelView教程——设置表头与可编辑Table
OpenGL ES 2.0 (iOS)[04]:坐标空间 与 OpenGL ES 2 3D空间
第一次变换 模型变换(Model Transforms):就是指从模型空间转换到世界空间的过程
半纸渊
2018/09/04
1.8K0
OpenGL ES 2.0 (iOS)[04]:坐标空间 与 OpenGL ES 2 3D空间

相似问题

openGL/glut & glm ModelView矩阵

11

OpenGL ModelView矩阵和投影矩阵

13

访问和移动modelview OpenGL 3.2

11

OpenGL -从ModelView矩阵获取平移参数

12

OpenGL/GLUT -项目ModelView坐标到纹理矩阵

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档