首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在模型/视图/世界空间中定位对象?

如何在模型/视图/世界空间中定位对象?
EN

Stack Overflow用户
提问于 2013-09-24 19:11:27
回答 1查看 567关注 0票数 0

我有一个立方体,中心在0,0,0,边达到-1/+1 (即立方体的宽度,高度,深度为2)。

然后,我设置了以下矩阵:

代码语言:javascript
复制
glm::mat4 modelMat4;
modelMat4 = glm::translate(modelMat4, 0.0f, 0.0f, 200.f);
modelMat4 = glm::scale(modelMat4, 200.0f, 200.0f, 200.0f);

glm::mat4 viewMat4;
viewMat4 = glm::lookAt(glm::vec3(0.0f, 0.0f, zNear),
            glm::vec3(0.0f, 0.0f, zFar),
            glm::vec3(0.0f, 1.0f, 0.0f));

// initialWidth = window width
// initialHeight = window height
// zNear = 1.0f
// zFar = 1000.0f
glm::mat4 projectionMat4;
projectionMat4 = glm::frustum(-initialWidth / 2.0f, initialWidth / 2.0f, -initialHeight / 2.0f, initialHeight / 2.0f, zNear, zFar);

但我的物体中部出现在近z平面上(也就是说,我只能从里面看到立方体的后半部)。

如果我将模型转换调整为:

代码语言:javascript
复制
glm::translate(modelMat4, 0.0f, 0.0f, 204.f);

然后我也可以看到我的立方体的正面。

如果我将模型转换更改为:

代码语言:javascript
复制
glm::translate(modelMat4, 0.0f, 0.0f, 250.f);

然后,立方体仅在大约2x2x2像素处进行栅格化。

我对模型、视图投影矩阵有什么误解?我原以为变换是线性的,但z平面在200到250之间消失了.即使平面被定义在1.0f到1000.0f之间。

编辑:我的着色代码如下:

代码语言:javascript
复制
#version 100

layout(location = 0) in vec3 v_Position;
layout(location = 1) in vec4 v_Colour;

layout(location = 2) uniform mat4 v_ModelMatrix;
layout(location = 3) uniform mat4 v_ViewMatrix;
layout(location = 4) uniform mat4 v_ProjectionMatrix;

out vec4 f_inColour;

void main()
{
    gl_Position = v_ProjectionMatrix * v_ViewMatrix * v_ModelMatrix * vec4(v_Position, 1.0);
    f_inColour = v_Colour;
}
EN

回答 1

Stack Overflow用户

发布于 2013-09-24 20:49:48

你没有展示你是如何将矩阵相乘的,但就你所描述的而言,它似乎是在做错事。一定要按照这个顺序来做:

代码语言:javascript
复制
MVP = projectionMat4 * viewMat4 * modelMat4;

更新

更仔细地查看您的代码,您似乎缺少一个乘法来迷惑您的转换:

代码语言:javascript
复制
modelMat4 = glm::translate(modelMat4, 0.0f, 0.0f, 200.f);
modelMat4 *= glm::scale(modelMat4, 200.0f, 200.0f, 200.0f); // <-- here

因此,modelMat4将是一个标度的结果,然后是一个转换

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

https://stackoverflow.com/questions/18990037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档