[英]OpenGL 2D Text in 3D Space [C++/GLM] Matrix Multiplication
我试图使用3D坐标显示2D文本。 我正在关注本教程 (解决方案1:2D方法)。 我做了本教程中显示的所有操作,但可能出了一些问题。 这是代码:
void Update()
{
glm::mat4 projectionMatrix = glm::perspective(45.0,640.0/480.0,0.01,500.0);
glm::mat4 viewMatrix = glm::lookAt(glm::vec3(0.0,0.0,0.0),glm::vec3(0.0,0.0,-5.0),glm::vec3(0.0,1.0,0.0));
glm::vec4 worldSpace(0.f,1.0,-5.f,1.0);
glm::vec4 screenSpace = projectionMatrix * viewMatrix * worldSpace;
screenSpace /= screenSpace.w;
ovlay.setPosition(screenSpace.x,screenSpace.y);
}
projectionMatrix
是我正在使用的透视图。
viewMatrix
是我的相机位置和方向。
worldSpace
是我要用于计算2D坐标的3D位置。
screenSpace
应该给我2D空间中的位置,但是我得到了一些奇怪的结果:
x = 0, y = 0.358518
我认为应该是x = 320, y = 100
。
如果有人知道我做错了,我将很感激。
好的,此代码计算的是worldSpace
点的标准化设备坐标 。 沿该空间中所有轴的观看体积为[-1,1]
,因此x=0
恰好位于中心,而y = 0.358518位于中心上方。
如果需要窗口空间位置,则需要考虑视口 。 假设您的视口填满了大小为w
* h
像素的整个窗口,则可以将窗口位置设为:
wx = (x + 1.0f) * 0.5f * w;
wy = (y + 1.0f) * 0.5f * h;
假设投影矩阵建议的分辨率为640x480,则结果为(320,326)。 我不知道为什么你所期望Ÿ为100注GL使用左下角为原点。 在典型的窗口系统中,原点位于顶部,因此GL中的y = 326将与其他约定中的y'= 153匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.