JOGL - การเปลี่ยนแปลง
OpenGL มีคุณสมบัติเพิ่มเติมเช่นการใช้สีกับวัตถุการปรับขนาดการจัดแสงการหมุนวัตถุ ฯลฯ ในบทนี้จะอธิบายการเปลี่ยนแปลงบางอย่างบนวัตถุโดยใช้ JOGL
การย้ายวัตถุบนหน้าต่าง
ในบทก่อนหน้านี้เราได้พูดถึงโปรแกรมสำหรับวาดเส้นและวาดรูปทรงต่างๆโดยใช้เส้นง่ายๆ รูปร่างที่สร้างด้วยวิธีนี้สามารถแสดงบนตำแหน่งใดก็ได้ภายในหน้าต่าง ทำได้โดยใช้วิธีการglTranslatef (float x, float y, float z).
วิธีนี้เป็นของไฟล์ GLMatrixFunc ซึ่งอยู่ในไฟล์ javax.media.opengl.fixedfunc แพ็คเกจ
อินเทอร์เฟซ GLMatrixFunc
interface - GLMatrixFunc
package - javax.media.opengl.fixedfunc
ตารางต่อไปนี้แสดงวิธีการที่สำคัญบางอย่างของอินเทอร์เฟซนี้ -
ซีเนียร์ | วิธีการและคำอธิบาย |
---|---|
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()ใช้มันเปลี่ยนตำแหน่งของส่วนประกอบบนหน้าจอ ดังนั้นreshape() วิธีการของ GLEventListener อินเทอร์เฟซควรถูกแทนที่และควรเริ่มต้นวิวพอร์ต 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();
}