在opengl中旋转对象而不再绘制对象

时间:2012-07-21 21:18:26

标签: opengl

我想在OpenGL中旋转对象而不再绘制,以节省时间。 在init方法中,我想绘制图片,然后只根据鼠标事件旋转它。

以下是完整的方法:

 gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
 gl.LoadIdentity();     
 gl.Rotate(camera_angle_v, 1.0f, 0.0, 0.0);
 gl.Begin(OpenGL.GL_POINTS);

 //Draw

 gl.End();

3 个答案:

答案 0 :(得分:3)

OpenGL从根本上不起作用。您渲染的帧基本上是2D像素阵列。绘制图像时,它会更改某些像素的值以为您创建图像。一旦绘制了某些东西,它就会一直存在,直到你清除它为止。 OpenGL不会跟踪你过去渲染的内容(它填充在框架中的像素除外),因此除了当前渲染的三角形/直线外,它不能进行任何变换。

在绘制方法开始时,清除框架(将所有像素重置为清晰颜色)。之后你必须重绘对象。这就是OpenGL的工作方式,它的速度非常快。在现代GPU上,您可以每帧绘制数百万个三角形,并仍然保持60fps。如果你没有在开始时清除框架,图像将被绘制在旧框架的顶部,你将获得一个镜子的效果。

如果性能问题,请考虑学习更现代的OpenGL。你现在使用的是立即模式OpenGL,它是1992年OpenGL 1.0规范的一部分。1997年,OpenGL 1.1引入了顶点数组,它为大量顶点提供了显着的速度提升,因为只有一个方法调用对于所有顶点而不是每个顶点一个方法调用。每个新版本的OpenGL都有更优化的绘图方式。

答案 1 :(得分:1)

你必须再次绘制对象 - 这就是OpenGL的工作原理。

每个帧都会根据当前场景几何图形从头开始渲染。

答案 2 :(得分:0)

嗯......如果你正在使用立即模式,我想你可以使用显示列表并相应地调用glRotate。虽然正如Robert Rouhani所说,你所使用的技术是古老的(99%的在线教程教你)。使用VAO(甚至更好的VBO)绘制对象。