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

JojololomenPL

我试图使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

使用矩阵在3D空间中定位对象

来自分类Dev

在3D空间中显示OpenGL图像

来自分类Dev

计算 3D 空间中 4 个点之间的变换矩阵

来自分类Dev

使用2D向量的矩阵乘法

来自分类Dev

Numpy 3D矩阵乘法

来自分类Dev

3D矩阵,最后尺寸的乘法

来自分类Dev

numpy中的3d矩阵乘法

来自分类Dev

OpenGL矩阵乘法C ++

来自分类Dev

3D空间中的JavaFX 2D形状

来自分类Dev

3D空间中的JavaFX 2D形状

来自分类Dev

3D矩阵元素与2D矩阵副本的高效逐元素乘法?

来自分类Dev

opengl中3d空间中的平面上的过程网格

来自分类Dev

OpenGL:在 3D 空间中的平面区域内继续绘图

来自分类Dev

在不使用网格和冲浪型图的情况下在MATLAB 3D空间中绘制矩阵

来自分类Dev

Matlab-仅在三维空间中转置3D矩阵

来自分类Dev

在OpenGL中用鼠标拾取在3D空间中拖动3D点的最佳方法?

来自分类Dev

从两个2d矩阵中获得许多3d矩阵(逐列乘法)

来自分类Dev

在3D空间中对百万点进行空间排序

来自分类Dev

OpenCV简单2D矩阵乘法失败

来自分类Dev

4D矩阵乘法

来自分类Dev

CUDA中的3D元素矩阵乘法?

来自分类Dev

优化现有的3D Numpy矩阵乘法

来自分类Dev

3D空间中3点之间的角度

来自分类Dev

在3D空间中使用GLSL绘制2D网格

来自分类Dev

Boost :: Geometry-在3D空间中查找2D多边形的区域?

来自分类Dev

在3D空间中具有2D对象的Unity IDropHandler

来自分类Dev

数学 - 在 3D 空间中的旋转 2D 盘中生成点

来自分类Dev

在 3D 空间中绘制 (x,y,z) 点的 2D 数组 (Matplotlib)