OpenGL 3D点精灵相机矩阵

Posted

技术标签:

【中文标题】OpenGL 3D点精灵相机矩阵【英文标题】:OpenGL 3D point sprites camera matrix 【发布时间】:2018-08-02 03:15:25 【问题描述】:

由于我使用的矩阵,我无法在 3D 空间中放置点精灵。问题出在我的顶点着色器中(我省略了不必要的部分):

#version 330

in vec3 position; // 3d position of the particle
uniform mat4 vp_matrix; // the projection and view matrices from the camera

void main()

    gl_Position = vp_matrix * vec4(position, 1);

目前我正在将视图和投影矩阵上传到这个矩阵制服。但这会导致粒子在相机移动时以意想不到的方式旋转和移动(即与我场景中的其他对象不同)。

将投影矩阵应用于点精灵是否有意义?还是我应该只应用视图矩阵?我应该应用整个视图矩阵,还是只应用平移和/或旋转?

【问题讨论】:

“将投影矩阵应用于点精灵有意义吗?” 是的,为什么不呢?一个点的 3D 顶点坐标与任何其他几何体的坐标没有什么不同。投影矩阵描述了从场景的 3D 点到视口的 2D 点的映射。您也必须将投影矩阵应用于点精灵。 【参考方案1】:

我很抱歉,事实证明这个“奇怪”的运动是因为我写了 3 个浮点值而不是 2 个的偏移量错误。

但如果有人想知道将什么矩阵应用于点精灵,@Rabbid76 是正确的,您必须对其应用投影矩阵,还必须应用视图矩阵。这意味着您确实应用了来自相机的视图和投影矩阵;这是因为相机的旋转和平移确实需要影响点。

【讨论】:

以上是关于OpenGL 3D点精灵相机矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何在opengl中计算给定3D点及其2D屏幕位置的投影/模型视图矩阵

在 OpenGL ES 2 中实现 VBO 以渲染精灵

如何使用 OpenGL 正确投影和扭曲 3d 点

[OpenGL](翻译+补充)投影矩阵的推导

[OpenGL](翻译+补充)投影矩阵的推导

如何让相机跟随opengl中的3d对象?