查看: 1951|回复: 0
打印 上一主题 下一主题

[Java3D] java3D的材质设计

[复制链接]

435

主题

2

听众

6371

积分

高级设计师

Rank: 6Rank: 6

纳金币
6372
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-9-18 11:38:42 |只看该作者 |倒序浏览
import java.awt.*;

import javax.media.*;

import javax.media.j3d.*;

import javax.vecmath.*;

import com.sun.j3d.*;

import com.sun.j3d.utils.*;

import com.sun.j3d.utils.geometry.*;

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

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

/*

* 创建物体外观对象:Appearance.

* 创建物体的材质对象Material,它通过5过属性指定物体如何显示,其中有4个属性是颜色:环境(Ambient)

* 放射(Emissive),漫射(Diffuse)和镜射(Specular),第5个属性是发光(Shininess),这些属性

* 的值均为数字类型.每个颜色属性指定了物体的在特有情况下如何发光,比如,环境色反射在环境中发射

* 方向无法确定的光线,漫射光反射来自一个方向的光线,所以当光线垂直摄入表面时会更亮.对大多数

* 物体可以确定给环境光和满射光成分制定同一颜色,给放射光指定黑色,

* 通过Appearance的setMaterial方法设置物体的材质

* 创建物体的纹理对象Texture.TextureLoader类根据图片生成纹理,调用他的getTexture方法获

* 取纹理对象Texture,需要设置Texture的边界模型和颜色

* 通过Appearance的setTexture方法设置物体的纹理*/

public class Grahoics3D {



static class PictureBall{

  public PictureBall(){

   SimpleUniverse universe=new SimpleUniverse();

   BranchGroup group=new BranchGroup();

   //建立颜色

   Color3f black=new Color3f(0.0f,0.0f,0.0f);

   Color3f white=new Color3f(1.0f,1.0f,1.0f);

   Color3f red=new Color3f(0.7f,0.7f,0.7f);

   

   //建立纹理贴图

   //必须是2的幂,例如128像素宽,256像素高

   //当载入图片后可以指定想要如何使用图片,例如:RGB使用图片的颜色

   //LUMINANCE使用图片显示黑白

   TextureLoader loader=new TextureLoader("D:/javap/23.jpg","RGB",new Container());

   Texture texture=loader.getTexture();//创建纹理对象

   texture.setBoundaryModeS(Texture.WRAP);

   texture.setBoundaryModeT(Texture.WRAP);

   texture.setBoundaryColor(new Color4f(0.0f,1.0f,0.0f,0.0f));

   

   //建立纹理属性

   //可以用PEPLACE,BLEND或MODULATE

   TextureAttributes textAttr=new TextureAttributes();

   textAttr.setTextureMode(TextureAttributes.MODULATE);

   Appearance ap=new Appearance();

   ap.setTexture(texture);

   ap.setTextureAttributes(textAttr);

   

   //建立材质,5个参数分别为(环境,放射,漫射,镜射,发光)

   ap.setMaterial(new Material(red,red,black,black,50.0f));

   

   //创建一个球来展示纹理

   //如果使用一个简单物理如球体,则需要通过设置"原始标记"允许纹理化

   int primflags=Primitive.GENERATE_TEXTURE_COORDS;

   Sphere sphere=new Sphere(0.5f,primflags,ap);

   group.addChild(sphere);

   

   //创建灯光,定向光源

   Color3f light1Color=new Color3f(1f,1f,1f);

   

   BoundingSphere bounds=new BoundingSphere(new Point3d(0.0,0.0,0.0),1000.0);

   

   Vector3f light1Direction=new Vector3f(4.0f,-7.0f,-12.0f);

   DirectionalLight light1=new DirectionalLight(light1Color,light1Direction);

   

   light1.setInfluencingBounds(bounds);

   group.addChild(light1);

   

   //建立一个环境光源

   AmbientLight ambientLight=new AmbientLight(new Color3f(0.5f,0.5f,0.5f));

   

   group.addChild(ambientLight);

   

   //注视球体

   universe.getViewingPlatform().setNominalViewingTransform();

   universe.addBranchGraph(group);

  }

}





public static void main(String args[]){

  PictureBall pictureBall=new PictureBall();

}


}

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-18 03:46 , Processed in 0.085886 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部