应用glRotate()后如何获取矩形块的新顶点坐标

时间:2010-02-27 12:51:15

标签: c++ opengl

我正在绘制一个矩形块:

GLfloat cubeVertexV[] = {
    // FRONT
    -0.5f, -1.0f,  0.5f,
     0.5f, -1.0f,  0.5f,
    -0.5f,  1.0f,  0.5f,
     0.5f,  1.0f,  0.5f,
    // BACK
    -0.5f, -1.0f,  -0.5f,
     0.5f, -1.0f,  -0.5f,
    -0.5f,  1.0f,  -0.5f,
     0.5f,  1.0f,  -0.5f,
    // LEFT
    -0.5f, -1.0f,  0.5f,
    -0.5f,  1.0f,  0.5f,
    -0.5f, -1.0f, -0.5f,
    -0.5f,  1.0f, -0.5f,
    // RIGHT
     0.5f, -1.0f, -0.5f,
     0.5f,  1.0f, -0.5f,
     0.5f, -1.0f,  0.5f,
     0.5f,  1.0f,  0.5f,
    // TOP
    -0.5f,  1.0f,  0.5f,
     0.5f,  1.0f,  0.5f,
     -0.5f,  1.0f, -0.5f,
     0.5f,  1.0f, -0.5f,
    // BOTTOM
    -0.5f, -1.0f,  0.5f,
    -0.5f, -1.0f, -0.5f,
     0.5f, -1.0f,  0.5f,
     0.5f, -1.0f, -0.5f,
};

现在我在此块上的x,y和z轴上应用glRotate()。现在,我想使用cubeVertex调用应用程序产生的新坐标更改glRotate数组。这在OpenGL中是否可行?

3 个答案:

答案 0 :(得分:1)

您可以将glGetGL_MODELVIEW_MATRIX一起使用以获取当前的模型视图矩阵(假设您对其应用了glRotate调用)。然后,通过矩阵手动变换顶点。

答案 1 :(得分:1)

一般来说,OpenGL只会累积变换,只有在渲染时才会将它们实际应用于数据。在普通的旧固定功能图形管道中,没有办法做到这一点。但是,由于可编程性在每一代都在增加,现在通过OpenGL扩展可以支持这一点,前提是您使用的是最新的显卡。您是否拥有nVidia或ATI卡也可能会有所不同,因为它们并不总是支持相同的扩展。

我做了很多OpenGL已经有一段时间了,所以这有点模糊,但总体思路是:

  • 绑定一对顶点缓冲区对象
  • 将您的数据放在第一个
  • 使用“变换反馈”将变换后的顶点渲染到第二个
  • 然后您可以将第二个VBO中的数据读回内存。

他们OpenGL Code Samples页面上的nVidia变换反馈分形演示应该可以帮助您获得实际的代码。

如果你想在你的GPU上做更多的一般数学运算,你应该研究GPGPU技术,你可以做更多的东西,使用CUDA / OpenCL /等等。它可以更容易编码也是。

答案 2 :(得分:0)

这不是一件容易的事,但要查看glRenderMode(GL_FEEDBACK);才能开始。这不仅可以为您提供坐标,还可以(例如)在应用光照后的颜色。