Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在应用glRotate()后获取矩形块的新顶点坐标_C++_Opengl - Fatal编程技术网

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

C++ 如何在应用glRotate()后获取矩形块的新顶点坐标,c++,opengl,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,

我正在画一个矩形块:

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()
。现在我想用应用
glRotate
调用产生的新坐标更改
cubeVertex
数组。这在OpenGL中是否可行?

您可以将
glGet
GL\u MODELVIEW\u MATRIX
一起使用,以获取当前MODELVIEW矩阵(假设您对其应用了
glRotate
调用)。然后,通过矩阵手动变换顶点。

一般来说,OpenGL只会累积变换,并且仅在渲染数据时将其实际应用于数据。在普通的老式固定函数图形管道中,没有办法做到这一点。然而,随着可编程性在每一代人中不断增加,只要您使用的是最新的图形卡,现在就可以通过OpenGL扩展来支持这一点。无论您使用的是nVidia还是ATI卡也可能会有所不同,因为它们并不总是支持相同的扩展

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

  • 绑定一对顶点缓冲区对象
  • 把你的数据放在第一个
  • 使用变换反馈将变换的顶点渲染到第二个顶点
  • 然后,您可以将数据从第二个VBO读回内存
他们页面上的nVidia Transform Feedback Fractal演示应该可以帮助您了解这方面的实际代码


如果你想在你的GPU上做更多的普通数学,你应该研究技术,你可以做更多的事情,还有CUDA/OpenCL/等等。编码也变得容易多了

这不是小事,而是查找
glRenderMode(GL\u反馈)以开始。这将不仅为您提供坐标,而且(例如)在应用照明后提供颜色