JOGL - แสงสว่าง
บทนี้อธิบายวิธีการใช้เอฟเฟกต์แสงกับวัตถุโดยใช้ JOGL
ในการตั้งค่าแสงให้เปิดใช้งานแสงโดยใช้ไฟล์ glEnable()วิธี. จากนั้นใช้แสงสำหรับวัตถุโดยใช้glLightfv(int light, int pname, float[] params, int params_offset) วิธีการของ GLLightingFuncอินเตอร์เฟซ. วิธีนี้ใช้พารามิเตอร์สี่ตัว
ตารางต่อไปนี้อธิบายพารามิเตอร์ของ gllightfv() วิธี.
| ซีเนียร์ | ชื่อพารามิเตอร์และคำอธิบาย | 
|---|---|
| 1 | Light ระบุไฟ จำนวนไฟขึ้นอยู่กับการใช้งาน แต่รองรับไฟอย่างน้อยแปดดวง ยอมรับค่าสิบค่าพารามิเตอร์เหล่านี้จะกล่าวถึงในตารางแยกต่างหากชื่อพารามิเตอร์แหล่งกำเนิดแสงที่ระบุด้านล่าง  |  
      
| 2 | Pname ระบุพารามิเตอร์แหล่งกำเนิดแสงที่มีค่าเดียว สำหรับแหล่งกำเนิดแสงมีพารามิเตอร์ 10 ตัวตามที่กล่าวไว้ด้านล่าง  |  
      
| 3 | Params ระบุตัวชี้ไปยังค่าหรือค่าที่ถูกตั้งค่าพารามิเตอร์pnameของแหล่งกำเนิดแสงไฟ  |  
      
| 4 | Light source parameter คุณสามารถใช้พารามิเตอร์แหล่งกำเนิดแสงใดก็ได้ที่ระบุด้านล่างนี้  |  
      
พารามิเตอร์แหล่งกำเนิดแสง
| ซีเนียร์ | พารามิเตอร์และคำอธิบาย | 
|---|---|
| 1 | GL_AMBIENT ประกอบด้วยพารามิเตอร์ที่ระบุความเข้มของแสงโดยรอบ  |  
        
| 2 | GL_DIFFUSE ประกอบด้วยพารามิเตอร์ที่ระบุความเข้มการกระจายของแสง  |  
        
| 3 | GL_SPECULAR ประกอบด้วยพารามิเตอร์ที่ระบุความเข้มของแสงโดยเฉพาะ  |  
        
| 4 | GL_POSITION ประกอบด้วยค่าจำนวนเต็มหรือทศนิยมสี่ค่าที่ระบุตำแหน่งของแสงในพิกัดวัตถุที่เป็นเนื้อเดียวกัน  |  
        
| 5 | GL_SPOT_DIRECTION ประกอบด้วยพารามิเตอร์ที่ระบุทิศทางของแสงในพิกัดวัตถุที่เป็นเนื้อเดียวกัน  |  
        
| 6 | GL_SPOT_EXPONENT พารามิเตอร์ระบุการกระจายความเข้มของแสง  |  
        
| 7 | GL_SPOT_CUTOFF พารามิเตอร์เดียวของค่านี้ระบุมุมการแพร่กระจายสูงสุดของแสง  |  
        
| 8 | GL_CONSTANT_ATTENUATION or GL_LINEAR_ATTENUATION or GL_QUADRATIC_ATTENUATION คุณสามารถใช้ปัจจัยการลดทอนใด ๆ เหล่านี้ซึ่งแสดงด้วยค่าเดียว  |  
        
แสงสว่างถูกเปิดใช้งานหรือปิดใช้งานโดยใช้ glEnable() และ glDisable () วิธีการกับอาร์กิวเมนต์ GL_LIGHTING.
เทมเพลตต่อไปนี้มีไว้สำหรับการจัดแสง -
gl.glEnable(GL2.GL_LIGHTING); 
gl.glEnable(GL2.GL_LIGHT0);  
gl.glEnable(GL2.GL_NORMALIZE); 
float[] ambientLight = { 0.1f, 0.f, 0.f,0f };  // weak RED ambient 
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, ambientLight, 0); 
float[] diffuseLight = { 1f,2f,1f,0f };  // multicolor diffuse 
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, diffuseLight, 0); 
    การใช้แสงกับรูปหลายเหลี่ยมที่หมุนได้
ทำตามขั้นตอนที่กำหนดเพื่อใช้แสงกับรูปหลายเหลี่ยมที่หมุนได้
หมุนรูปหลายเหลี่ยมโดยใช้วิธี glRotate ()
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); 
  
// Clear The Screen And The Depth Buffer  
gl.glLoadIdentity();  
                 
// Reset The View  
gl.glRotatef(rpoly, 0.0f, 1.0f, 0.0f); 
    ให้เราทำตามโปรแกรมเพื่อใช้แสงกับรูปหลายเหลี่ยมหมุน -
import javax.media.opengl.GL2; 
import javax.media.opengl.GLAutoDrawable; 
import javax.media.opengl.GLCapabilities; 
import javax.media.opengl.GLEventListener; 
import javax.media.opengl.GLProfile; 
import javax.media.opengl.awt.GLCanvas; 
import javax.swing.JFrame; 
import com.jogamp.opengl.util.FPSAnimator; 
 
public class PolygonLighting implements GLEventListener { 
   private float rpoly;
	
   @Override 
	
   public void display( GLAutoDrawable drawable ) {
   
      final GL2 gl = drawable.getGL().getGL2(); 
      gl.glColor3f(1f,0f,0f); //applying red
      
      // Clear The Screen And The Depth Buffer 
      gl.glClear( GL2.GL_COLOR_BUFFER_BIT |  
      GL2.GL_DEPTH_BUFFER_BIT );   
      gl.glLoadIdentity();       // Reset The View    
      gl.glRotatef( rpoly, 0.0f, 1.0f, 0.0f ); 
		
      gl.glBegin( GL2.GL_POLYGON ); 
      
      gl.glVertex3f( 0f,0.5f,0f ); 
      gl.glVertex3f( -0.5f,0.2f,0f ); 
      gl.glVertex3f( -0.5f,-0.2f,0f ); 
      gl.glVertex3f( 0f,-0.5f,0f ); 
      gl.glVertex3f( 0f,0.5f,0f ); 
      gl.glVertex3f( 0.5f,0.2f,0f ); 
      gl.glVertex3f( 0.5f,-0.2f,0f ); 
      gl.glVertex3f( 0f,-0.5f,0f ); 
      
      gl.glEnd(); 
		
      gl.glFlush(); 
      
      rpoly += 0.2f;  //assigning the angle 
      
      gl.glEnable( GL2.GL_LIGHTING );  
      gl.glEnable( GL2.GL_LIGHT0 );  
      gl.glEnable( GL2.GL_NORMALIZE );  
      // weak RED ambient 
      float[] ambientLight = { 0.1f, 0.f, 0.f,0f };  
      gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, ambient-Light, 0);  
      // multicolor diffuse 
      float[] diffuseLight = { 1f,2f,1f,0f };  
      gl.glLightfv( GL2.GL_LIGHT0, GL2.GL_DIFFUSE, diffuse-Light, 0 ); 
   }  
      
   @Override 
   public void dispose( GLAutoDrawable arg0 ) { 
      //method body  
   } 
  
   @Override 
   public void init( GLAutoDrawable arg0 ) { 
      // method body     
   } 
	
   @Override 
   public void reshape( GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4 ) { 
      // method body 
   } 
	
   public static void main( String[] args ) { 
   
      //getting the capabilities object of GL2 profile 
      final GLProfile profile = GLProfile.get( GLProfile.GL2 ); 
      GLCapabilities capabilities = new GLCapabilities( profile);
      // The canvas  
      final GLCanvas glcanvas = new GLCanvas( capabilities ); 
      PolygonLighting polygonlighting = new PolygonLighting(); 
      glcanvas.addGLEventListener( polygonlighting ); 
      glcanvas.setSize( 400, 400 ); 
      //creating frame 
      final JFrame frame = new JFrame (" Polygon lighting ");  
      //adding canvas to it 
      frame.getContentPane().add( glcanvas ); 
      frame.setSize( frame.getContentPane().getPreferredSize()); 
      frame.setVisible( true );  
                    
      //Instantiating and Initiating Animator 
      final FPSAnimator animator = new FPSAnimator(glcanvas, 300,true ); 
      animator.start();                     
      
   } //end of main 
	
} //end of class 
    หากคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะสร้างผลลัพธ์ต่อไปนี้ ที่นี่คุณสามารถสังเกตภาพรวมต่างๆของรูปหลายเหลี่ยมที่หมุนได้พร้อมแสงไฟ