在SUN的J3D里面并没有提供对3DS格式的文件的导入。但是3DS格式的文件又很常见。为此,我们需要借用第三方的工具,来把3DS里面的模型导入到程序中。

我们用的是Loader3ds这个工具

我们还是看一个简单的例子吧

/*

* Test2.java

*

* Created on 2007-10-4, 15:28:14

*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package test1;

import com.microcrowd.loader.java3d.max3ds.Loader3DS;

import com.sun.j3d.loaders.Scene;

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.universe.SimpleUniverse;

import java.awt.Color;

import java.io.FileNotFoundException;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.media.j3d.Alpha;

import javax.media.j3d.BoundingSphere;

import javax.media.j3d.BranchGroup;

import javax.media.j3d.DirectionalLight;

import javax.media.j3d.Transform3D;

import javax.media.j3d.TransformGroup;

import javax.vecmath.Color3f;

import javax.vecmath.Point3d;

import javax.vecmath.Vector3f;

/**

*

* @author hadeslee

*/

public class Test2 {

public Test2() {

build();

}

private void build() {

try {

BranchGroup bg = loadBranchGroup();

SimpleUniverse u = new SimpleUniverse();

u.getViewingPlatform().setNominalViewingTransform();

u.addBranchGraph(bg);

} catch (FileNotFoundException ex) {

Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);

}

}

private BranchGroup loadBranchGroup() throws FileNotFoundException {

Loader3DS dd = new Loader3DS();

Scene scene = dd.load("01.3DS");

System.out.println("scene=" + scene);

if (scene != null) {

BranchGroup bjRoot = new BranchGroup();

BranchGroup bg = scene.getSceneGroup();

TransformGroup bjTrans = new TransformGroup();

Transform3D trans=new Transform3D();

trans.setScale(0.3f);

objTrans.setTransform(trans);

objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

objTrans.addChild(bg);

objRoot.addChild(objTrans);

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

MouseRotate behavior. = new MouseRotate();

behavior.setTransformGroup(objTrans);

objTrans.addChild(behavior);

behavior.setSchedulingBounds(bounds);

MouseTranslate tr = new MouseTranslate();

tr.setTransformGroup(objTrans);

objTrans.addChild(tr);

tr.setSchedulingBounds(bounds);

MouseWheelZoom tr1 = new MouseWheelZoom();

tr1.setTransformGroup(objTrans);

objTrans.addChild(tr1);

tr1.setSchedulingBounds(bounds);

Color3f light1Color = new Color3f(Color.RED);

Vector3f light1Direction = new Vector3f(0f, 0f, -10f);

DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction);

light1.setInfluencingBounds(bounds);

objRoot.addChild(light1);

return objRoot;

}

return null;

}

public static void main(String[] args) {

new Test2();

}

}

我们从一个3DS文件里面导出了一个场景 ,当然也可以导出更多其它的东西。01.3ds大家可以替换成自己的文件,还有一点要注意的就是,因为3Ds MAX的一些设置和J3D里面不一定一样,所以你导入进来以后,可能会什么都看不到,所以最好是设置为鼠标可以控制大小和位置的,这样就可以自己去找到我们导入的模型,然后根据我们找到的位置,在程序里面再给它定好位。

还有可以导入其它格式的第三方的库,大家都可以去研究一下,以丰富J3D的素材。

java如何使用3dmax中的文件_在java3d里面使用3DS格式的文件相关推荐

  1. 怎么用stata打开dta文件_用shell命令打开任意格式的文件

    hello,大家好,又来到了每周一期的知识大课堂啦,每期的知识大课堂,我们都会分享一个实用的知识点.本期的知识大课堂为大家带来的是:shell命令的使用方法. 在很多情况下,我们需要在应用程序中直接打 ...

  2. java代码在jsp中怎么写_在jsp中写java代码

    该服务器上的所有的访问者的所有 jsp 页面 D.该服务器上的所有的访问者的所有 jsp 页面和 Java 程序 6.在 JSP 中调用 JavaBean 时不会用到的标记是( )...... jav ...

  3. pyppeteer有java版本吗_Pyppeteer中文文档_序言_安装_基本使用及注意事项

    Pyppeteer中文文档_序言_安装_基本使用及注意事项 Pyppeteer是Puppeteer Javascript(无头) chrome/chromium 浏览器自动化库的Python非官方端口 ...

  4. c++ 写入文件_利用Python把数据存储在csv文件中

    鼠年第一天开盘,很多股票跌停,太闹心了!今天再找点开心的事情做吧.人生最幸福的事情莫过于看到自己写的程序调试通过了! 前面我们介绍了,如何用Python做一个串口通讯的上位机.用这个上位机我们可以从E ...

  5. java如何向数据库中插入数据_如何控制Java代码向数据库中插入数据

    慕哥6287543 Java程序向数据库中插入数据,代码如下:123456789101112131415161718192021222324252627282930313233343536373839 ...

  6. qt 快速按行读取文件_这是知识点之Linux下分割文件并保留文件头

    点击上方"开发者的花花世界",选择"设为星标"技术干货不定时送达! 这是一个知识点 方便快捷的给结构化数据文件分割大小并保留文件的表头,几十个G的结构化文件不仅 ...

  7. 如何恢复录音删除的录音文件_硬盘分区数据误删除如何恢复?文件删除不用急...

    硬盘分区数据误删除如何恢复?相信很多人在安装系统或者重装电脑时,往往也都会对电脑原有数据的卷大小进行调整,以此来满足我们日常使用的需求.然而对于一些新手来说,在操作时也都容易不小心把整个硬盘的分区给删 ...

  8. java读取doc、docx、ppt、pptx、xls、xlsx格式的文件

    前言: 通常我们用apache 的POI库对以上文档进行操作,apache POI官网 apache POI官网 这里推荐到官网下载导入到项目,maven下载的它会缺少几个包. 格式上后缀带x(doc ...

  9. python操作xls文件_【转】使用Python操作XLS文件

    我在网上找了下,发现至少有两种方法,第一种是直接操作excle的com库,当然python自带的lib里面已经给我们封装好了实现,直接使用就可以 了,win32com.client,这种方法甚至可以直 ...

最新文章

  1. 【JS】JS中数值型字符串相加变成拼接字符串的解决方法
  2. python scipy卷积 图像卷积
  3. SpringBoot常见功能特性分析
  4. eclipse工程 'cocostudio/CocoStudio.h' file not found
  5. leetcode-876. 链表的中间结点解法
  6. 一入前端深似海,从此红尘是路人系列第七弹之孤独的剑客-单例模式
  7. python 中间件
  8. mybatis热加载的实现
  9. OpenMP对于嵌套循环应该添加多少个parallel for
  10. vim 配置文件留存
  11. 阿里开源框架Jarslink1.6.1新特性
  12. Power Tools for TFS 11 Beta
  13. 101.对称二叉树(力扣leetcode) 博主可答疑该问题
  14. Android 动态壁纸
  15. MyBatis的插件
  16. vue 开发app处理手机返回键问题
  17. UIWebView加载本地HTML文件
  18. 【FPGA 学习笔记】sof文件和jic文件的区别,程序固化(将sof文件装换位jic文件)
  19. python条形图一直长_Python MatPlotlib条形图调整宽度
  20. 小程序日期(日历)时间 选择器组件

热门文章

  1. 超声波测距系统的设计实现(基于STM32 )-软件部分
  2. 改进多目标粒子群储能选址定容matlab 采用matlab编程得到33节点系统改进多目标储能选址定容方案,采用基于信息熵的序数偏好法(TOPSIS)求解储能的最优接入方案
  3. Exchange信箱迁移(只适用于DC和exh不在同一服务器上
  4. 计算机网络(山东联盟)滨州学院,知到_信号与系统(滨州学院-山东联盟)_期末答案2020年_计算机网络基础及应用_中国大学MOOC_测试答案...
  5. 【进阶版】机器学习之特征降维、超参数调优及检验方法(04)
  6. 新闻稿发布效果的关键点,如何发软文 品牌营销推广怎么做
  7. js发送https请求问题处理总结
  8. 钢铁企业无组织废气排放管控势在必行-管控治一体化平台
  9. 一款仿电商平台的培训课程app ------ 悦乐学
  10. 编辑图片,简单的去除图片水印方法