转型(Transformation)
优质
小牛编辑
133浏览
2023-12-01
OpenGL提供了更多功能,例如为对象应用颜色,缩放,照明,旋转对象等。本章介绍了使用JOGL对对象进行的一些转换。
在窗口上移动对象
在前面的章节中,我们讨论了使用简单的线条绘制线条和绘制各种形状的程序。 以这种方式创建的形状可以显示在窗口内的任何位置。 它是使用方法glTranslatef (float x, float y, float z) 。
此方法属于GLMatrixFunc接口,该接口位于javax.media.opengl.fixedfunc包中。
GLMatrixFunc接口
interface - GLMatrixFunc
package - javax.media.opengl.fixedfunc
下表列出了此接口的一些重要方法 -
Sr.No. | 方法和描述 |
---|---|
1 | void glRotatef(float angle, float x, float y, float z) 旋转当前矩阵。 |
2 | void glScalef(float x, float y, float z) 用于缩放当前矩阵。 |
3 | void glTranslatef(float x, float y,float z) 用于转换当前矩阵。 |
4 | void glLoadIdentity() 使用单位矩阵加载当前矩阵。 |
glTranslate()方法将坐标系的原点移动到参数(x,y,z)指定的点,并传递给glTranslate()方法为
论点。 为了保存和恢复未翻译的坐标系,使用glPushMatrix()和glPopMatrix()方法。
gl.glTranslatef(0f, 0f, -2.5f);
每当使用glTranslate() ,它都会改变屏幕上组件的位置。 因此,应该重写GLEventListener接口的reshape()方法,并初始化OpenGL视口和投影矩阵。
以下代码显示了用于初始化视图端口和投影矩阵的模板 -
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
// TODO Auto-generated method stub
final GL2 gl = drawable.getGL().getGL2();
// get the OpenGL 2 graphics object
if(height <= 0) height = 1;
//preventing devided by 0 exception height = 1;
final float h = (float) width/(float) height;
// display area to cover the entire window
gl.glViewport(0, 0, width, height);
//transforming projection matrix
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(45.0f, h, 1.0, 20.0);
//transforming model view gl.glLoadIdentity();
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
}