📄 exlightscope.htm
字号:
<HTML>
<HEAD>
<!-- Created by mktalk.pl on 5/4/99 at 4:41:12 PM -->
<TITLE>ExLightScope.java</TITLE>
</HEAD>
<BODY
BGCOLOR=#000000
TEXT=#FFFFFF
LINK=#FFFFFF
ALINK=#00FF00
VLINK=#888888
>
<FONT COLOR=#FFFF00 SIZE=+0>
<CENTER>Lighting the environment</CENTER></FONT>
<FONT COLOR=#FFFF00 SIZE=+3>
<CENTER><B><I>ExLightScope.java</I></B></CENTER></FONT>
<CENTER><IMG SRC="../images/red.jpg" HEIGHT=2 WIDTH=70% BORDER=0></CENTER>
<P>
<PRE>
<FONT COLOR=#00FF00 SIZE=+1>
//
// CLASS
// ExLightScope - illustrate use of light scope groups
//
// LESSON
// Add three DirectionalLight nodes to illuminate a scene, selecting
// one of them to use at a time. Each light has a different scope
// group list, and thus illuminates different parts of the scene.
//
// SEE ALSO
// ExAmbientLight
// ExPointLight
// ExSpotLight
// ExLightBounds
//
// AUTHOR
// David R. Nadeau / San Diego Supercomputer Center
//
import java.awt.*;
import java.awt.event.*;
import javax.media.j3d.*;
import javax.vecmath.*;
public class ExLightScope
extends Example
{
//--------------------------------------------------------------
// SCENE CONTENT
//--------------------------------------------------------------
//
// Nodes (updated via menu)
//
private DirectionalLight light1 = null;
private DirectionalLight light2 = null;
private DirectionalLight light3 = null;
private Group content1 = null;
private Group content2 = null;
//
// Build scene
//
public Group buildScene( )
{
// Turn off the example headlight
setHeadlightEnable( false );
// Build the scene group
Group scene = new Group( );
// Build foreground geometry into two groups. We'll
// create three directional lights below, one each with
// scope to cover the first geometry group only, the
// second geometry group only, or both geometry groups.
content1 = new SphereGroup(
0.25f, // radius of spheres
1.5f, // x spacing
0.75f, // y spacing
3, // number of spheres in X
5, // number of spheres in Y
null ); // appearance
scene.addChild( content1 );
content2 = new SphereGroup(
0.25f, // radius of spheres
1.5f, // x spacing
0.75f, // y spacing
2, // number of spheres in X
5, // number of spheres in Y
null ); // appearance
scene.addChild( content2 );
// BEGIN EXAMPLE TOPIC
// Create influencing bounds
BoundingSphere worldBounds = new BoundingSphere(
new Point3d( 0.0, 0.0, 0.0 ), // Center
1000.0 ); // Extent
// Add three directional lights whose scopes are set
// to cover one, the other, or both of the shape groups
// above. Also set the lights' color and aim direction.
// Light #1 with content1 scope
light1 = new DirectionalLight( );
light1.setEnable( light1OnOff );
light1.setColor( Red );
light1.setDirection( new Vector3f( 1.0f, 0.0f, -1.0f ) );
light1.setInfluencingBounds( worldBounds );
light1.addScope( content1 );
light1.setCapability( Light.ALLOW_STATE_WRITE );
scene.addChild( light1 );
// Light #2 with content2 scope
light2 = new DirectionalLight( );
light2.setEnable( light2OnOff );
light2.setColor( Blue );
light2.setDirection( new Vector3f( 1.0f, 0.0f, -1.0f ) );
light2.setInfluencingBounds( worldBounds );
light2.addScope( content2 );
light2.setCapability( Light.ALLOW_STATE_WRITE );
scene.addChild( light2 );
// Light #3 with universal scope (the default)
light3 = new DirectionalLight( );
light3.setEnable( light3OnOff );
light3.setColor( White );
light3.setDirection( new Vector3f( 1.0f, 0.0f, -1.0f ) );
light3.setInfluencingBounds( worldBounds );
light3.setCapability( Light.ALLOW_STATE_WRITE );
scene.addChild( light3 );
// Add an ambient light to dimly illuminate the rest of
// the shapes in the scene to help illustrate that the
// directional lights are being scoped... otherwise it looks
// like we're just removing shapes from the scene
AmbientLight ambient = new AmbientLight( );
ambient.setEnable( true );
ambient.setColor( White );
ambient.setInfluencingBounds( worldBounds );
scene.addChild( ambient );
// END EXAMPLE TOPIC
return scene;
}
//--------------------------------------------------------------
// USER INTERFACE
//--------------------------------------------------------------
//
// Main
//
public static void main( String[] args )
{
ExLightScope ex = new ExLightScope( );
ex.initialize( args );
ex.buildUniverse( );
ex.showFrame( );
}
// Menu choices
private boolean light1OnOff = true;
private CheckboxMenuItem light1OnOffMenu;
private boolean light2OnOff = true;
private CheckboxMenuItem light2OnOffMenu;
private boolean light3OnOff = false;
private CheckboxMenuItem light3OnOffMenu;
//
// Initialize the GUI (application and applet)
//
public void initialize( String[] args )
{
// Initialize the window, menubar, etc.
super.initialize( args );
exampleFrame.setTitle( "Java 3D Light Scoping Example" );
//
// Add a menubar menu to change node parameters
// Use bounding leaf
//
Menu m = new Menu( "DirectionalLights" );
light1OnOffMenu =
new CheckboxMenuItem( "Red light with sphere set 1 scope",
light1OnOff );
light1OnOffMenu.addItemListener( this );
m.add( light1OnOffMenu );
light2OnOffMenu =
new CheckboxMenuItem( "Blue light with sphere set 2 scope",
light2OnOff );
light2OnOffMenu.addItemListener( this );
m.add( light2OnOffMenu );
light3OnOffMenu =
new CheckboxMenuItem( "White light with universal scope",
light3OnOff );
light3OnOffMenu.addItemListener( this );
m.add( light3OnOffMenu );
exampleMenuBar.add( m );
}
//
// Handle checkboxes and menu choices
//
public void itemStateChanged( ItemEvent event )
{
Object src = event.getSource( );
if ( src == light1OnOffMenu )
{
light1OnOff = light1OnOffMenu.getState( );
light1.setEnable( light1OnOff );
return;
}
if ( src == light2OnOffMenu )
{
light2OnOff = light2OnOffMenu.getState( );
light2.setEnable( light2OnOff );
return;
}
if ( src == light3OnOffMenu )
{
light3OnOff = light3OnOffMenu.getState( );
light3.setEnable( light3OnOff );
return;
}
// Handle all other checkboxes
super.itemStateChanged( event );
}
}
</FONT></PRE>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -