交互式计算机图形学中的 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 函数有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章