`
xiefeifeihu
  • 浏览: 99279 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

6、示例3:Hello TriMesh

 
阅读更多

1.2 详细说明

// TriMesh is what most of what is drawn in jME actually is

TriMesh m=new TriMesh("My Mesh");

TriMesh类是jME中最最常用的类。可以看看Box和Sphere的源代码:

public class Box extends AbstractBox

public abstract class AbstractBox extends TriMesh implements Savable

public class Sphere extends TriMesh

可见Box和Sphere都是从TriMesh派生出来的。

注意:不要使用TriMesh的默认构造函数,即new TriMesh(),而要使用new TriMesh(“String name”)构造。因为默认构造函数仅仅作为内部使用。其他的也是一样,比如Node, Box, Sphere, 及其他从 com.jme.scene.Spatial派生出来类。TriMesh也是从Spatial派生出来的:

public class TriMesh extends Geometry implements Serializable

public abstract class Geometry extends Spatial implements Serializable, Savable

// Vertex positions for the mesh

Vector3f[] vertexes={

new Vector3f(0,0,0),

new Vector3f(1,0,0),

new Vector3f(0,1,0),

new Vector3f(1,1,0)

};

这定义了三角形的顶点坐标。要用三角形来构造一个矩形。

// Normal directions for each vertex position

Vector3f[] normals={

new Vector3f(0,0,1),

new Vector3f(0,0,1),

new Vector3f(0,0,1),

new Vector3f(0,0,1)

};

定义了法线(Normal是法线的意思),每个顶点的法线方向。Normals和vertexes是一一对应的:即vertexes[i]的法线是normals[i]。法线是三维图形里面最常见的概念。

每个顶点都有一个颜色:

// Color for each vertex position

ColorRGBA[] colors={

new ColorRGBA(1,0,0,1), //红色

new ColorRGBA(1,0,0,1), //红色

new ColorRGBA(0,1,0,1), //绿色

new ColorRGBA(0,1,0,1) //绿色

};

你会发现前两个顶点的位置:vertexes[0]=(0,0,0) 和 vertexes[1]=(1,0,0) 是矩形的底边,后两个:vertexes[2]=(0,1,0) 和 vertexes[3]=(1,1,0) 是矩形的顶边。看看开头的预览图,矩形从下到上由红色平滑过渡到绿色了。

下面定义纹理坐标(Texture Coordinates):

// Texture Coordinates for each position

Vector2f[] texCoords={

new Vector2f(0,0),

new Vector2f(1,0),

new Vector2f(0,1),

new Vector2f(1,1)

};

随着对3D图形的深入我们会对texture coordinates逐渐清晰起来。Vector2f和Vector3f基本一样,Vector2f是二维向量,由两个float值构造。

最后需要为My Mesh指定索引:

// The indexes of Vertex/Normal/Color/TexCoord sets. Every 3 makes a triangle.

int[] indexes={

0,1,2,1,2,3

};

TriMesh 就是Triangle mesh.(三角网格),是三角形的集合。索引数组的长度必须是3的倍数,因为三角形总是有三个顶点。上面的数组长度为6,说明有两个三角形组成。前三个为{0,1,2},意思是m对象的第一个三角形通过连线vertexes [0] → vertexes [1] → vertexes [2]画成的。Vertex [0] 的法线是normals [0], 颜色是colors [0], texture coordinate 是texCoords [0]。第二个三角形是vertexes [1] → vertexes [2] → vertexes [3]。注意下面的定义式非法的:

int[] indexes={

0,1,2,1,2,4

};

因为没有vertexes[4]。

然后我们把它组合起来:

// Feed the information to the TriMesh

m.reconstruct(BufferUtils.createFloatBuffer(vertexes), BufferUtils.createFloatBuffer(normals),

BufferUtils.createFloatBuffer(colors), TexCoords.makeNew(texCoords), BufferUtils.createIntBuffer(indexes));

这个例子中实际并没有使用到texCoords,在使用图片的时候它才有效果。下面这样写跟他是等价的:

m.reconstruct(BufferUtils.createFloatBuffer(vertexes), BufferUtils.createFloatBuffer(normals),

BufferUtils.createFloatBuffer(colors), null, BufferUtils.createIntBuffer(indexes));

甚至这样都行:

m.reconstruct(BufferUtils.createFloatBuffer(vertexes), null,

null, null, BufferUtils.createIntBuffer(indexes));

这样就是个灰色的TriMesh。

最后,为它附着一个边界:

// Create a bounds

m.setModelBound(new BoundingBox());

m.updateModelBound();

// Attach the mesh to my scene graph

rootNode.attachChild(m);

// Let us see the per vertex colors

lightState.setEnabled(false);

加上最后一行代码lightState.setEnabled(false)使我们能看到彩虹效果的方盒。

按“B”看看边界线:

clip_image004

我们去掉最后一行代码,看看效果:

clip_image006

看到了吗,是两个三角形。

下面是本例的场景图:

rootNode

“My Mesh”

分享到:
评论

相关推荐

    Python库 | trimesh-1.10.1.tar.gz

    6. **图形可视化**:`trimesh`集成了基于PyOpenGL的可视化功能,可以方便地将3D模型渲染到窗口中,同时支持交互式操作和动画效果。 7. **数学计算**:提供向量、矩阵运算,以及距离计算等数学工具,方便进行几何...

    trimesh2:C ++库和一组实用程序,用于输入,输出和3D三角形网格的基本处理

    3. **碰撞检测**:通过计算两个三角形网格之间的距离、接触点或碰撞区域,`trimesh2`可用于游戏开发中的碰撞响应或机器人路径规划。 4. **图形学算法**:库中包含了诸如法线计算、纹理坐标生成、光照处理等图形学...

    PyPI 官网下载 | trimesh-2.5.34.tar.gz

    3. **几何操作**:该库提供了一系列函数,可以执行诸如合并、分割、布尔运算、平滑、缩放、旋转、平移等操作,以对三维模型进行变形和编辑。 4. **碰撞检测**:`trimesh`实现了高效的碰撞检测算法,可用于检测两个...

    Python库 | trimesh-3.6.9-py3-none-any.whl

    6. **计算属性**:trimesh提供了计算几何属性的功能,如法线、曲率、质心、惯量张量等,这些属性对于理解和分析3D模型至关重要。 7. **算法集成**:trimesh集成了许多先进的算法,如凸包、最近点查询、特征提取等,...

    Python库 | trimesh-1.12.3.tar.gz

    3. **布尔运算**:trimesh实现了交集、并集、差集等布尔运算,可以方便地对三维模型进行组合和修改。 4. **碰撞检测**:通过高效的算法实现物体间的碰撞检测,对于游戏开发或物理模拟尤为实用。 5. **可视化**:...

    PyPI 官网下载 | trimesh-2.28.14.tar.gz

    3. **碰撞检测**:通过计算两个3D模型之间的距离或交集,trimesh可以帮助判断它们是否相交或重叠。 4. **可视化**:trimesh内置了简单的可视化功能,可以快速查看和验证3D模型。 5. **统计分析**:提供面数、体积、...

    PyPI 官网下载 | trimesh-3.2.16.tar.gz

    3. **碰撞检测**:`trimesh`具有高效的碰撞检测算法,可以判断两个或多个模型之间是否发生碰撞,这对于物理模拟和游戏开发至关重要。 4. **表面属性计算**:包括计算面积、体积、质心、惯性矩等几何属性,以及法线...

    PyPI 官网下载 | trimesh-3.6.32-py3-none-any.whl

    《PyPI官网下载:trimesh-3.6.32-py3-none-any.whl——深入了解Python几何处理库》 PyPI(Python Package Index)是Python开发者们分享和获取Python软件包的主要平台,它是Python生态系统的核心组成部分。在这个...

    Python库 | trimesh-3.7.3-py3-none-any.whl

    python库。 资源全名:trimesh-3.7.3-py3-none-any.whl

    PyPI 官网下载 | trimesh-2.35.39.tar.gz

    在解压后的"trimesh-2.35.39"目录中,通常包含源代码、文档、示例和测试用例等文件,这使得用户可以深入了解trimesh的内部工作原理,同时也可以参考示例代码快速上手。 总之,trimesh库以其强大的几何处理能力,为...

    Python库 | trimesh-3.8.13.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:trimesh-3.8.13.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | trimesh-3.9.14-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:trimesh-3.9.14-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    PyPI 官网下载 | trimesh-3.6.13-py3-none-any.whl

    资源来自pypi官网。 资源全名:trimesh-3.6.13-py3-none-any.whl

    PyPI 官网下载 | trimesh-2.37.25.tar.gz

    6. **物理模拟**:trimesh还实现了基础的刚体动力学,例如质心计算、惯性张量和碰撞响应,对于物理仿真有初步的支持。 7. **统计分析**:trimesh可以进行几何特征的统计分析,如计算曲率、法线方向、体积和表面积等...

    Python库 | trimesh-1.14.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:trimesh-1.14.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | trimesh-2.0.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:trimesh-2.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | trimesh-2.30.51.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:trimesh-2.30.51.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    trimesh2-main.zip

    3. **几何操作**:提供平移、旋转、缩放等基本变换,以及布尔运算(如合并、相交、差集),可以用于构造复杂的几何体。 4. **点云处理**:将散乱的点云数据通过表面重建算法(如 delaunay 三角剖分)转化为三角网格...

    Python库 | trimesh-2.2.11.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:trimesh-2.2.11.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics