个性化阅读
专注于IT技术分析

JOGL闪电

本文概述

使用JOGL, 你可以通过编码为各种类型的对象提供各种灯光效果。这种效果使对象在视觉上更好。

光源

以下是一些重要的光源:-

  • 环境闪电-始终为物体赋予特定的颜色。
  • 漫射闪电-它将光线从不同角度散射到物体上。
  • 镜面闪电-模拟物体上的光亮点

JOGL重要方法

这些是用于为物体提供光线的一些重要方法:-

  • glEnable()-调用此方法为具有必需参数的对象启用light属性, 如下所示:
gl.glEnable( GL2.GL_LIGHTING );
  • glDisable()-此方法禁用灯光。默认情况下, 该属性为禁用状态。
  • glLightFV()-这是GLLightingfunc接口的一种方法, 包含四个光源参数。这些参数是:-灯光-它指定灯光的类型。 Pname-它指定光源参数。参数-用于指定在pname参数中传递的值。光源参数-传递所需的光源参数。
float[] ambientLight = {0f, 0f, 1f, 0f };  
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, ambientLight, 0);  

float[] specularLight = {1f, 0f, 0f, 0f };  
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, specularLight, 0);  


float[] diffuseLight = { 1f, 0f, 0f, 0f };  
gl.glLightfv( GL2.GL_LIGHT0, GL2.GL_DIFFUSE, diffuseLight, 0 );

JOGL照明实例

在此示例中, 我们将像之前所做的那样旋转一个三角形。每次旋转, 你都会注意到三角形的颜色也会改变。

package com.srcmini.jogl;

import javax.media.opengl.*;
import javax.media.opengl.awt.GLCanvas; 
import com.jogamp.opengl.util.*; 
import javax.swing.JFrame; 



public class JLight implements GLEventListener { 
private float rotation;
	
   @Override
public void display( GLAutoDrawable drawable ) {

final GL2 gl = drawable.getGL().getGL2(); 
gl.glColor3f(1f, 0f, 0f);
gl.glClear( GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT );   
gl.glLoadIdentity();       
gl.glRotatef( rotation, 1.0f, 1.0f, 0.0f ); 
		
gl.glBegin(GL2.GL_TRIANGLES);   

gl.glVertex2d(0, 0.5);

gl.glVertex2d(-0.5, -0.5);

gl.glVertex2d(0.5, -0.5);

gl.glEnd(); 
		
gl.glFlush(); 
      //Angle
rotation += 0.6f;   

gl.glEnable( GL2.GL_LIGHTING );  
gl.glEnable( GL2.GL_LIGHT0 );  
gl.glEnable( GL2.GL_DEPTH_TEST );  

float[] ambientLight = {0f, 0f, 1f, 0f };  
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, ambientLight, 0);  

float[] specularLight = {1f, 0f, 0f, 0f };  
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, specularLight, 0);  


float[] diffuseLight = { 1f, 0f, 0f, 0f };  
gl.glLightfv( GL2.GL_LIGHT0, GL2.GL_DIFFUSE, diffuseLight, 0 ); 
   }  

   @Override 
public void dispose( GLAutoDrawable arg0 ) { 
      //method body  
   } 

   @Override 
public void init( GLAutoDrawable arg0 ) { 

   } 
	
   @Override 
public void reshape( GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4 ) { 

   } 
public static void main(String[] args) {
	
	final GLProfile gp = GLProfile.get(GLProfile.GL2);
	GLCapabilities cap = new GLCapabilities(gp);
	
	final GLCanvas gc = new GLCanvas(cap);
	JLight tr= new JLight();
	gc.addGLEventListener(tr);
	gc.setSize(400, 400);
	
	final JFrame frame = new JFrame("JOGL Lighting");
	frame.add(gc);
	frame.setSize(500, 400);
	frame.setVisible(true);  
	
	final FPSAnimator animator = new FPSAnimator(gc, 400, true ); 
	animator.start(); 
	   }
	}

输出:

JOGL闪电
赞(0)
未经允许不得转载:srcmini » JOGL闪电

相关推荐

评论 抢沙发

评论前必须登录!