VBO和glTranslatef在GLSL着色器中的gl_vertex需要乘以一些东西
VBO and glTranslatef does gl_vertex in GLSL shader need to be multiplied with something?
我有VBO来划分我的世界,有点像《暗黑破坏神》游戏中的VBO。我曾经将顶点数据本身设置为世界中的确切位置,但随着位置的增长,浮点数学错误也随之增加。
我现在已经更改了它,使顶点数据相对于0,0,0,并且我使用glTranslatef将每个VBO设置到播放器周围的正确位置。
glPushMatrix();
glTranslatef(m_X, m_Y, m_Z);
draw VBO
glPopMatrix();
这使得玩家的X和Z位置始终在0-512(1 VBO的物理大小)的范围内,当他们离开时,世界会发生相反的变化。这工作得很好,并修复了浮点错误,但它引入了一个新的错误。
在我的着色器中,我通过将顶点的X和Z位置的cos/sin乘以时间变量来创建类似水波的效果,并用它们修改Y位置。
uniform float timeVar;
...
vec4 v = vec4(gl_Vertex);
v.y += (sin(v.x+timeVar*2)+cos(v.z+timeVar))*2-5;
...
gl_Position = gl_ModelViewProjectionMatrix * v;
当顶点位置精确时,这是有效的,但现在我怀疑它们在0-512的范围内,因为在我将它们glTranslate到实际位置之前,它们都是这样设置的。这使得波浪仍然出现,但现在在VBO的边缘,由于cos(0)!=cos(512)。
我需要在着色器中做些什么来获得顶点在世界中的实际位置吗?
以制服的身份在世界排名中通过。
相关文章:
- Visual Studio 19-17 库兼容性根据 GL 标志
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- 提升图库示例 凯文培根的六度:示例中的 Vertex() 是什么
- 将"Compass"与相机旋转隔离开GL
- 是否有一个版本的glCopyImageSubData在Openg GL中使用混合?
- 图形"Vertex cover"暴力算法
- 计算着色器Open GL ES的多个输入
- Open GL ES 3.1 的计算着色器的最小工作示例
- 致命错误 C1083:无法打开包含文件:"GL/glew.h":没有此类文件或目录
- OpenGL,Cubemap,Vertex和FragmentShader
- C++ 致命错误:glad/gl.h:没有这样的文件或目录
- 打开 gl 精灵类不起作用
- Qt 找不到 GL 库
- GCC 相当于 MSVC 中的 /GS、/GL、/Gy、/Oi、/MD
- 失败的 glewInit:缺少 GL 版本
- 何时在OS X上使用OpenGL vs GL
- 识别安卓中意外的 GL 上下文丢失
- Android Native:CMake 链接错误:未定义对 GL 函数的引用 - 即使包含并链接了 EGL 和 GLESv3
- 为什么 VERTEX 着色器中的矩阵乘法无法正常工作
- Glew - 与 GLFW 配对时 gl- 函数符号上出现链接错误