gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:56 26 4
gpt4 key购买 nike

我正在绘制一个矩形 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com