JOGL - प्रकाश

यह अध्याय आपको बताता है कि JOGL का उपयोग करके किसी ऑब्जेक्ट पर प्रकाश प्रभाव कैसे लागू किया जाए।

प्रकाश व्यवस्था सेट करने के लिए, प्रारंभ में प्रकाश व्यवस्था को सक्षम करें glEnable()तरीका। फिर वस्तुओं का उपयोग करते हुए प्रकाश व्यवस्था लागू करेंglLightfv(int light, int pname, float[] params, int params_offset) उसकि विधि GLLightingFuncइंटरफेस। इस विधि में चार पैरामीटर होते हैं।

निम्न तालिका के मापदंडों का वर्णन करता है gllightfv() तरीका।

अनु क्रमांक। पैरामीटर नाम और विवरण
1

Light

एक प्रकाश निर्दिष्ट करता है। रोशनी की संख्या कार्यान्वयन पर निर्भर करती है, लेकिन कम से कम आठ रोशनी का समर्थन किया जाता है। यह दस मानों को स्वीकार करता है, उन मापदंडों की चर्चा नीचे दी गई लाइट सोर्स पैरामीटर्स नामक एक अलग तालिका में की गई है।

2

Pname

एक एकल मूल्यवान प्रकाश स्रोत पैरामीटर निर्दिष्ट करता है। प्रकाश स्रोत के लिए, नीचे दिए गए चर्चा के अनुसार दस पैरामीटर हैं।

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

प्रकाश को एक घूर्णन बहुभुज पर लागू करना

एक घूर्णन बहुभुज में प्रकाश लगाने के लिए दिए गए चरणों का पालन करें।

बहुभुज () विधि का उपयोग करके बहुभुज को घुमाएं

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

यदि आप उपरोक्त कार्यक्रम को संकलित और निष्पादित करते हैं, तो यह निम्नलिखित आउटपुट उत्पन्न करता है। यहां, आप प्रकाश के साथ एक घूर्णन बहुभुज के विभिन्न स्नैपशॉट देख सकते हैं।