日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OBJ 文件格式

發(fā)布時(shí)間:2023/12/10 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OBJ 文件格式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

OBJ文件是一種標(biāo)準(zhǔn)的3D模型文件格式,很適合用于3D軟件模型之間的互導(dǎo)。比如在3dsMax或LightWave中建了一個(gè)模型,想把它調(diào)到Maya里面渲染或動(dòng)畫,導(dǎo)出OBJ文件就是一種很好的選擇。目前幾乎所有知名的3D軟件都支持OBJ文件的讀寫,不過(guò)很多軟件需要通過(guò)插件才能做到這一點(diǎn)。

?

OBJ文件特點(diǎn)

(1)OBJ是一種3D模型文件,因此不包含動(dòng)畫、材質(zhì)特性、貼圖路徑、動(dòng)力學(xué)、粒子等信息。

(2)OBJ文件主要支持多邊形(Polygons)模型。

雖然OBJ文件也支持曲線(Curves)、表面(Surfaces)、點(diǎn)組材質(zhì)(Point Group Materials),但Maya導(dǎo)出的OBJ文件并不包括這些信息。

(3)OBJ文件支持三個(gè)點(diǎn)以上的面,這一點(diǎn)很有用。?    

(4)OBJ文件支持法線和貼圖坐標(biāo)。?在其它軟件中調(diào)整好貼圖后,貼圖坐標(biāo)信息可以存入OBJ文件中,這樣文件導(dǎo)入Maya后只需指定一下貼圖文件路徑就行了,不需要再調(diào)整貼圖坐標(biāo)了。

(5)OBJ文件不支持有孔的多邊形面。

(6)OBJ文件不包含面的顏色定義信息,不過(guò)可以引用材質(zhì)庫(kù),材質(zhì)庫(kù)信息儲(chǔ)存在一個(gè)后綴是".mtl"的獨(dú)立文件中。關(guān)鍵字"mtllib"即材質(zhì)庫(kù)的意思。

?

OBJ文件的前綴

OBJ文件以純文本的形式存儲(chǔ)了模型的頂點(diǎn)、法線和紋理坐標(biāo)和材質(zhì)使用信息。

在OBJ文件中,每行的格式如下:前綴??參數(shù)1?參數(shù)2?參數(shù)3 ...

(前綴標(biāo)識(shí)了這一行所存儲(chǔ)的信息類型。參數(shù)則是具體的數(shù)據(jù)。)

OBJ文件的前綴可以有:

v?表示本行指定一個(gè)頂點(diǎn)。此前綴后跟著3個(gè)單精度浮點(diǎn)數(shù),分別表示該定點(diǎn)的X、Y、Z坐標(biāo)值

vt?表示本行指定一個(gè)紋理坐標(biāo)。此前綴后跟著兩個(gè)單精度浮點(diǎn)數(shù)。分別表示此紋理坐標(biāo)的U、V值

vn?表示本行指定一個(gè)法線向量。此前綴后跟著3個(gè)單精度浮點(diǎn)數(shù),分別表示該法向量的X、Y、Z坐標(biāo)值

f?表示本行指定一個(gè)表面(Face)。一個(gè)表面實(shí)際上就是一個(gè)三角形圖元。此前綴行的參數(shù)格式后面將詳細(xì)介紹。

usemtl?此前綴后只跟著一個(gè)參數(shù)。該參數(shù)指定了從此行之后到下一個(gè)以u(píng)semtl開頭的行之間的所有表面所使用的材質(zhì)名稱。該材質(zhì)可以在此OBJ文件所附屬的MTL文件中找到具體信息。

mtllib?此前綴后只跟著一個(gè)參數(shù)。該參數(shù)指定了此OBJ文件所使用的材質(zhì)庫(kù)文件(*.mtl)的文件路徑

以“#”開頭的表示注釋的前綴,以g開頭的表示組的前綴。這些前綴并不影響模型的外觀,可以忽略它們。

?

建立頂點(diǎn)索引

假設(shè)Indices:array of Integer是頂點(diǎn)索引數(shù)組,Vertices:array of TVertex是頂點(diǎn)數(shù)組,使用下面的代碼段就可以把整個(gè)頂點(diǎn)索引對(duì)應(yīng)的所有三角形繪制出來(lái):

procedure DrawIndex(Indices:array of Integer;Vertices:array of TVertex);

var i :Integer;

begin

???glBegin(GL_TRIANGLES);

???for i := 0 to (High(Vertices)+1) div 3 -1 do

???begin

?????glVertex3fv(@Vertices[Indices[i*3]]);

?????glVertex3fv(@Vertices[Indices[i*3+1]]);

?????glVertex3fv(@Vertices[Indices[i*3+2]]);

???end;

???glEnd;

end;

OBJ文件為模型中所有的頂點(diǎn)、法線、紋理坐標(biāo)都建立起相應(yīng)的索引,以節(jié)省更多的空間。

面可以使用負(fù)值索引,有時(shí)用負(fù)值索引描述面更為簡(jiǎn)便。

"f -4 -3 -2 -1"這句索引值"-3"表示從"f"這行往上數(shù)第3個(gè)頂點(diǎn),

?

OBJ文件的結(jié)構(gòu)

在一個(gè)OBJ文件中,首先有一些以v、vt或vn前綴開頭的行指定了所有的頂點(diǎn)、紋理坐標(biāo)、法線的坐標(biāo)。然后再由一些以f開頭的行指定每一個(gè)三角形所對(duì)應(yīng)的頂點(diǎn)、紋理坐標(biāo)和法線的索引。在頂點(diǎn)、紋理坐標(biāo)和法線的索引之間,使用符號(hào)“/”隔開的。一個(gè)f行可以以下面幾種格式出現(xiàn):

f??1 2 3

表示以第1、2、3號(hào)頂點(diǎn)組成一個(gè)三角形。

f??1/3 2/5 3/4

表示以第1、2、3號(hào)頂點(diǎn)組成一個(gè)三角形,其中第一個(gè)頂點(diǎn)的紋理坐標(biāo)的索引值為3,第二個(gè)頂點(diǎn)的紋理坐標(biāo)的索引值為5,第三個(gè)頂點(diǎn)的紋理坐標(biāo)的索引值為4。

f??1/3/4 2/5/6 3/4/2

表示以第1、2、3號(hào)頂點(diǎn)組成一個(gè)三角形,其中第一個(gè)頂點(diǎn)的紋理坐標(biāo)的索引值為3,其法線的索引值是4;第二個(gè)頂點(diǎn)的紋理坐標(biāo)的索引值為5,其法線的索引值是6;第三個(gè)頂點(diǎn)的紋理坐標(biāo)的索引值為6,其法線的索引值是2。

f??1//4 2//6 3//2

表示以第1、2、3號(hào)頂點(diǎn)組成一個(gè)三角形,且忽略紋理坐標(biāo)。其中第一個(gè)頂點(diǎn)的法線的索引值是4;第二個(gè)頂點(diǎn)的法線的索引值是6;第三個(gè)頂點(diǎn)的法線的索引值是2。

注意:文件中的索引值是以1作為起點(diǎn)的,在渲染的時(shí)候應(yīng)注意將從文件中讀取的坐標(biāo)值減去1。

?

OBJ文件的基本結(jié)構(gòu)

點(diǎn)數(shù)據(jù)(Vertex data):

v?幾何體頂點(diǎn)?(Geometric vertices)

vt?貼圖坐標(biāo)點(diǎn)?(Texture vertices)

vn?頂點(diǎn)法線?(Vertex normals)

vp?參數(shù)空格頂點(diǎn)?(Parameter space vertices)

--------------------------------------------------------

自由形態(tài)曲線(Free-form curve)/表面屬性(surface attributes):

deg?度?(Degree)

bmat?基礎(chǔ)矩陣?(Basis matrix)

step?步尺寸?(Step size)

cstype?曲線或表面類型?(Curve or surface type)

--------------------------------------------------------

元素(Elements):

p?點(diǎn)?(Point)

l?線?(Line)

f?面?(Face)

curv?曲線?(Curve)

curv2 2D曲線?(2D curve)

surf?表面?(Surface)

--------------------------------------------------------

自由形態(tài)曲線(Free-form curve)/表面主體陳述(surface body statements):

parm?參數(shù)值?(Parameter values )

trim?外部修剪循環(huán)?(Outer trimming loop)

hole?內(nèi)部整修循環(huán)?(Inner trimming loop)

scrv?特殊曲線?(Special curve)

sp?特殊的點(diǎn)?(Special point)

end?結(jié)束陳述?(End statement)

--------------------------------------------------------

自由形態(tài)表面之間的連接(Connectivity between free-form surfaces):

con?連接?(Connect)

--------------------------------------------------------

成組(Grouping):

g?組名稱?(Group name)

s?光滑組?(Smoothing group)

mg?合并組?(Merging group)

o?對(duì)象名稱?(Object name)

--------------------------------------------------------

顯示(Display)/渲染屬性(render attributes):

bevel?導(dǎo)角插值?(Bevel interpolation)

c_interp?顏色插值?(Color interpolation)

d_interp?溶解插值?(Dissolve interpolation)

lod?細(xì)節(jié)層次?(Level of detail)

usemtl?材質(zhì)名稱?(Material name)

mtllib?材質(zhì)庫(kù)?(Material library)

shadow_obj?投射陰影?(Shadow casting)

trace_obj?光線跟蹤?(Ray tracing)

ctech?曲線近似技術(shù)?(Curve approximation technique)

stech?表面近似技術(shù)?(Surface approximation technique)

?

?

MTL文件

材質(zhì)庫(kù)中包含材質(zhì)的漫射(diffuse),環(huán)境(ambient),光澤(specular)的RGB(紅綠藍(lán))的定義值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特征。

newmtl:定義新的材質(zhì)組。對(duì)應(yīng)數(shù)據(jù)為材質(zhì)組名稱。

Ka,Kd,Ks,Ke:材質(zhì)的環(huán)境(ambient),散射(diffuse),鏡面(specular),放射(emissive)參數(shù)。對(duì)應(yīng)數(shù)據(jù)為r,g,b,a。

Ns:材質(zhì)的光亮度(shininess)。對(duì)應(yīng)一個(gè)數(shù)據(jù)。

d,Tr:均可用于定義材質(zhì)的Alpha透明度。對(duì)應(yīng)一個(gè)數(shù)據(jù)。

sharpness,illum:材質(zhì)的銳度(sharpness)和照明度(illumination)。對(duì)應(yīng)一個(gè)數(shù)據(jù)。

Ni:材質(zhì)的光密度(optical density)。對(duì)應(yīng)一個(gè)數(shù)據(jù)。

Tf:材質(zhì)的透射濾波(transmission filter)。對(duì)應(yīng)數(shù)據(jù)為r,g,b,a。(OSG中沒(méi)有讀取濾波文件的功能)

map_Ka,map_Kd,map_Ks:材質(zhì)的環(huán)境(ambient),散射(diffuse)和鏡面(specular)貼圖。對(duì)應(yīng)數(shù)據(jù)為貼圖文件名稱。

refl:材質(zhì)的反射屬性。OSG中沒(méi)有讀取其參數(shù)。


總結(jié)

以上是生活随笔為你收集整理的OBJ 文件格式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。