我正在尝试在OpenGL中绘制两个对象:
-
通常受相机移动影响的3D对象(比如说立方体)(带有透视投影)
-
具有字符串纹理的四边形对象,其必须遵循3D对象的位置,始终面向相机 .
这是我的初始观点:我可以在它的顶部绘制一个立方体和一个字符串实体 .
我现在想要显示始终面向相机的字符串 . 正如解释here,我从我的modelMatrix中删除了旋转,使文本面向我 .
文本确实面向我,但是当我移动相机时它不跟随立方体的位置...(注意:对于立方体的初始位置,文本的位置似乎没问题) .
我应该遗漏一些东西......
以下是我的代码的一些片段:
- 顶点着色器:
(在绘制文本时,统一的“isBillboarding”设置为1,绘制立方体时,统一的“isBillboarding”设置为0)
uniform mat4 transformationMatrix;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform float isBillboarding; // 0 for no, 1 for yes
[...]
attribute vec3 attribute_Position;
[...]
void main(void)
{
mat4 modelView = viewMatrix * transformationMatrix;
if (isBillboarding > 0.5)
{
modelView[0][0] = 1;
modelView[0][1] = 0;
modelView[0][2] = 0;
modelView[1][0] = 0;
modelView[1][1] = -1;
modelView[1][2] = 0;
}
gl_Position = projectionMatrix * modelView * vec4(attribute_Position,1.0);
[...]
}
1 回答
我解决了我的问题:
这个想法是计算模型 - 视图变换矩阵,它是视图矩阵和模型矩阵之间的组合,模型矩阵重置视图矩阵的旋转(考虑到平移) .
我为我的文本对象构建了一个专用着色器:
我将modelViewMatrix设置为:
这对我来说很有用