mat4 项目/反向项目无法正常工作。

我正在尝试在Lua中实现GLM的项目和取消项目功能,但结果令人质疑。据我所知,我的代码(如下所示)几乎与GLM相同,但如下面的视频所示,文本未按预期显示。当我将相机带到0,0,0时,文本形成了一种菱形模式,这很有趣。

这里应该显示的是词立方体。 001通过立方体。 009应在其各自的立方体上绘制,无论相机移动到哪里。 立方体。 001是TL,立方体。 009是BR。

要了解我们的mat4库(以及其他垃圾)的全部内容,请访问[这里](https://github.com/shakesoda/cpml)。

`` `

    position [1] = position [1] / position [4] * 0.5 + 0.5     position [2] = position [2] / position [4] * 0.5 + 0.5     position [3] = position [3] / position [4] * 0.5 + 0.5     position [4] = position [4] / position [4] * 0.5 + 0.5

    位置[1] =位置[1] * viewport [3] + viewport [1]     位置[2] =位置[2] * viewport [4] + viewport [2]

    返回vec3(位置[1],位置[2],位置[3]) 结束

  • https://github.com/g-truc/glm/blob/master/glm/gtc/matrix_transform.inl#L338 函数mat4.unproject(win,view,projection,viewport)     local inverse =(投影*视图):inverse()     local position = {win.x,win.y,win.z,1}     position.x =(position.x-viewport [1])/ viewport [3]     position.y =(position.y-viewport [2])/ viewport [4]

    position [1] = position [1] * 2 - 1     position [2] = position [2] * 2 - 1     position [3] = position [3] * 2 - 1     position [4] = position [4] * 2 - 1

    位置=反向*位置

    position [1] = position [1] / position [4]     position [2] = position [2] / position [4]     position [3] = position [3] / position [4]     position [4] = position [4] / position [4]

    返回vec3(位置[1],位置[2],位置[3]) 结束

-从立方体中获取投影 local viewport = {0,0,1280,720} 对于self.cubes中的每个立方体,都有:      local model = cpml.mat4()                :translate(cube.position)                :rotate(cube.orientation.x,{1,0,0})                :rotate(cube.orientation.y,{0,1,0})                :rotate(cube.orientation.z,{0,0,1})                :scale(cube.scale)

     local projection = cpml.mat4.project(                 dice.position,                 self.camera.view:transpose(), self.camera.projection:transpose(),                 viewport      ) 结束 `` `

点赞
用户1190664
用户1190664

事实证明有两个问题:

1)由于在我的代码中存在错误,矩阵需要进行转置。

2)GLM在涉及相机视图时使用“model”一词,因此我一直在使用错误的矩阵。

我已更新代码以反映这些更正。

2014-10-30 20:02:09