计算3D点的像素坐标

安迪

我正在尝试计算世界空间中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。

拉比德76

我目前坚持寻找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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章