c++ - 计算3D点的像素坐标

标签 c++ opengl graphics glm-math

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

相关文章:

c++ - 如何在 C 库的实现文件中使用 C++ STL 容器?

c++ - QtOpenGL 加载带有QImage纹理的obj格式

opengl - 0(3) : error C1013: function "main" is already defined at 0(4)

r - 通过嵌套函数传递同名参数

java - 将 AWT 图形代码移植到 Android

java - 用swing绘制图形的好方法是什么?

c++ - 使用 qDebug 收集用户输入

c++ - 如何在 Visual Studio 2012 中包含库?

c++ - auto 是基于 for 循环的范围内的可选关键字吗?

c++ - 避免每帧重新渲染 HUD/GUI 元素