繁体   English   中英

3D空间中的OpenGL 2D文本[C ++ / GLM]矩阵乘法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM