JavaFx 3D文件导入
来源:互联网 发布:视频剪辑软件哪个好 编辑:程序博客网 时间:2024/05/19 23:58
3d文件转换工具Jar下载地址 :jfx3dimporter
package com.tdmodel;import java.io.IOException;import javafx.application.Application;import javafx.event.EventHandler;import javafx.scene.Group;import javafx.scene.PerspectiveCamera;import javafx.scene.Scene;import javafx.scene.SceneAntialiasing;import javafx.scene.SubScene;import javafx.scene.input.MouseEvent;import javafx.scene.input.ScrollEvent;import javafx.scene.layout.BorderPane;import javafx.scene.transform.Rotate;import javafx.scene.transform.Translate;import javafx.stage.Stage;/** * * @author zhuqing */public class Import3dModel extends Application { private final Rotate cameraXRotate = new Rotate(-20, 0, 0, 0, Rotate.X_AXIS); private final Rotate cameraYRotate = new Rotate(-20, 0, 0, 0, Rotate.Y_AXIS); private final Translate cameraPosition = new Translate(0, 0, -20); private double scaleFactor = 1; private double dragStartX, dragStartY, dragStartRotateX, dragStartRotateY; @Override public void start(Stage primaryStage) throws IOException { BorderPane borderPane = new BorderPane(); borderPane.setCenter(load3DModel()); Scene scene = new Scene(borderPane, 800, 600); initMouseDrag(scene); primaryStage.setTitle("Hello World!"); primaryStage.setScene(scene); primaryStage.show(); } /** * 导入3d模型 * * @return * @throws IOException */ private Group load3DModel() throws IOException { /** * 创建摄像头 */ PerspectiveCamera camera = new PerspectiveCamera(true); camera.getTransforms().addAll(cameraXRotate, cameraYRotate, cameraPosition); /** * 导入3d模型 */ Group groupRoot = Importer3D.load("C:\\Users\\zhuqing.BJGOODWILL\\Documents\\NetBeansProjects\\3dModel\\src\\resources\\hands.3DS"); groupRoot.getChildren().add(camera); /** * 创建SubScene */ SubScene subScene = new SubScene(groupRoot, 800, 600, true, SceneAntialiasing.BALANCED); subScene.setCamera(camera); Group group = new Group(); group.getChildren().add(subScene); return group; } private void initMouseDrag(Scene scene) { /** * 鼠标事件 */ scene.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { if (event.getEventType() == MouseEvent.MOUSE_PRESSED) { dragStartX = event.getSceneX(); dragStartY = event.getSceneY(); dragStartRotateX = cameraXRotate.getAngle(); dragStartRotateY = cameraYRotate.getAngle(); } else if (event.getEventType() == MouseEvent.MOUSE_DRAGGED) { double xDelta = event.getSceneX() - dragStartX; double yDelta = event.getSceneY() - dragStartY; cameraXRotate.setAngle(dragStartRotateX - (yDelta * 0.3)); cameraYRotate.setAngle(dragStartRotateY + (xDelta * 0.3)); } } }); /** * 滚轮滚动数据 */ scene.setOnScroll(new EventHandler<ScrollEvent>() { @Override public void handle(ScrollEvent event) { double z = cameraPosition.getZ() - (event.getDeltaY() * 0.1 * scaleFactor); z = Math.min(z, 0); cameraPosition.setZ(z); } }); } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); }}
package com.tdmodel;import com.interactivemesh.jfx.importer.ModelImporter;import com.interactivemesh.jfx.importer.stl.StlMeshImporter;import com.interactivemesh.jfx.importer.tds.TdsModelImporter;import com.interactivemesh.jfx.importer.x3d.X3dModelImporter;import javafx.scene.Group;import javafx.scene.Node;import javafx.scene.paint.Color;import javafx.scene.paint.PhongMaterial;import javafx.scene.shape.MeshView;import javafx.scene.shape.TriangleMesh;import java.io.IOException;/** *3d模型导入工具 */public final class Importer3D { /** * 导入3d模型文件 * @param fileUrl */ public static Group load(final String fileUrl) throws IOException { final int dot = fileUrl.lastIndexOf('.'); if (dot <= 0) { throw new IOException("Unknown 3D file format, url missing extension [" + fileUrl + "]"); } final String extension = fileUrl.substring(dot + 1, fileUrl.length()).toLowerCase(); switch (extension) { case "3ds": ModelImporter tdsImporter = new TdsModelImporter(); tdsImporter.read(fileUrl); final Node[] tdsMesh = (Node[]) tdsImporter.getImport(); tdsImporter.getNamedMaterials(); return new Group(tdsMesh); case "stl": StlMeshImporter stlImporter = new StlMeshImporter(); stlImporter.read(fileUrl); TriangleMesh cylinderHeadMesh = stlImporter.getImport(); stlImporter.close(); MeshView cylinderHeadMeshView = new MeshView(); cylinderHeadMeshView.setMaterial(new PhongMaterial(Color.GRAY)); cylinderHeadMeshView.setMesh(cylinderHeadMesh); stlImporter.close(); return new Group(cylinderHeadMeshView); case "x3d": X3dModelImporter x3dModel = new X3dModelImporter(); x3dModel.read(fileUrl); final Node[] x3dMesh = x3dModel.getImport(); x3dModel.close(); return new Group(x3dMesh); default: throw new IOException("Unsupported 3D file format [" + extension + "]"); } }}
0 0
- JavaFx 3D文件导入
- JavaFX 简单3D示例
- JavaFX 简单3D示例
- Unity 3D 文件导入出错
- 3D模型文件的导入导出
- JavaFX 3D部分介绍(3) Lights
- JavaFX 3D部分介绍(3) Lights
- JavaFX 3D部分介绍(2) Camera
- JavaFX 3D部分介绍(4) Materials
- javaFX初探(3D图形)
- javaFX初探(3D图形概述)
- javaFX图形——几何3D
- JavaFX 3D部分介绍(4) Materials
- JavaFX 3D部分介绍(2) Camera
- JavaFX 3D部分介绍(1) 3D Shape
- JavaFX 3D部分介绍(1) 3D Shape
- Genesis-3D 入门教程—4.FBX文件的导入
- javaFX之3D图形——Camera
- 数组、字符串及字符串相关函数
- IDEA基础
- 这个英语哟
- CCF NOI1075 F函数
- Ajax,Jquery请求WebService
- JavaFx 3D文件导入
- 4.剑指offer_用两个栈模拟一个队列
- 画圆
- B1011. A+B和C (15')
- 拓扑排序的简单实现
- AngularJS指令
- 链表1:从尾到头打印链表
- 《深入理解Java虚拟机》学习笔记
- buntu系统下python2.7和python3.5版本切换,更改系统和eclipse中python默认版本