计算 3d 点的像素坐标

Computing pixel coordinate of a 3d point

我正在尝试计算世界 space 中 3d 点(称为 p)的像素坐标。我知道我必须通过将 p 从世界 space 乘以相机到世界矩阵的逆矩阵来将其转换为相机 space 。然后使用透视投影找到 canvas 上的点的坐标,然后将其转换为像素坐标。我认为这是正确的?

我目前一直在寻找 4x4 矩阵,该矩阵允许我将 p 从世界 space 转换为相机 space。如果我有相机位置和方向的向量,我该如何计算这个 4x4 矩阵?

vec3 cameraPos = vec3(0.f, 0.f, -5.f);
vec3 cameraDir = vec3(0.f, 0.f, 1.f);

我还需要相机向上矢量吗?这代表什么?

我正在使用 glm。

I am currently stuck on finding the 4x4 matrix that would allow me to convert p from world space to camera space.

那个矩阵叫做视图矩阵。视图矩阵是该矩阵的Inverse matrix,由相机位置和方向(视角)定义。
该位置是 3D 点 (cameraPos)。相机的方向由视线 (cameraDir) 和向上矢量定义。您必须定义向上矢量,例如(0, 1, 0).

OpenGL Mathematics (GLM) library provides a handy function (glm::lookAt), 通过position, target 和up-vector计算view matrix:

#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);