public class Pos extends Applet {
private static final long serialVersionUID = 1L;
float knot[] = { 0.0f, 1.0f };
Color3f color = new Color3f(0.0f, 0.0f, 1.0f);
Color3f c[] = { color, color };
private BranchGroup createSceneGraph() {
BranchGroup objRoot = new BranchGroup();
BoundingSphere bound = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 50.);
Color3f color = new Color3f(0f, 0f, 255f);
Point3f pos[] = {
new Point3f(-1f, 0.4f, 0.0f),
new Point3f(1f, 0.4f, 0.0f),
};
Point3f pos1[] = {
new Point3f(-1f, -0.4f, 0.0f),
new Point3f(1f, -0.4f, 0.0f),
};
Point3f pos2[] = {
new Point3f(-3f, 0.4f, 0.0f),
new Point3f(-1.f, 0.4f, 0.0f),
};
Point3f pos3[] = {
new Point3f(-3f, -0.4f, 0.0f),
new Point3f(-1.f, -0.4f, 0.0f),
};
Point3f pos4[] = {
new Point3f(1f, 0.4f, 0.0f),
new Point3f(3f, 0.4f, 0.0f),
};
Point3f pos5[] = {
new Point3f(1f, -0.4f, 0.0f),
new Point3f(3f, -0.4f, 0.0f),
};
draw(objRoot, bound, 0d, 0d, 170d, color, pos, 2000, 0);
draw(objRoot, bound, 0d, 0d, 170d, color, pos1, 2000, 0);
draw(objRoot, bound, 0d, 0d, 170d, color, pos2, 2000, 0);
draw(objRoot, bound, 0d, 0d, 170d, color, pos3, 2000, 0);
draw(objRoot, bound, 0d, 0d, 170d, color, pos4, 2000, 0);
draw(objRoot, bound, 0d, 0d, 170d, color, pos5, 2000, 0);
// draw(objRoot, bound1, Math.PI/3, Math.PI/3, Math.PI/3, color, 1.f, 3.f, rotate, rotate2, 2000, 0);
Color3f bgColor = new Color3f(1.0f, 1.0f, 1.0f);
Background bg = new Background(bgColor);
bg.setApplicationBounds(bound);
objRoot.addChild(bg);
return objRoot;
}
public Pos() {
setLayout(new BorderLayout());
Canvas3D c = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
add("Center", c);
Viewer viewer = new Viewer(c);
Vector3d viewpoint = new Vector3d(0.0, 0.0, 10.0);
Transform3D t = new Transform3D();
t.set(viewpoint);
ViewingPlatform v = new ViewingPlatform();
v.getViewPlatformTransform().setTransform(t);
BranchGroup scene = createSceneGraph();
SimpleUniverse u = new SimpleUniverse(v, viewer);
u.getViewingPlatform();
u.addBranchGraph(scene);
}
/**
*
* @param objRoot
* @param bound
* @param directX 箭头方向
* @param directY
* @param directZ
* @param color3f 箭头颜色
* @param pos 运动轨迹
* @param forward 正向时间
* @param reverse 逆向时间
*/
public void draw(BranchGroup objRoot, BoundingSphere bound, Double directX, Double directY, Double directZ,
Color3f color3f, Point3f pos[],
long forward, long reverse) {
Transform3D rotate = new Transform3D();
rotate.rotY(Math.toRadians(directY));
rotate.rotX(Math.toRadians(directX));
rotate.rotZ(Math.toRadians(directZ));
rotate.setScale(1.0f);
rotate.setTranslation(new Vector3f(0.0f, 0.0f, 0.0f));
//渲染外围动画路径
Transform3D tr = new Transform3D();
// tr.rotX(Math.PI/4);
// tr.rotZ(Math.PI/4);
tr.rotX((90+directX)*Math.PI/180);
tr.rotY((90+directY)*Math.PI/180);
tr.rotZ((90+directZ)*Math.PI/180);
tr.setTranslation(new Vector3f(10f, 5.f, 5.0f));
TransformGroup group = new TransformGroup(tr);
group.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
//渲染箭头
Appearance app = new Appearance();
Material material = new Material();
//颜色
material.setEmissiveColor(color3f);
app.setMaterial(material);
TransformGroup transformGroup = new TransformGroup();
transformGroup.setTransform(rotate);
TransformGroup transformGroup1 = new TransformGroup();
transformGroup1.addChild(new Cone(0.1f, 0.4f, 3, app));
Transform3D rotate2 = new Transform3D();
rotate2.setScale(1.0f);
rotate2.setTranslation(new Vector3f(0.0f, -0.2f, 0.0f));
TransformGroup transformGroup2 = new TransformGroup();
transformGroup2.setTransform(rotate2);
transformGroup2.addChild(new Cylinder(0.01f, 0.6f, 3, app));
transformGroup.addChild(transformGroup1);
transformGroup.addChild(transformGroup2);
group.addChild(transformGroup);
Alpha xtranAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE | Alpha.DECREASING_ENABLE, 100, 100, forward, 100, 200, reverse, 100, 0);
PositionPathInterpolator tran = new PositionPathInterpolator(xtranAlpha, group, tr, knot, pos);
tran.setSchedulingBounds(bound);
objRoot.addChild(group);
group.addChild(tran);
}
public static void main(String[] args) {
new MainFrame(new Pos(), 400, 400);
}
}
用锥形和圆柱体 组成的箭头。
分享到:
相关推荐
JFrame frame = new JFrame("Java3D 键盘控制"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Canvas3D canvas = new Canvas3D(SimpleUniverse.getConfiguration()); JPanel panel = new JPanel()...
Java 3D API 是一种用于创建三维图形应用程序的Java库,它允许开发者构建复杂的3D场景并进行交互式渲染。本章主要介绍了如何开始使用Java 3D API进行编程。 在Java 3D中,一个虚拟宇宙是通过场景图构建的,场景图由...
一个用 Java/LWJGL3/OpenGL 4.1 编写的简单 3D 拉力赛游戏。 编译运行 在 OS X 上,您可以在 src/ 中运行 ./compile.sh,在 bin/ 中运行 ./run.sh 游戏玩法 左右箭头转动,上/下加速和减速。 目标是通过随机放置的...
12. **WebGL**:用于在浏览器中创建3D图形,JavaScript结合Three.js等库可以实现震撼的3D特效。 13. **前端框架和库**:如React、Vue、Angular等,它们提供了丰富的组件和生命周期方法,便于构建复杂特效。 14. **...
JavaFX是一个更现代的UI框架,提供更丰富的2D和3D图形功能。如果游戏使用JavaFX,那么它可能会利用Scene和Stage来构建游戏窗口,Node类来创建游戏元素,而Transition类可以用于创建平滑的动画效果。 游戏的核心逻辑...
随着技术的发展,ES6(ECMAScript 2015)及以后的新特性,如箭头函数、模板字符串、let和const、解构赋值、模块系统(import/export)、类和继承等,也是现代JavaScript开发的重要组成部分。同时,学习如何使用调试...
2. **画箭头**:绘制箭头形状,常用于表示方向或流程。 3. **画直线、曲线**:提供直线和曲线的绘制功能,用户可以自由移动和调整线条。 4. **画几何形状**:包括圆形、椭圆、矩形和多边形等基本图形的绘制。 5. **...
JTennis-Java网球游戏,具有非常简单的3D引擎。 由Jacobo Rouces 。 这是我在编程101课程中学习时用Java编写的网球游戏。 它非常简单,但是玩起来或进行调整都很有趣,因此几年后,我决定根据GPL v3许可发布它。 ...
执行ASampler.class以查看其功能摘要@作者威廉·爱迪生@version 1.01 2015年8月使用JavaFX 8开发了Draw3D,以支持同事的开发线性代数课程,为学生/教师提供基本的学习方法显示和处理涉及向量的三维数据, 线,箭头,...
JavaFX也可以用来创建更复杂的2D和3D图形游戏。 在实现这个游戏时,首先需要设计游戏的基本结构,包括游戏规则、玩家控制、得分系统以及游戏结束条件等。这些可以通过定义类和对象来实现,比如创建一个`Player`类来...
- 箭头符号 (`->`):将参数列表与表达式或语句块分开。 - 表达式或语句块:这是Lambda表达式的核心,代表了接口方法的实现。 **示例代码**: ```java // 使用Lambda表达式创建线程 new Thread(() -> System.out....
JavaFX是Java的一个扩展,用于创建丰富的用户界面,包括桌面应用程序,其特点是具有强大的2D和3D图形功能,以及易于使用的事件处理和动画系统。 首先,我们来看JavaFX的基础知识。JavaFX是一个开放源代码的GUI库,...
ES6引入的模板字符串、箭头函数、类和模块导入导出等特性,也极大地提升了开发效率。 现代JavaScript API还包括Web APIs,如Web Storage(localStorage和sessionStorage)用于本地数据存储,Web Workers实现后台...
4. **2D图形渲染**:在Java和OpenGL中创建2D游戏,涉及到坐标系统、精灵(Sprite)的使用、以及如何将2D图像映射到3D空间以进行渲染。 5. **用户输入处理**:通过LWJGL的事件监听机制,实现对箭头键的响应,控制...
一种用 JMonkey Engine 3 (Java) 编写的游戏,其中玩家绘制在游戏中创建为 3d 对象的形状,并使用这些对象在关卡中前进。 游戏说明:按“g”调出绘图屏幕。 单击屏幕上的点,一次一个,并确保形状为多边形且不会与...
JFreeChart支持更复杂的特性,如3D图表、组合图(组合多个图表类型)、时间序列数据、甘特图等。它还提供了交互式功能,如工具提示和缩放。 7. **实战例子** 在JFreeChart中文教程中,你将找到一系列实例代码,...