交互式计算机图形学中的 glu 函数和 mat.h 函数有啥区别?

Posted

技术标签:

【中文标题】交互式计算机图形学中的 glu 函数和 mat.h 函数有啥区别?【英文标题】:What is the difference between glu functions and mat.h functions from Interactive Computer Graphics?交互式计算机图形学中的 glu 函数和 mat.h 函数有什么区别? 【发布时间】:2017-04-29 09:46:41 【问题描述】:

我是使用着色器的新手,并尝试为顶点制作 ModelViewProjection 矩阵。但是当我使用内置函数和使用交互式计算机图形第 6 版中的 mat.h 提供的函数时,我有不同的场景。 所以这里的代码:

//In main.cpp
gluLookAt(0.0 , 0.0 , 5.0, 
              0.0 , 0.0 , -1.0,
              0.0f , 1.0f , 0.0f);
 gluPerspective(45,ratio,1,1000);

 //In Vertex Shader
 gl_Position =    gl_ModelViewProjectionMatrix * gl_Vertex;

结果:

。 但是当我写这个时:

//In main.cpp
projectionMatrix = Perspective( 45.0  , ratio, 1, 1000);
modelMatrix = mat4(1.0);
vec4 eye = vec4(0.0, 0.0, 5.0, 1.0);
vec4 at = vec4(0.0, 0.0, -1.0, 1.0);
vec4 up = vec4(0.0, 1.0, 0.0, 1.0);
viewMatrix = LookAt(eye, at, up);
// In vertex Shader
 gl_Position =   ProjectionMatrix * ViewMatrix  * ModelMatrix * gl_Vertex;

我知道了:

有谁知道哪里出了问题? 附:我也尝试将度数转换为弧度,但它变得更糟,我不认为 mat.h 使用弧度。

【问题讨论】:

请在问题本身中包含您的结果,而不是在第 3 方链接中。 @AlgirdasPreidžius:您指的是哪些第三方链接?如果您正在拍摄这些图像,那么它们位于i.stack.imgur.com。该代表级别的用户不能自己包含图像。 【参考方案1】:

首先,这取决于您的向量需要在哪一侧相乘。如果您想将向量视为列向量,那么从左侧乘以它就可以了。(第一个示例)但是如果您将向量视为行向量,则需要转置矩阵并将向量从右侧,以相反的顺序。

在你的着色器中试试这个: gl_Position = gl_Vertex * ModelMatrix * ViewMatrix * ProjectionMatrix;

回答你的问题:为什么它会给你不同的结果?因为也许这本书将向量视为行向量。

【讨论】:

谢谢。我尝试过这个。它没有解决问题。它只显示粉红色的窗口。据我了解,mat.h 的功能与 glm 的功能相同,但我不确定。

以上是关于交互式计算机图形学中的 glu 函数和 mat.h 函数有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

如何用OpenGL实现计算机图形学中的平移动画

计算机图形学中的经常使用模型

计算机图形学-图形学中的基本变换(缩放平移旋转剪切镜像)

固定计算机图形学中的旋转

计算机图形学中的种子填充算法c++程序实现

计算机图形学中的边标志算法c++程序实现2