簡體   English   中英

計算 3d 點的像素坐標

[英]Computing pixel coordinate of a 3d point

我正在嘗試計算世界空間中 3d 點(稱為 p)的像素坐標。 我知道我必須將 p 從世界空間轉換到相機空間,方法是將它乘以相機到世界矩陣的倒數。 然后使用透視投影找到 canvas 上點的坐標,然后將其轉換為像素坐標。 我認為這是正確的?

我目前一直在尋找 4x4 矩陣,該矩陣允許我將 p 從世界空間轉換為相機空間。 如果我有我的相機 position 的矢量和方向,我該如何計算這個 4x4 矩陣?

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

我是否還需要一個相機向上矢量,這代表什么?

我正在使用glm。

我目前一直在尋找 4x4 矩陣,該矩陣允許我將 p 從世界空間轉換為相機空間。

該矩陣稱為視圖矩陣。 視圖矩陣是該矩陣的逆矩陣,由相機 position 和方向(視點)定義。
position 是 3D 點 ( cameraPos )。 相機的方向由視線 ( cameraDir ) 和向上矢量定義。 您必須定義向上向量,例如 (0, 1, 0)。

OpenGL 數學 (GLM)庫提供了一個方便的 function ( glm::lookAt ),通過 position、目標和上向量計算視圖矩陣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM