大家晚上好啊 我是寻觅!
以后会有文章给大家介绍一个java 3D 游戏引擎现在,先委屈大家看个简单例子了,
呵呵;
先给大家个游戏引擎下载地址大家可以先下去看看:在这里要感谢新朋友守护天使的
推荐
http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge
/j/ji/jirr/
呵呵,废话少说了 开始解析代码
大家先要下载些东西,说实话java就是这样,功能不错就是麻烦
下载:
java-media
http://java.sun.com/products/java-media/jmf/2.1.1/download.html
java-3d
http://www.downloadjava3d.com/windows.php 或
https://java3d.dev.java.net/binary-builds.html
接着,安装就不说了,easy very
当然希望大家把doc也下来看看。
装好后,给大家一个经过我修改的简单实验代码:(由于时间关系,解说会放在以后)
import
java.awt.
*
;
import javax.swing. * ;
import javax.media.j3d. * ;
import javax.vecmath. * ;
import java.awt.event. * ;
import com.sun.j3d.utils.geometry. * ;
public class MyJava3D extends JFrame
... {
// Virtual Universe object.
private VirtualUniverse universe;
// Locale of the scene graph.
private Locale locale;
// BranchGroup for the Content Branch of the scene
private BranchGroup contentBranch;
// TransformGroup node of the scene contents
private TransformGroup contentsTransGr;
// BranchGroup for the View Branch of the scene
private BranchGroup viewBranch;
// ViewPlatform node, defines from where the scene is viewed.
private ViewPlatform viewPlatform;
// Transform group for the ViewPlatform node
private TransformGroup vpTransGr;
// View node, defines the View parameters.
private View view;
// A PhysicalBody object can specify the user's head
PhysicalBody body;
// A PhysicalEnvironment object can specify the physical
// environment in which the view will be generated
PhysicalEnvironment environment;
// Drawing canvas for 3D rendering
private Canvas3D canvas;
// Screen3D Object contains screen's information
private Screen3D screen;
private Bounds bounds;
//***********************MyJava3D******************************/
public MyJava3D()
...{
super("My First Java3D Example");
//****************************************************************************************/
GraphicsDevice dev =
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
GraphicsConfigTemplate3D template = new GraphicsConfigTemplate3D();
GraphicsConfiguration config =
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getBestConfiguration(template);
canvas = new Canvas3D(config);
// Creating and setting the Canvas3D
//canvas = new Canvas3D(null); //改了这里
//****************************************************************************************/
getContentPane().setLayout( new BorderLayout( ) );
getContentPane().add(canvas, "Center");
// Setting the VirtualUniverse and the Locale nodes
setUniverse();
// Setting the content branch
setContent();
// Setting the view branch
setViewing();
// To avoid problems between Java3D and Swing
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
// enabling window closing
addWindowListener(new WindowAdapter() ...{
public void windowClosing(WindowEvent e)
...{System.exit(0); } });
setSize(600, 600);
bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), Double.MAX_VALUE);
}
//***********************MyJava3D******************************/
//***********************setUniverse******************************/
private void setUniverse()
...{
// Creating the VirtualUniverse and the Locale nodes
universe = new VirtualUniverse();
locale = new Locale(universe);
}
//***********************setUniverse******************************/
//***********************setContent******************************/
private void setContent()
...{
// Creating the content branch
contentsTransGr = new TransformGroup();
contentsTransGr.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
setLighting();
ColorCube cube1 = new ColorCube(0.1);
Appearance appearance = new Appearance();
cube1.setAppearance(appearance);
contentsTransGr.addChild(cube1);
ColorCube cube2 = new ColorCube(0.25);
Transform3D t1 = new Transform3D();
t1.rotZ(0.5);
Transform3D t2 = new Transform3D();
t2.set(new Vector3f(0.7f, 0.6f,-1.0f));
t2.mul(t1);
TransformGroup trans2 = new TransformGroup(t2);
trans2.addChild(cube2);
contentsTransGr.addChild(trans2);
Sphere sphere = new Sphere(0.2f);
Transform3D t3 = new Transform3D();
t3.set(new Vector3f(-0.2f, 0.5f,-0.2f));
TransformGroup trans3 = new TransformGroup(t3);
Appearance appearance3 = new Appearance();
Material mat = new Material();
mat.setEmissiveColor(-0.2f, 1.5f, 0.1f);
mat.setShininess(5.0f);
appearance3.setMaterial(mat);
sphere.setAppearance(appearance3);
trans3.addChild(sphere);
contentsTransGr.addChild(trans3);
contentBranch = new BranchGroup();
contentBranch.addChild(contentsTransGr);
// Compiling the branch graph before making it live
contentBranch .compile();
// Adding a branch graph into a locale makes its nodes live (drawable)
locale.addBranchGraph(contentBranch);
}
//***********************setContent******************************/
//***********************setLighting******************************/
private void setLighting()
...{
AmbientLight ambientLight = new AmbientLight();
ambientLight.setEnable(true);
ambientLight.setColor(new Color3f(0.10f, 0.1f, 1.0f) );
ambientLight.setCapability(AmbientLight.ALLOW_STATE_READ);
ambientLight.setCapability(AmbientLight.ALLOW_STATE_WRITE);
ambientLight.setInfluencingBounds(bounds);
contentsTransGr.addChild(ambientLight);
DirectionalLight dirLight = new DirectionalLight();
dirLight.setEnable(true);
dirLight.setColor( new Color3f( 1.0f, 0.0f, 0.0f ) );
dirLight.setDirection( new Vector3f( 1.0f, -0.5f, -0.5f ) );
dirLight.setCapability( AmbientLight.ALLOW_STATE_WRITE );
dirLight.setInfluencingBounds(bounds);
contentsTransGr.addChild(dirLight);
}
//***********************setLighting******************************/
//***********************setViewing******************************/
private void setViewing()
...{
// Creating the viewing branch
viewBranch = new BranchGroup();
// Setting the viewPlatform
viewPlatform = new ViewPlatform();
viewPlatform.setActivationRadius(Float.MAX_VALUE);
viewPlatform.setBounds(bounds);
Transform3D t = new Transform3D();
t.set(new Vector3f(0.3f, 0.7f, 3.0f));
vpTransGr = new TransformGroup(t);
// Node capabilities control (granding permission) read and write access
// after a node is live or compiled
// The number of capabilities small to allow more optimizations during compilation
vpTransGr.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
vpTransGr.setCapability( TransformGroup.ALLOW_TRANSFORM_READ);
vpTransGr.addChild(viewPlatform);
viewBranch.addChild(vpTransGr);
// Setting the view
view = new View();
view.setProjectionPolicy(View.PERSPECTIVE_PROJECTION );
view.addCanvas3D(canvas);
body = new PhysicalBody();
view.setPhysicalBody(body);
environment = new PhysicalEnvironment();
view.setPhysicalEnvironment(environment);
view.attachViewPlatform(viewPlatform);
view.setWindowResizePolicy(View.PHYSICAL_WORLD);
locale.addBranchGraph(viewBranch);
}
//***********************setViewing******************************/
//***********************************************************/
public static void main(String[] args)
...{
JFrame frame = new MyJava3D();
frame.setVisible(true);
}
}
import javax.swing. * ;
import javax.media.j3d. * ;
import javax.vecmath. * ;
import java.awt.event. * ;
import com.sun.j3d.utils.geometry. * ;
public class MyJava3D extends JFrame
... {
// Virtual Universe object.
private VirtualUniverse universe;
// Locale of the scene graph.
private Locale locale;
// BranchGroup for the Content Branch of the scene
private BranchGroup contentBranch;
// TransformGroup node of the scene contents
private TransformGroup contentsTransGr;
// BranchGroup for the View Branch of the scene
private BranchGroup viewBranch;
// ViewPlatform node, defines from where the scene is viewed.
private ViewPlatform viewPlatform;
// Transform group for the ViewPlatform node
private TransformGroup vpTransGr;
// View node, defines the View parameters.
private View view;
// A PhysicalBody object can specify the user's head
PhysicalBody body;
// A PhysicalEnvironment object can specify the physical
// environment in which the view will be generated
PhysicalEnvironment environment;
// Drawing canvas for 3D rendering
private Canvas3D canvas;
// Screen3D Object contains screen's information
private Screen3D screen;
private Bounds bounds;
//***********************MyJava3D******************************/
public MyJava3D()
...{
super("My First Java3D Example");
//****************************************************************************************/
GraphicsDevice dev =
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
GraphicsConfigTemplate3D template = new GraphicsConfigTemplate3D();
GraphicsConfiguration config =
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getBestConfiguration(template);
canvas = new Canvas3D(config);
// Creating and setting the Canvas3D
//canvas = new Canvas3D(null); //改了这里
//****************************************************************************************/
getContentPane().setLayout( new BorderLayout( ) );
getContentPane().add(canvas, "Center");
// Setting the VirtualUniverse and the Locale nodes
setUniverse();
// Setting the content branch
setContent();
// Setting the view branch
setViewing();
// To avoid problems between Java3D and Swing
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
// enabling window closing
addWindowListener(new WindowAdapter() ...{
public void windowClosing(WindowEvent e)
...{System.exit(0); } });
setSize(600, 600);
bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), Double.MAX_VALUE);
}
//***********************MyJava3D******************************/
//***********************setUniverse******************************/
private void setUniverse()
...{
// Creating the VirtualUniverse and the Locale nodes
universe = new VirtualUniverse();
locale = new Locale(universe);
}
//***********************setUniverse******************************/
//***********************setContent******************************/
private void setContent()
...{
// Creating the content branch
contentsTransGr = new TransformGroup();
contentsTransGr.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
setLighting();
ColorCube cube1 = new ColorCube(0.1);
Appearance appearance = new Appearance();
cube1.setAppearance(appearance);
contentsTransGr.addChild(cube1);
ColorCube cube2 = new ColorCube(0.25);
Transform3D t1 = new Transform3D();
t1.rotZ(0.5);
Transform3D t2 = new Transform3D();
t2.set(new Vector3f(0.7f, 0.6f,-1.0f));
t2.mul(t1);
TransformGroup trans2 = new TransformGroup(t2);
trans2.addChild(cube2);
contentsTransGr.addChild(trans2);
Sphere sphere = new Sphere(0.2f);
Transform3D t3 = new Transform3D();
t3.set(new Vector3f(-0.2f, 0.5f,-0.2f));
TransformGroup trans3 = new TransformGroup(t3);
Appearance appearance3 = new Appearance();
Material mat = new Material();
mat.setEmissiveColor(-0.2f, 1.5f, 0.1f);
mat.setShininess(5.0f);
appearance3.setMaterial(mat);
sphere.setAppearance(appearance3);
trans3.addChild(sphere);
contentsTransGr.addChild(trans3);
contentBranch = new BranchGroup();
contentBranch.addChild(contentsTransGr);
// Compiling the branch graph before making it live
contentBranch .compile();
// Adding a branch graph into a locale makes its nodes live (drawable)
locale.addBranchGraph(contentBranch);
}
//***********************setContent******************************/
//***********************setLighting******************************/
private void setLighting()
...{
AmbientLight ambientLight = new AmbientLight();
ambientLight.setEnable(true);
ambientLight.setColor(new Color3f(0.10f, 0.1f, 1.0f) );
ambientLight.setCapability(AmbientLight.ALLOW_STATE_READ);
ambientLight.setCapability(AmbientLight.ALLOW_STATE_WRITE);
ambientLight.setInfluencingBounds(bounds);
contentsTransGr.addChild(ambientLight);
DirectionalLight dirLight = new DirectionalLight();
dirLight.setEnable(true);
dirLight.setColor( new Color3f( 1.0f, 0.0f, 0.0f ) );
dirLight.setDirection( new Vector3f( 1.0f, -0.5f, -0.5f ) );
dirLight.setCapability( AmbientLight.ALLOW_STATE_WRITE );
dirLight.setInfluencingBounds(bounds);
contentsTransGr.addChild(dirLight);
}
//***********************setLighting******************************/
//***********************setViewing******************************/
private void setViewing()
...{
// Creating the viewing branch
viewBranch = new BranchGroup();
// Setting the viewPlatform
viewPlatform = new ViewPlatform();
viewPlatform.setActivationRadius(Float.MAX_VALUE);
viewPlatform.setBounds(bounds);
Transform3D t = new Transform3D();
t.set(new Vector3f(0.3f, 0.7f, 3.0f));
vpTransGr = new TransformGroup(t);
// Node capabilities control (granding permission) read and write access
// after a node is live or compiled
// The number of capabilities small to allow more optimizations during compilation
vpTransGr.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
vpTransGr.setCapability( TransformGroup.ALLOW_TRANSFORM_READ);
vpTransGr.addChild(viewPlatform);
viewBranch.addChild(vpTransGr);
// Setting the view
view = new View();
view.setProjectionPolicy(View.PERSPECTIVE_PROJECTION );
view.addCanvas3D(canvas);
body = new PhysicalBody();
view.setPhysicalBody(body);
environment = new PhysicalEnvironment();
view.setPhysicalEnvironment(environment);
view.attachViewPlatform(viewPlatform);
view.setWindowResizePolicy(View.PHYSICAL_WORLD);
locale.addBranchGraph(viewBranch);
}
//***********************setViewing******************************/
//***********************************************************/
public static void main(String[] args)
...{
JFrame frame = new MyJava3D();
frame.setVisible(true);
}
}