Unity渲染3D模型的原理

.OBJ文件介绍

obj文件是3D模型文件格式。由Alias|Wavefront公司为3D建模和动画软件"Advanced Visualizer"开发的一种标准,适合用于3D软件模型之间的互导,也可以通过Maya读写。

顶点数据(Vertex data)

 v		(几何体顶点 Geometric vertices)
 vt	(贴图坐标点 Texture vertices)
 vn	(顶点法线	 Vertex normals)
 vp	(参数空格顶底	Parameter space vertices)

自由形态曲线(Free-form curve)/表面属性(surface attributes)

deg (度		Degree)
bmat	(基础矩阵	Basis matrix)
step		(步尺寸		Step size)
cstype		(曲线或表面类型	Curve or surface type)

元素(Elements)

p		(点	Point)
l		(线	Line)
f		(面	face)
curv	(曲线	Curve)
curv2	(2D曲线	2D curve)
surf	(表面	Surface)

自由形态曲线(Free-form curve)/表面主题陈述(surface body statement)

parm	(参数值		Parameter	values)
trim			(外部修剪循环		Outer	trimming	loop)
hole			(内部整修循环		Inner	trimming 	loop)
scrv			(特殊曲线	Special	curve)
sp			(特殊的点	Special	point)
end			(结束的点	End point)

自由形态表面的连接(Connectivity between free-form surfaces)

con (连接 Connect)

成组(Grouping)

g		(组名称 Group name)
s			(光滑组	Smoothing group)
mg		(合并组	Merging	group)
o			(对象名称	Object name)

显示(Display)/渲染属性(render attributes)

bevel		(导角插值	Bevel	interpolation)
c_interp	(颜色插值	Color 	interpolation)
d_interp	(溶解插值	Dissolve	interpolation)
lod			(细节层次	Level of	detail)
usemtl		(材质名称	Material name)
mtlib		(材质库		Material	library)
	指向.mtl的独立文件夹中
shadow_obj	(投射阴影	Shadow	casting)
trace_obj	(光线跟踪	Ray tracing)
ctech	(曲线近似技术	Curve approximation	technique)
stech	(表面近似技术	Surface	approximation	technique)

unity组件介绍

在一个unity的3d模型当中,往往存在着一些必要的组件
  • Transform
  • MeshFilter
  • MeshRenderer
  • Material

Transform用来宣告模型的位置角度以及缩放,这里我们就不深究,那么下面的三个组件到底是起什么作用的呢?

MeshFilter

它通过读取mesh资源,通过MeshRender渲染到屏幕上
mesh=====>网格
在mesh中,包括的资源也就是网格上的一些东西,和.obj文件的内容相似

具体内容可以查看源码

名称类型介绍
verticesVector3[]顶点数据数组
triangesint[]三角形顶点索引数组
normalsVector3[]法线向量数组
uvVector2[]纹理坐标数组

当拿到这样一些资源赋值给Mesh对象后,我们就获得了一个可以使用的网格对象。

Mesh mesh = new Mesh();
mesh.vertices = new Vector3[];
...类似的代码


然后就可以选择使用MeshFilter 来进行渲染,不论是动态添加或者是本身组件上就拥有MeshFilter,这个组件是一定要挂载到我们应用的对象本身上去才会起作用

//这里采用动态挂载组件

MeshFilter meshFilter = gameObject.AddCompoent<MeshFilter>();
mashFilter.mesh = mesh;

MeshRenderer Material

挂载完成Mesh后,你的场景中的物体就有了一个基本的形状,但是它还没有皮肤,这个时候就轮到MeshRenderer和Material来起作用了

给模型添加材质球
MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>();

meshRenderer.material = //你的材质球

参考链接

参考链接
https://blog.csdn.net/hyy_sui_yuan/article/details/104885628
https://baike.baidu.com/item/obj文件/3574019?fr=aladdin
https://blog.csdn.net/zphshiwo/article/details/81368344
https://blog.csdn.net/gaofei12300/article/details/78595605

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值