我正在绘制一个矩形块:
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中是否可行?
答案 0 :(得分:1)
您可以将glGet
与GL_MODELVIEW_MATRIX
一起使用以获取当前的模型视图矩阵(假设您对其应用了glRotate
调用)。然后,通过矩阵手动变换顶点。
答案 1 :(得分:1)
一般来说,OpenGL只会累积变换,只有在渲染时才会将它们实际应用于数据。在普通的旧固定功能图形管道中,没有办法做到这一点。但是,由于可编程性在每一代都在增加,现在通过OpenGL扩展可以支持这一点,前提是您使用的是最新的显卡。您是否拥有nVidia或ATI卡也可能会有所不同,因为它们并不总是支持相同的扩展。
我做了很多OpenGL已经有一段时间了,所以这有点模糊,但总体思路是:
他们OpenGL Code Samples页面上的nVidia变换反馈分形演示应该可以帮助您获得实际的代码。
如果你想在你的GPU上做更多的一般数学运算,你应该研究GPGPU技术,你可以做更多的东西,使用CUDA / OpenCL /等等。它可以更容易编码也是。
答案 2 :(得分:0)
这不是一件容易的事,但要查看glRenderMode(GL_FEEDBACK);
才能开始。这不仅可以为您提供坐标,还可以(例如)在应用光照后的颜色。