gpt4 book ai didi

opengl - 如何从模型 View 矩阵中消除旋转,使对象始终面对相机?

转载 作者:行者123 更新时间:2023-12-03 16:21:26 30 4
gpt4 key购买 nike

我试图使 Sprite 始终面对镜头,并且我了解可以从模型 View 矩阵中删除旋转,如下所示:

(https://stackoverflow.com/a/5487981/12817501)

原来的:

| xx xy xz xw |
| yx yy yz yw |
| zx zy zz zw |
| wx wy wz ww |

旋转已删除:
| 1  0  0  xw |
| 0 1 0 yw |
| 0 0 1 zw |
| wx wy wz ww |

我的顶点着色器:
#version 450 core

layout (location = 0) in vec3 mesh;
layout (location = 1) in vec2 texCoord;
layout (location = 2) in vec3 worldPos;
layout (location = 3) in mat4 model;

uniform mat4 proj, view;

out Data
{
vec2 texCoord;
} outData;

void main()
{
outData.texCoord = texCoord;

// Remove rotation so that it always faces the camera

mat4 mv = view * model;

mv[0][0] = 1;
mv[0][1] = 0;
mv[0][2] = 0;
mv[1][0] = 0;
mv[1][1] = 1;
mv[1][2] = 0;
mv[2][0] = 0;
mv[2][1] = 0;
mv[2][2] = 1;

gl_Position = proj * mv * vec4(mesh + worldPos, 1);
}

实际上,旋转确实已被删除,但是所有子画面仍然不受相机方向的不准确影响。如果我不移动相机,则 Sprite 将位于正确的位置,但是如果我移动它,它们将“飞走”。

我在做什么错?

编辑:如果我将相机向左旋转90度,则它们处于正确的位置。

最佳答案

您的建议不正确。 View 矩阵定义了场景的外观。如果取消 View 矩阵的旋转分量,则会更改视线。
您必须沿与 View 相反的方向旋转模型,以使其保持面向 View 空间的xy平面。
可以通过计算 View 矩阵的 inverse 矩阵并使平移分量无效来获得相反的旋转。这意味着您必须计算 View 矩阵左上3x3的逆矩阵:

mat3 invViewRot = inverse(mat3(view));
vec3 pos = worldPos + invViewRot * mesh;

gl_Position = proj * view * model * vec4(pos, 1.0);

关于opengl - 如何从模型 View 矩阵中消除旋转,使对象始终面对相机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61559585/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com