♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥
目录:
1.物体的多边形表示
2.多边形表示方法——OBJ格式
3.三角形网格表示
4.多边形表示的优势与不足
♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥
1.物体的多边形表示
物体的多边形表示就是利用大量的平面片(如三角形、四边形等)来表示物体。
2.多边形表示——OBJ格式
基础知识
(1)顶点坐标系(x,y,z)
存储面片的顶点。
(2)纹理坐标系(u,v)
控制纹理映射时纹理在表面上的位置。例如物体某个部位的颜色不同。
(3)法向表
控制物体绘制时的着色光滑程度。
如果顶点法向作为面片法向,则得到的图形是棱角分明的。
如果顶点法向是周围面片法向的平均,则得到的图形是光滑的。
(4)面表
由指向顶点、纹理坐标以及法向的指针组成。
OBJ格式
OBJ是一种3D模型文件,主要支持多边形模型,并且支持三个点以上的面。
OBJ文件由一行行文本组成,注释行以“#”开头。
每行(除空行)以关键字开头,关键字说明数据的类型。多行使用“\”连接。
关键字有:
顶点数据(Vertex data):
v 几何体顶点 (Geometric vertices)
vt 贴图坐标点 (Texture vertices)
vn 顶点法线 (Vertex normals)
vp 参数空格顶点 (Parameter space vertices)
deg 度 (Degree)
bmat 基础矩阵 (Basis matrix)
step 步尺寸 (Step size)
cstype 曲线或表面类型 (Curve or surface type)
p 点 (Point)
l 线 (Line)
f 面 (Face)
curv 曲线 (Curve)
curv2 2D曲线 (2D curve)
surf 表面 (Surface)
自由形态曲线(Free-form curve)/表面主体陈述(surface body statements):
parm 参数值 (Parameter values )
trim 外部修剪循环 (Outer trimming loop)
hole 内部整修循环 (Inner trimming loop)
scrv 特殊曲线 (Special curve)
sp 特殊的点 (Special point)
end 结束陈述 (End statement)
con 连接 (Connect)
成组(Grouping):
g 组名称 (Group name)
s 光滑组 (Smoothing group)
mg 合并组 (Merging group)
o 对象名称 (Object name)
bevel 导角插值 (Bevel interpolation)
c_interp 颜色插值 (Color interpolation)
d_interp 溶解插值 (Dissolve interpolation)
lod 细节层次 (Level of detail)
usemtl 材质名称 (Material name)
mtllib 材质库 (Material library)
shadow_obj 投射阴影 (Shadow casting)
trace_obj 光线跟踪 (Ray tracing)
ctech 曲线近似
stech 表面近似技术
3.三角形网格表示
(1)边界表示
边界表示(Boundary Representation)也称为BRep表示。
物体可以表示为面的并集,面也可以有曲面加上边界表示,边界是边的并集,边又由点组成。
即:
顶点+边+面=拓扑信息
顶点位置+边形状+曲面参数=几何信息
(2)边界表示的数据结构
边界表示的数据结构有很多种,主要有半边数据结构、翼边数据结构、辐射变数据结构等。
a.半边数据结构
可定向的二维流形及其子集。
每条边被记为两条半边。
记录每条半边的:
- 起始定点的指针
- 邻接面的指针(如果为边界,指针为NULL)
- 下一条半边
- 相邻的半边
- 前一条半边(可选)
面:边界上的一条半边
顶点:坐标值+指向以此顶点为起始端点的半边
算法数据结构为:
struct HE_edge
{
HE_vert* vert; // vertex at the end of the half-edge
HE_edge* pair; // oppositely oriented adjacent half-edge
HE_face* face; // face the half-edge borders
HE_edge* next; // next half-edge around the face
};
b.半边数据结构表示实例
计算顶点的坐标和以该顶点起始的半边:
|
顶点 |
坐标 |
以此为起点的半边 |
|
v1 |
(x1, y1, z1) |
e2,1 |
|
v2 |
(x2, y2, z2) |
e1,1 |
|
v3 |
(x3, y3, z3) |
e4,1 |
|
v4 |
(x4, y4, z4) |
e7,1 |
|
v5 |
(x5, y5, z5) |
e5,1 |
统计面和半边:
|
面 |
半边 |
|
f1 |
e1,1 |
|
f2 |
e3,2 |
|
f3 |
e4,2 |
则:
|
半边 |
起点 |
相邻半边 |
面 |
下条半边 |
前条半边 |
|
e3,1 |
v3 |
e3,2 |
f1 |
e1,1 |
e2,1 |
|
e3,2 |
v2 |
e3,1 |
f2 |
e4,1 |
e5,1 |
|
e4,1 |
v3 |
e4,2 |
f2 |
e5,1 |
e3,2 |
|
e4,2 |
v5 |
e4,1 |
f3 |
e6,1 |
e7,1 |
c.其他关于半边数据结构
优势:查询时间和操作时间均为O(1)
缺点:信息冗余
4.多边形表示的优势与不足
优势:
- 表示简单
- 可以表示具有任意拓扑的物体
- 可以表示具有丰富细节的物体
- 大部分图形硬件支持多边形物体的加速绘制
不足:
- 逼近表示,难以满足放大要求
- 难以用传统方法修改物体外形
- 缺乏解析表达式,几何属性计算困难
- 数据量庞大,数据冗余
Click 下一篇文章:6.物体的几何表示——参数曲面+参数曲线
♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥
广告时间:
本宝宝开通了一个公众号,记录日常的深度学习和强化学习笔记。希望大家可以共同进步,嘻嘻嘻!爱你呦!