В этой главе объясняется, как применить эффект освещения к объекту с помощью JOGL.
Чтобы установить освещение, сначала включите освещение, используя метод glEnable () . Затем примените освещение для объектов, используя метод glLightfv (int light, int pname, float [] params, int params_offset) интерфейса GLLightingFunc . Этот метод принимает четыре параметра.
В следующей таблице описаны параметры метода gllightfv () .
Sr.No. | Имя параметра и описание |
---|---|
1 |
Свет Определяет свет. Количество источников света зависит от реализации, но поддерживается как минимум восемь источников света. Он принимает десять значений, эти параметры обсуждаются в отдельной таблице с именем Параметры источника света, приведенной ниже. |
2 |
PNAME Определяет однозначный параметр источника света. Для источника света есть десять параметров, которые обсуждаются ниже. |
3 |
Params Указывает указатель на значение или значения, которые установлены для параметра pname источника света . |
4 |
Параметр источника света Вы можете использовать любой из параметров источника света, указанных ниже. |
Свет
Определяет свет. Количество источников света зависит от реализации, но поддерживается как минимум восемь источников света. Он принимает десять значений, эти параметры обсуждаются в отдельной таблице с именем Параметры источника света, приведенной ниже.
PNAME
Определяет однозначный параметр источника света. Для источника света есть десять параметров, которые обсуждаются ниже.
Params
Указывает указатель на значение или значения, которые установлены для параметра pname источника света .
Параметр источника света
Вы можете использовать любой из параметров источника света, указанных ниже.
Параметры источника света
Sr.No. | Параметр и описание |
---|---|
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 или GL_LINEAR_ATTENUATION или GL_QUADRATIC_ATTENUATION Вы можете использовать любой из этих факторов ослабления, который представлен одним значением. |
GL_AMBIENT
Он содержит параметры, которые определяют интенсивность освещения.
GL_DIFFUSE
Он содержит параметры, которые определяют диффузную интенсивность света.
GL_SPECULAR
Он содержит параметры, которые определяют зеркальную интенсивность света.
gl_Position
Он содержит четыре целочисленных значения или значения с плавающей запятой, которые определяют положение источника света в однородных координатах объекта.
GL_SPOT_DIRECTION
Он содержит параметры, которые определяют направление света в однородных координатах объекта.
GL_SPOT_EXPONENT
Его параметры определяют распределение интенсивности света.
GL_SPOT_CUTOFF
Единственный параметр этого определяет максимальный угол рассеивания света.
GL_CONSTANT_ATTENUATION или GL_LINEAR_ATTENUATION или 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
Если вы скомпилируете и выполните вышеуказанную программу, она выдаст следующий вывод. Здесь вы можете наблюдать различные снимки вращающегося многоугольника с подсветкой.