我需要独立地在OpenGL中移动两个对象。
const float vertexPositions[] = {
0.25f, 0.25f, 0.0f, 1.0f,
0.25f, -0.25f, 0.0f, 1.0f,
-0.25f, -0.25f, 0.0f, 1.0f,
0.75f, 0.45f, 0.0f, 1.0f,
0.45f, -0.45f, 0.0f, 1.0f,
-0.65f, -0.95f, 0.0f, 1.0f,
};
glDrawArrays(GL_TRIANGLES, 0, 3*2);
#version 330
layout(location = 0) in vec4 position;
uniform float loopDuration;
uniform float time;
void main()
{
float timeScale = 3.14159f * 2.0f / loopDuration;
float currTime = mod(time, loopDuration);
vec4 totalOffset = vec4(
cos(currTime * timeScale) * 0.5f,
sin(currTime * timeScale) * 0.5f,
0.0f,
0.0f);
gl_Position = position + totalOffset;
}
不幸的是它没有按照我的预期工作 - 而不是独立移动,这些三角形似乎像一块玻璃板一样连在一起。我可以做些什么来独立翻译和旋转它们?我怎么能用GPU而不是CPU来做呢?
答案 0 :(得分:0)
我认为你正在做this tutorial.在这种情况下,我建议你从vertexPositions
删除最后12个花车,所以你得到以下内容:
const float vertexPositions[] = {
0.25f, 0.25f, 0.0f, 1.0f,
0.25f, -0.25f, 0.0f, 1.0f,
-0.25f, -0.25f, 0.0f, 1.0f,
};
并将glDrawArrays(GL_TRIANGLES, 0, 3*2);
更改为glDrawArrays(GL_TRIANGLES, 0, 3);
。在display()
函数中,在第一次调用glDrawArrays()
之后粘贴以下内容:
glUniform1f(loopDurationUnf, 2.5f);
glDrawArrays(GL_TRIANGLES, 0, 3);
这应该以两倍的速度绘制相同的三角形。