OpenGL,两个对象独立移动

时间:2014-05-04 02:45:02

标签: opengl graphics

我需要独立地在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来做呢?

1 个答案:

答案 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);

这应该以两倍的速度绘制相同的三角形。