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”看看边界线:
我们去掉最后一行代码,看看效果:
看到了吗,是两个三角形。
下面是本例的场景图:
分享到:
相关推荐
6. **图形可视化**:`trimesh`集成了基于PyOpenGL的可视化功能,可以方便地将3D模型渲染到窗口中,同时支持交互式操作和动画效果。 7. **数学计算**:提供向量、矩阵运算,以及距离计算等数学工具,方便进行几何...
3. **碰撞检测**:通过计算两个三角形网格之间的距离、接触点或碰撞区域,`trimesh2`可用于游戏开发中的碰撞响应或机器人路径规划。 4. **图形学算法**:库中包含了诸如法线计算、纹理坐标生成、光照处理等图形学...
3. **几何操作**:该库提供了一系列函数,可以执行诸如合并、分割、布尔运算、平滑、缩放、旋转、平移等操作,以对三维模型进行变形和编辑。 4. **碰撞检测**:`trimesh`实现了高效的碰撞检测算法,可用于检测两个...
6. **计算属性**:trimesh提供了计算几何属性的功能,如法线、曲率、质心、惯量张量等,这些属性对于理解和分析3D模型至关重要。 7. **算法集成**:trimesh集成了许多先进的算法,如凸包、最近点查询、特征提取等,...
3. **布尔运算**:trimesh实现了交集、并集、差集等布尔运算,可以方便地对三维模型进行组合和修改。 4. **碰撞检测**:通过高效的算法实现物体间的碰撞检测,对于游戏开发或物理模拟尤为实用。 5. **可视化**:...
3. **碰撞检测**:通过计算两个3D模型之间的距离或交集,trimesh可以帮助判断它们是否相交或重叠。 4. **可视化**:trimesh内置了简单的可视化功能,可以快速查看和验证3D模型。 5. **统计分析**:提供面数、体积、...
3. **碰撞检测**:`trimesh`具有高效的碰撞检测算法,可以判断两个或多个模型之间是否发生碰撞,这对于物理模拟和游戏开发至关重要。 4. **表面属性计算**:包括计算面积、体积、质心、惯性矩等几何属性,以及法线...
《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
在解压后的"trimesh-2.35.39"目录中,通常包含源代码、文档、示例和测试用例等文件,这使得用户可以深入了解trimesh的内部工作原理,同时也可以参考示例代码快速上手。 总之,trimesh库以其强大的几何处理能力,为...
资源分类:Python库 所属语言:Python 资源全名:trimesh-3.8.13.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类: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
6. **物理模拟**:trimesh还实现了基础的刚体动力学,例如质心计算、惯性张量和碰撞响应,对于物理仿真有初步的支持。 7. **统计分析**:trimesh可以进行几何特征的统计分析,如计算曲率、法线方向、体积和表面积等...
资源分类:Python库 所属语言:Python 资源全名:trimesh-1.14.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 资源全名:trimesh-2.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 资源全名:trimesh-2.30.51.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
3. **几何操作**:提供平移、旋转、缩放等基本变换,以及布尔运算(如合并、相交、差集),可以用于构造复杂的几何体。 4. **点云处理**:将散乱的点云数据通过表面重建算法(如 delaunay 三角剖分)转化为三角网格...
资源分类:Python库 所属语言:Python 资源全名:trimesh-2.2.11.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059