我正在尝试计算世界空间中3d点(称为p)的像素坐标。我知道我必须通过将p乘以“相机与世界”矩阵的逆来将p从世界空间转换为相机空间。然后使用透视投影在画布上找到该点的坐标,然后将其转换为像素坐标。我认为这是正确的吗?
我目前坚持寻找4x4矩阵,该矩阵可以让我将p从世界空间转换为相机空间。如果我有相机位置和方向的向量,如何计算此4x4矩阵?
vec3 cameraPos = vec3(0.f, 0.f, -5.f);
vec3 cameraDir = vec3(0.f, 0.f, 1.f);
我还需要一个相机向上矢量,这代表什么?
我正在使用glm。
我目前坚持寻找4x4矩阵,该矩阵可以让我将p从世界空间转换为相机空间。
该矩阵称为视图矩阵。视图矩阵是该矩阵的逆矩阵,它由摄像机的位置和方向(视点)定义。
位置是3D点(cameraPos
)。摄像机的方向由视线(cameraDir
)和向上矢量定义。您必须定义上矢量,例如(0,1,0)。
在OpenGL的数学(GLM)库提供了一个方便的功能(glm::lookAt
),由位置,目标和上矢量计算视图矩阵:
#include <glm/gtc/matrix_transform.hpp>
glm::vec3 cameraPos = glm::vec3(0.f, 0.f, -5.f);
glm::vec3 cameraDir = glm::vec3(0.f, 0.f, 1.f);
glm::vec3 cameraUp = glm::vec3(0.f, 1.f, 0.f);
glm::mat4 viewMatrix = glm::lookAt(cameraPos, cameraPos+cameraDir, cameraUp);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句