java3d立方体_java3d 立方体 加载纹理

这个博客详细介绍了如何在Java3D中创建一个立方体,并为它的六个面分别加载不同的纹理图片。通过TextureLoader加载纹理,然后将其应用到Box的每个面上,实现了立方体的纹理映射。博客还提到了鼠标行为如旋转、平移和缩放的实现。
摘要由CSDN通过智能技术生成

研究了很久的java3d,从昨天开始研究怎么加载纹理,今天终于搞定。原本想用数组加载图片,但是总是ava.lang.NullPointerException。于是就放弃了

一个个加载。。有点傻~

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

本人rookie,高手路过多提携。。。

a4c26d1e5885305701be709a3d33442f.png

import

java.applet.Applet;

import

java.awt.BorderLayout;

import

java.awt.GraphicsConfiguration;

import

javax.media.j3d.Appearance;

import

javax.media.j3d.BoundingSphere;

import

javax.media.j3d.BranchGroup;

import

javax.media.j3d.Canvas3D;

import

javax.media.j3d.Material;

import

javax.media.j3d.Texture2D;

import

javax.media.j3d.TextureAttributes;

import

javax.media.j3d.TransformGroup;

import

com.sun.j3d.utils.applet.MainFrame;

import

com.sun.j3d.utils.behaviors.mouse.MouseRotate;

import

com.sun.j3d.utils.behaviors.mouse.MouseTranslate;

import

com.sun.j3d.utils.behaviors.mouse.MouseWheelZoom;

import

com.sun.j3d.utils.geometry.Box;

import

com.sun.j3d.utils.image.TextureLoader;

import

com.sun.j3d.utils.universe.SimpleUniverse;

public class SimpleCube

extends Applet {

public BranchGroup

createSceneGraph() {

BranchGroup objRoot = new

BranchGroup();

TransformGroup trans = new

TransformGroup();

trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

trans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);

//加载正方体的六个面

//.1

TextureLoader myloader=new

TextureLoader(new String("image/1.jpg"),this);

//创建纹理

Texture2D mytext=(Texture2D)

myloader.getTexture();

//将纹理和外观绑定

Appearance apperarance = new

Appearance();

apperarance.setTexture(mytext);

TextureAttributes myTexAtt =

new TextureAttributes();

myTexAtt.setTextureMode(TextureAttributes.MODULATE);

apperarance.setTextureAttributes(myTexAtt);

Material mat = new

Material();

apperarance.setMaterial(mat);

//.2

TextureLoader myloader2=new

TextureLoader(new String("image/2.jpg"),this);

//创建纹理

Texture2D mytext2=(Texture2D)

myloader2.getTexture();

//将纹理和外观绑定

Appearance apperarance2 = new

Appearance();

apperarance2.setTexture(mytext2);

TextureAttributes myTexAtt2 =

new TextureAttributes();

myTexAtt2.setTextureMode(TextureAttributes.MODULATE);

apperarance2.setTextureAttributes(myTexAtt2);

Material mat2 = new

Material();

apperarance2.setMaterial(mat2);

//.3

TextureLoader myloader3=new

TextureLoader(new String("image/3.jpg"),this);

//创建纹理

Texture2D mytext3=(Texture2D)

myloader3.getTexture();

//将纹理和外观绑定

Appearance apperarance3 = new

Appearance();

apperarance3.setTexture(mytext3);

TextureAttributes myTexAtt3 =

new TextureAttributes();

myTexAtt3.setTextureMode(TextureAttributes.MODULATE);

apperarance3.setTextureAttributes(myTexAtt3);

Material mat3 = new

Material();

apperarance3.setMaterial(mat3);

//.4

TextureLoader myloader4=new

TextureLoader(new String("image/4.jpg"),this);

//创建纹理

Texture2D mytext4=(Texture2D)

myloader4.getTexture();

//将纹理和外观绑定

Appearance apperarance4 = new

Appearance();

apperarance4.setTexture(mytext4);

TextureAttributes myTexAtt4 =

new TextureAttributes();

myTexAtt4.setTextureMode(TextureAttributes.MODULATE);

apperarance4.setTextureAttributes(myTexAtt4);

Material mat4 = new

Material();

apperarance4.setMaterial(mat4);

//.5

TextureLoader myloader5=new

TextureLoader(new String("image/5.jpg"),this);

//创建纹理

Texture2D mytext5=(Texture2D)

myloader5.getTexture();

//将纹理和外观绑定

Appearance apperarance5 = new

Appearance();

apperarance5.setTexture(mytext5);

TextureAttributes myTexAtt5 =

new TextureAttributes();

myTexAtt5.setTextureMode(TextureAttributes.MODULATE);

apperarance5.setTextureAttributes(myTexAtt5);

Material mat5 = new

Material();

apperarance5.setMaterial(mat5);

//.6

TextureLoader myloader6=new

TextureLoader(new String("image/6.jpg"),this);

//创建纹理

Texture2D mytext6=(Texture2D)

myloader6.getTexture();

//将纹理和外观绑定

Appearance apperarance6 = new

Appearance();

apperarance6.setTexture(mytext6);

TextureAttributes myTexAtt6 =

new TextureAttributes();

myTexAtt6.setTextureMode(TextureAttributes.MODULATE);

apperarance6.setTextureAttributes(myTexAtt6);

Material mat6 = new

Material();

apperarance6.setMaterial(mat6);

//一个立方体

Box box = new Box(0.4f, 0.4f,

0.4f, Box.GENERATE_TEXTURE_COORDS, new Appearance())

;

box.getShape(Box.FRONT).setAppearance(apperarance);

box.getShape(Box.LEFT).setAppearance(apperarance2);

box.getShape(Box.RIGHT).setAppearance(apperarance3);

box.getShape(Box.BACK).setAppearance(apperarance4);

box.getShape(Box.TOP).setAppearance(apperarance5);

box.getShape(Box.BOTTOM).setAppearance(apperarance6);

objRoot.addChild(trans);

trans.addChild(box);

//trans.addChild(cylin);

//鼠标的旋转

MouseRotate myMouseRotate =

new MouseRotate();

myMouseRotate.setTransformGroup(trans);

myMouseRotate.setSchedulingBounds(new

BoundingSphere());

objRoot.addChild(myMouseRotate);

//鼠标的平移

MouseTranslate translate=new

MouseTranslate();

translate.setTransformGroup(trans);

translate.setSchedulingBounds(new

BoundingSphere());

objRoot.addChild(translate);

//鼠标的放大

MouseWheelZoom zoom=new

MouseWheelZoom();

zoom.setTransformGroup(trans);

zoom.setSchedulingBounds(new

BoundingSphere());

objRoot.addChild(zoom);

objRoot.compile();

return

objRoot;

}

public SimpleCube()

{

setLayout(new

BorderLayout());

GraphicsConfiguration config

=

SimpleUniverse.getPreferredConfiguration();

Canvas3D canvas3D = new

Canvas3D(config);

add("Center",

canvas3D);

BranchGroup scene =

createSceneGraph();

SimpleUniverse simpleU = new

SimpleUniverse(canvas3D);

simpleU.getViewingPlatform().setNominalViewingTransform();

simpleU.addBranchGraph(scene);

}

public static void

main(String[] args) {

new MainFrame(new

SimpleCube(), 500, 500);

}

}

 a4c26d1e5885305701be709a3d33442f.png

JAVA 3D开发工具包(3个版本),java3d-1_3、java3d-1_4、java3d-1_5,加一个例子。例子代码如下: import java.awt.GraphicsConfiguration; import javax.media.j3d.Alpha; import javax.media.j3d.BoundingSphere; import javax.media.j3d.BranchGroup; import javax.media.j3d.Canvas3D; import javax.media.j3d.RotationInterpolator; import javax.media.j3d.Transform3D; import javax.media.j3d.TransformGroup; import javax.swing.JApplet; import javax.vecmath.Point3d; import com.sun.j3d.utils.geometry.ColorCube; import com.sun.j3d.utils.universe.SimpleUniverse; import com.sun.j3d.utils.universe.ViewingPlatform; public class HelloUniverse extends JApplet { public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); //新建一个变形组结点,初始化它 //变形组结点指定一个单一的空间变形,通过一个Transform3D对象, //能对它的子结点定位,定向,定尺寸 TransformGroup objTrans = new TransformGroup(); //指定结点可以写入它的对象的变形信息。这样我们的行为代码就能在运行进修改它。 objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE); //根节结中加入这个变形组结点 objRoot.addChild(objTrans); //新建一个例子Shape3D结点,并把它加入到场景图表中 objTrans.addChild(new ColorCube(0.4)); Transform3D yAxis = new Transform3D(); /* * 提供转换一个时间值到一个0到1之间的alpha值的方法 * 第一个参数loopCount:运行循环次数,-1表示无限循环 * 第二个参数increasingAlphaDuration:alpha值从0到1的时间周期 */ Alpha rotationAlpha = new Alpha(-1, 4000); //新建旋转者,它将执行变形操作 RotationInterpolator rotator = new RotationInterpolator( rotationAlpha, objTrans, yAxis, 0.0f, (float) Math.PI*2.0f); //用一个中心点和半径定义一个球状范围区域。 BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); //设置旋转者的运行范围 rotator.setSchedulingBounds(bounds); //加它到根结点 objRoot.addChild(rotator); //执行优化 objRoot.compile(); return objRoot;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值