Opengl怪异旋转



我正在尝试旋转一个简单的三角形。问题是,当它正确旋转时,它会减小它的大小,直到它消失。

到目前为止我的一些代码:

// Vertices
GLfloat vertexArray[] = 
{
    1.0f, -1.0f, 0.0f,
    -1.0f, -1.0f, 0.0f,
    0.0f,  1.0f, 0.0f,
};
// Render funcion (called every frame)
void render()
{
    glClearColor(0.0f, 0.0f, 0.4f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObj);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexArray), vertexArray, GL_DYNAMIC_DRAW); 
    glUseProgram(programID); // simple vertex/frag shader
    glDrawArrays(GL_TRIANGLES, 0, 3);
    // Swap buffers
    glfwSwapBuffers();
}
// Update funcion (called every frame before render function)
void update(float elapsedTime)
{
    printf("elapsedTime: %f r", elapsedTime);
    float static theta = elapsedTime * 0.2f;
    for(int i = 0; i < 9; i+=3)
    {
        vertexArray[i] =   (vertexArray[i] * cosf(theta)) - (vertexArray[i+1] * sinf(theta));
        vertexArray[i+1] = (vertexArray[i] * sinf(theta)) + (vertexArray[i+1] * cosf(theta));
        vertexArray[i+2] = 0;
    }
}

如你所见,我用for循环旋转更新函数的每个顶点。也许最好的方法是使用着色器(如果我错了请纠正我),但我想在这里保持简单,只是为了说明问题。

我认为问题是,当你计算vertexArray[i+1] = (vertexArray[i] * sinf(theta)) + (vertexArray[i+1] * cosf(theta));时,你不是使用以前的迭代vertexArray[i]的值,而是在for循环的第一次赋值中计算的新的 vertexArray[i]

试试这个:

for(int i = 0; i < 9; i+=3)
{
    double tmp = vertexArray[i];
    vertexArray[i] = (tmp * cosf(theta)) - (vertexArray[i+1] * sinf(theta));
    vertexArray[i+1] = (tmp * sinf(theta)) + (vertexArray[i+1] * cosf(theta));
    vertexArray[i+2] = 0;
}

相关内容

  • 没有找到相关文章

最新更新