我正在尝试计算世界空间中3d点(称为p)的像素坐标。我知道我必须通过将p乘以“相机与世界”矩阵的逆来将p从世界空间转换为相机空间。然后使用透视投影在 Canvas 上找到该点的坐标,然后将其转换为像素坐标。我认为这是正确的吗?
我目前坚持寻找4x4矩阵,该矩阵可以让我将p从世界空间转换为相机空间。如果我有相机位置和方向的 vector ,如何计算此4x4矩阵?
vec3 cameraPos = vec3(0.f, 0.f, -5.f);
vec3 cameraDir = vec3(0.f, 0.f, 1.f);
我还需要一个相机向上 vector ,这代表什么?
我正在使用glm。
最佳答案
I am currently stuck on finding the 4x4 matrix that would allow me to convert p from world space to camera space.
该矩阵称为 View 矩阵。 View 矩阵是该矩阵的Inverse matrix,由相机位置和方向(视点)定义。
位置是3D点(
cameraPos
)。摄像机的方向由视线(cameraDir
)和上 vector 定义。您必须定义上 vector ,例如(0,1,0)。OpenGL Mathematics (GLM)库提供了一个方便的函数(
glm::lookAt
),用于通过位置,目标和上 vector 来计算 View 矩阵:#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);
关于c++ - 计算3D点的像素坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61121422/