2012-09-20 42 views
3

由于最新OpenGL中的旋转已被弃用,我该如何旋转三角形?折旧前:在最新OpenGL中旋转

gl.glRotated(i, 0, 0, 1); 

    gl.glBegin(GL2.GL_TRIANGLES);  
    gl.glVertex3f(0.0f, 1.0f, 0.0f); 
    gl.glVertex3f(-1.0f, -1.0f, 0.0f); 
    gl.glVertex3f(1.0f, -1.0f, 0.0f); 
    gl.glEnd(); 

我试着这样做,它只是一个翻译,但:

double rotCos = Math.cos(i); 
    double rotSine = Math.sin(i); 


    gl.glBegin(GL2.GL_TRIANGLES);  
    gl.glVertex3d(0.0f + rotSine, 1.0f + rotCos, 0.0f);  
    gl.glVertex3d(-1.0f + rotSine, -1.0f + rotCos, 0.0f); 
    gl.glVertex3d(1.0f + rotSine, -1.0f + rotCos, 0.0f); 
    gl.glEnd(); 

如何实现落后glRotated数学?

+0

我已经走出了OpenGL循环一段时间,但我认为这是你应该使用矩阵变换的地方:http://www.songho.ca/opengl/gl_transform.html – Matthew

回答

4

你所做的并不是这些功能被弃用的想法是什么;这弃用包括功能在glBeginglVertexglEnd也一样,所以如果你使用这些,你错过了点

你应该是要实现一个顶点着色器,在其中执行顶点变换的通常步骤,即先将顶点与模型视图相乘,然后再乘以投影矩阵;您还可以将模型视图和投影合同在一个矩阵中,但这会使照明有点棘手。

矩阵通过所谓的制服传递给OpenGL。要创建矩阵,请使用GLM或Eigen等一些矢量数学库(以及与Eigen配套的非官方OpenGL模块)。

0

使用折旧函数还是可以的,但是如果你想使用“现代”OpenGL(OpenGL 3和更高版本),你将不得不做很不同的事情。

其中之一,你不再使用glBegin/glEnd,而是使用顶点缓冲区对象来绘制所有东西。其次,固定功能管道已被移除,因此需要顶点和片段着色器来绘制任何东西。还有其他一些更改(包括添加顶点数组对象和几何着色器)。

在OpenGL 3中执行旋转的方法是在统一模型中传递modelView和投影矩阵,并使用它们来计算顶点着色器中的顶点位置。最终,如果你想学习“现代”的OpenGL,你可能是最好的在网上查看关于OpenGL 3.0(或更高版本)的教程。