c++ - 如何在应用 glRotate() 后获取矩形 block 的新顶点坐标

标签 c++ opengl

我正在绘制一个矩形 block :

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,
};

现在我在这个 block 的 x、y 和 z 轴上应用 glRotate()。现在我想用 glRotate 调用的应用程序产生的新坐标更改 cubeVertex 数组。这在 OpenGL 中可能吗?

最佳答案

一般来说,OpenGL 只会累积变换,并且只会在您渲染数据时才将它们实际应用到数据上。在普通的老式固定功能图形管道中,没有办法做到这一点。然而,随着每一代人的可编程性都在提高,现在可以通过 OpenGL 扩展支持这一点,前提是您使用的是足够新的显卡。您使用的是 nVidia 还是 ATI 卡也可能有所不同,因为它们并不总是支持相同的扩展。

我已经有一段时间没有做太多的 OpenGL 了,所以这会有点含糊,但总体思路是:

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

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

如果您想在 GPU 上进行更一般的数学运算,您应该查看 GPGPU技术,您可以做更多的事情,并且使用 CUDA/OpenCL/等。它也变得更容易编码。

关于c++ - 如何在应用 glRotate() 后获取矩形 block 的新顶点坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2347357/

相关文章:

c++ - 实现图形算法的正确*模式*?

c++ - 如何使用线程运行类构造函数

c++ - 如何在 C++ 中删除重整

c++ - 我如何找到具体的 dll::GLUT 依赖项

c++ - 移动设备上的 STL 和 TR1

c++ - 为什么编译器会提示我的 dynamic_cast?

c++ - 即使 QFilterKey 匹配,QRenderPassFilter 也会隐藏平面网格

c++ - Vbo - 使用 obj 文件绘制法线

c++ - 想要在从 blender 导入的实体 3d 对象上绘制线框网格

OpenGL实例化数组绘制