我试图使用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匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句