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