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(); 
}