JME3提供了Curve类,用于生成曲线网格。利用它可以很容易绘制3维空间曲线。
package com.ruanko.jme3;
import java.util.Random;
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.FastMath;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.debug.Arrow;
import com.jme3.scene.debug.Grid;
import com.jme3.scene.shape.Curve;
import com.jme3.system.AppSettings;
/**
* 3维空间曲线
* @author yanmaoyuan@ruanko.com
*/
public class ThreeDCurve extends SimpleApplication {
private Geometry curveGeom;// 曲线A
private Vector3f camLocVctr = new Vector3f(100.0f, 32.0f, 0.0f);
//
public static void main(String[] args) {
ThreeDCurve app = new ThreeDCurve();
// 初始化应用程序
AppSettings settings = new AppSettings(true);
settings.setHeight(768);
settings.setWidth(1024);
app.setSettings(settings);
app.setShowSettings(false);
app.start();
}
@Override
public void simpleInitApp() {
this.setDisplayFps(false);
this.setDisplayStatView(false);
// 背景色
viewPort.setBackgroundColor(ColorRGBA.White);
// 摄像机初始位置
cam.setLocation(camLocVctr);
cam.lookAt(Vector3f.ZERO, cam.getUp());
flyCam.setMoveSpeed(100.0f);
// 显示3维坐标系
showNodeAxes(250);
// 生成坐标系网格
Geometry g = new Geometry("wireFrameDebugGrid1", new Grid(100, 100, 5.0f));// 5WU
Material m = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
m.getAdditionalRenderState().setWireframe(true);
m.setColor("Color", ColorRGBA.LightGray);
g.setMaterial(m);
g.center().move(Vector3f.ZERO);// 中心坐标
rootNode.attachChild(g);
// 生成一个有100个顶点的曲线
Vector3f[] points = new Vector3f[100];
for (float i = 0; i < 100; i++) {
// 这里利用三角函数生成顶点。
// 随便写的,可以改掉。
points[(int) i] = new Vector3f(i, i + 10
* FastMath.sin(i / 10 * FastMath.PI), i + 10
* FastMath.sin(i / 25 * FastMath.PI));
}
Curve curve = new Curve(points, 1);// 曲线A
curveGeom = new Geometry("曲线A", curve);
// 设置材质
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Red);
curveGeom.setMaterial(mat);
rootNode.attachChild(curveGeom);
}
@Override
public void simpleUpdate(float tpf) {
/////// 下面的代码会重新生成曲线A的所有顶点 ///////////
Random rand = new Random();
Vector3f[] points = new Vector3f[100];
float base = rand.nextFloat() * 10;
for (int i = 0; i < 100; i++) {
// 这里利用三角函数生成顶点。
// 随便写的,可以改掉。
float x = i + base;
float y = i + rand.nextFloat() * 10
* FastMath.sin(i / 10 * FastMath.PI);
float z = i + rand.nextFloat() * 10 + rand.nextFloat() * 10
* FastMath.sin(i / 25 * FastMath.PI);
points[i] = new Vector3f(x, y, z);
}
///////////////////////////////////
// 刷新曲线A
Curve curve = new Curve(points, 1);// 曲线A
curveGeom.setMesh(curve);
curveGeom.updateModelBound();
}
public void showNodeAxes(float axisLen) {
//
Vector3f v = new Vector3f(axisLen, 0, 0);
Arrow a = new Arrow(v);
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Red);
Geometry geom = new Geometry(rootNode.getName() + "XAxis", a);
geom.setMaterial(mat);
rootNode.attachChild(geom);
//
v = new Vector3f(0, axisLen, 0);
a = new Arrow(v);
mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Green);
geom = new Geometry(rootNode.getName() + "YAxis", a);
geom.setMaterial(mat);
rootNode.attachChild(geom);
//
v = new Vector3f(0, 0, axisLen);
a = new Arrow(v);
mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Blue);
geom = new Geometry(rootNode.getName() + "ZAxis", a);
geom.setMaterial(mat);
rootNode.attachChild(geom);
}
}
效果
- 大小: 84.6 KB
分享到:
相关推荐
使用qwtPlot3D实现三维曲线、轨迹绘制的例子,使用qt基于c++开发,可以直接运行,无需额外配置,里面包含了所有需要的库文件和头文件,弄了好久才弄出来的,我没有在网上找到其他的类似的代码,在一些博主和热心人的...
三维曲线图在三维空间显示曲线而不是曲面,在前面板窗口新建的三维曲线图外观与三维曲面图相同,如图1所示。 三维曲线图在程序框图中包括控件3D Curve和3D Curve.vi。 3D graph:输入ActiveX容器端子,表示3D...
基于地铁线路的平面,纵断面使用Rhino工具生成线路的三维空间曲线
针对已知两端点处位矢和切矢的空间曲线定弧长插值问题,构造了C1连续的三次PH曲线。通过四元数运算描述空间曲线切矢的变化,将曲线分成两段进行插值。利用PH曲线可以精确计算弧长的优势,实现了给定曲线弧长,简单...
二维数据或者图片堆叠在三维空间的表示,图片堆叠方便查看 类似origin里面的瀑布图的方法,只是这是在matlab里面实现。 matlab多张图片同时在三维空间中显示,沿着某一个坐标轴 matlab在一个坐标系画不同三维图综合...
以空间螺旋线为例,展示MFC中使用TeeChart绘制三维曲线的程序。包含https://blog.csdn.net/carlos_soler/article/details/78614054#7930033中的源程序
三维B样条曲线的matlab实现,代码已通过调试,可直接改变控制点,绘制所需的B样条曲线
采用matlab实现给定一组数据点,反求控制顶点和节点矢量,计算出通过这些数据点的nurbs曲线,实现nurbs曲线插值。给定的数据点可以是平面顶点,也可以是空间3维顶点
对于给定的级别,该程序生成一个空间填充曲线作为 NX 3 矩阵,可以通过 plot3 绘制为实际图形。
代码是基于C++的三次B样条曲线拟合代码,包含插值拟合,近似拟合就不放代码了,较简单,我的博客中有相关论文链接。http://blog.csdn.net/liumangmao1314/article/details/54588155
第3章 一维代数函数域 3.1有限可分扩张的范和迹 3.2域的超越扩张 3.3离散赋值环和Dedekind整区 3.4射影曲线与一维代数函数域 3.5曲线的正规化 3.6紧Riemann面的亚纯函数域 第4章 RiemannRoch定理 4.1除子 4.2adé...
针对空间曲面上的激光三维(3D)切割轨迹,提出了一种高效、快速的刀位点离散方法。根据空间轨迹曲线起始点的曲率,按照精度要求可以确定所选曲率圆的初始角度,从而根据几何知识即可确定初始步长。以初始步长为半径...
P0、P1、P2、P3四个点在平面或在三维空间中定义了三次方贝兹曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1或P2;这两个点只是用来充当控制点。P0和P1之间的间距,决定了曲线在转而趋进P3之前,走向...
三维曲线图在三维空间显示曲线而不是曲面,在前面板窗口新建的三维曲线图外观与三维曲面图相同,如图1所示。 三维曲线图在程序框图中包括控件3D Curve和3D Curve.vi。 3D graph:输入ActiveX容器端子,表示3D...
应用二维曲线绘制中光滑效果比较好的张力样条函数方法研究了3D-GIS中空间曲线的绘制问题。在理论对比分析的基础上,选用某山区一段公路上的一组实测数据进行了模拟计算。结果表明,张力样条函数从理论上解决了取得...
【蚁群算法】 改进蚁群算法 Dijkstra算法 遗传算法 人工势场法实现二维 三维空间路径规划 本程序为蚁群算法+Dijkstra算法+MAKLINK图理论实现的二维空间路径规划 算法实现: 1)基于MAKLINK图理论生成地图,并对可行...
matlab读取txt一系列离散点,然后利用scatter3,mesh拟合出三维模型
【蚁群算法】/改进蚁群算法/Dijkstra算法/遗传算法/人工势场法实现二维/三维空间路径规划 本程序为蚁群算法+Dijkstra算法+MAKLINK图理论实现的二维空间路径规划 算法实现: 1)基于MAKLINK图理论生成地图,并对可行...
返回 3 向量和 2 缩放器定义的空间曲线的不变量通过向量 x、y 和 z。 如果省略 z 那么曲线只是一个二维的, 但方程仍然有效。 _ r' T = ----(切线) |r'| _T' N = ----(正常) |T'| _ _ _ B = T x N(Binormal...