? ? ? ?常見(jiàn)到的*.obj文件有兩種:第一種是基于COFF(Common Object File Format)格式的OBJ文件(也稱(chēng)目標(biāo)文件),這種格式用于編譯應(yīng)用程序辜伟;第二種是Alias|Wavefront公司推出的OBJ模型文件齿诉。本文對(duì)第二種obj模型文件進(jìn)行分析。
3D文件格式硅堆,常見(jiàn)的有幾種 "*.3ds"屿讽,"*.max"昭灵,"*.lw","*.mb","*.dxf"烂完,"*.obj"试疙。但是,OBJ文件的具體特征抠蚣,卻很少有人能給出較為圓滿(mǎn)的描述祝旷。很多人認(rèn)識(shí)OBJ文件是從使用Poser開(kāi)始的,Poser是一款人體建模軟件嘶窄,要把Poser生成的人體導(dǎo)出到其它3D軟件中進(jìn)行再加工怀跛,就用到了OBJ文件。OBJ文件是一種標(biāo)準(zhǔn)的3D模型文件格式护侮,很適合用于3D軟件模型之間的互導(dǎo)。比如在3dsMax或LightWave中建了一個(gè)模型储耐,想把它調(diào)到Maya里面渲染或動(dòng)畫(huà)羊初,導(dǎo)出OBJ文件就是一種很好的選擇。目前幾乎所有知名的3D軟件都支持OBJ文件的讀寫(xiě)什湘,不過(guò)很多軟件需要通過(guò)插件才能做到這一點(diǎn)长赞。
另外,作為一種優(yōu)秀的文件格式闽撤,很多游戲引擎也都支持OBJ文件的讀取得哆。 3D軟件模型之間的互導(dǎo)是一件很常見(jiàn)的事情,不幸的是哟旗,目前的3D軟件模型導(dǎo)出功能都不那么完美贩据,經(jīng)常會(huì)出現(xiàn)缺面少線(xiàn)的情況,有時(shí)還會(huì)遇到導(dǎo)出的模型根本打不開(kāi)的情況闸餐。
OBJ文件是一種文本文件格式饱亮,比起二進(jìn)制文件為主、連每個(gè)塊的用途也得試探來(lái)試探去的3DS舍沙,文本文件為主的OBJ對(duì)我們更友好近上。與3DS文件的樹(shù)狀[塊結(jié)構(gòu)]不同,OBJ文件只是很單純的字典狀結(jié)構(gòu)拂铡,沒(méi)有塊ID來(lái)表征名字而是簡(jiǎn)單地用易懂的表意字符來(lái)表示壹无。總之看上去是賞心悅目的樣子感帅,而苦處也就只有實(shí)際寫(xiě)導(dǎo)入代碼的時(shí)候才知道了- -斗锭。OBJ文件優(yōu)化了存儲(chǔ)但劣化了讀寫(xiě)。
如果Maya自身的模型出錯(cuò)失球,也可以先轉(zhuǎn)成OBJ格式拒迅,修改之后再導(dǎo)回Maya。
OBJ文件 -- 概念
OBJ文件是Wavefront公司為它的一套基于工作站的3D建模和動(dòng)畫(huà)軟件"Advanced Visualizer"開(kāi)發(fā)的一種文件格式,這種格式同樣也以通過(guò)Maya讀寫(xiě)璧微。
OBJ文件是一種文本文件作箍,可以直接用寫(xiě)字板打開(kāi)進(jìn)行查看和編輯修改。
另外前硫,有一種與此相關(guān)二進(jìn)制文件格式(使用".MOD"后綴)胞得,二進(jìn)制格式作為專(zhuān)利未公開(kāi),因此在這里我們不作討論屹电。
OBJ最近的有文檔的版本是v3.0阶剑,代替以前的v2.11版本。
OBJ3.0格式支持多邊形(Polygon)危号,直線(xiàn)(Lines)牧愁,表面(Surfaces),和自由形態(tài)曲線(xiàn)(Free-form Curves)外莲。
直線(xiàn)和多角形通過(guò)它們的點(diǎn)來(lái)描述猪半,曲線(xiàn)和表面則根據(jù)于它們的控制點(diǎn)和依附于曲線(xiàn)類(lèi)型的額外信息來(lái)定義。這些信息支持規(guī)則和不規(guī)則的曲線(xiàn)偷线,包括那些基于貝塞爾(Bezier)曲線(xiàn)磨确,B樣條(B-spline),基數(shù)(Cardinal/Catmull-Rom樣條)声邦,和泰勒方程(Taylor equations)的曲線(xiàn)乏奥。
1、OBJ文件 -- 特點(diǎn)
(1)OBJ是一種3D模型文件亥曹,因此不包含動(dòng)畫(huà)邓了、材質(zhì)特性、貼圖路徑媳瞪、動(dòng)力學(xué)驶悟、粒子等信息。
(2)OBJ文件主要支持多邊形(Polygons)模型材失。
雖然OBJ文件也支持曲線(xiàn)(Curves)痕鳍、表面(Surfaces)、點(diǎn)組材質(zhì)(Point Group Materials)龙巨,但Maya導(dǎo)出的OBJ文件并不包括這些信息笼呆。
(3)OBJ文件支持三個(gè)點(diǎn)以上的面,這一點(diǎn)很有用旨别。
很多其它的模型文件格式只支持三個(gè)點(diǎn)的面诗赌,所以我們導(dǎo)入Maya的模型經(jīng)常被三角化了,這對(duì)于我們對(duì)模型的再加工甚為不利秸弛。
(4)OBJ文件支持法線(xiàn)和貼圖坐標(biāo)铭若。
在其它軟件中調(diào)整好貼圖后洪碳,貼圖坐標(biāo)信息可以存入OBJ文件中,這樣文件導(dǎo)入Maya后只需指定一下貼圖文件路徑就行了叼屠,不需要再調(diào)整貼圖坐標(biāo)了瞳腌。
2、OBJ文件 -- 基本結(jié)構(gòu)
OBJ文件不需要任何種文件頭(File Header)镜雨,盡管經(jīng)常使用幾行文件信息的注釋作為文件的開(kāi)頭嫂侍。
OBJ文件由一行行文本組成,注釋行以一個(gè)“井”號(hào)(#)為開(kāi)頭荚坞,空格和空行可以隨意加到文件中以增加文件的可讀性挑宠。有字的行都由一兩個(gè)標(biāo)記字母也就是關(guān)鍵字(Keyword)開(kāi)頭,關(guān)鍵字可以說(shuō)明這一行是什么樣的數(shù)據(jù)颓影。多行可以邏輯地連接在一起表示一行各淀,方法是在每一行最后添加一個(gè)連接符(\)。
注意連接符(\)后面不能出現(xiàn)空格或tab格诡挂,否則將導(dǎo)致文件出錯(cuò)碎浇。
下列關(guān)鍵字可以在OBJ文件使用。
在這個(gè)列表中, 關(guān)鍵字根據(jù)數(shù)據(jù)類(lèi)型排列咆畏,每個(gè)關(guān)鍵字有一段簡(jiǎn)短描述南捂。
頂點(diǎn)數(shù)據(jù)(Vertex data):
v 幾何體頂點(diǎn) (Geometric vertices)
vt 貼圖坐標(biāo)點(diǎn) (Texture vertices)
vn 頂點(diǎn)法線(xiàn) (Vertex normals)
vp 參數(shù)空格頂點(diǎn) (Parameter space vertices)
自由形態(tài)曲線(xiàn)(Free-form curve)/表面屬性(surface attributes):
deg 度 (Degree)
bmat 基礎(chǔ)矩陣 (Basis matrix)
step 步尺寸 (Step size)
cstype 曲線(xiàn)或表面類(lèi)型 (Curve or surface type)
元素(Elements):
p 點(diǎn) (Point)
l 線(xiàn) (Line)
f 面 (Face)
curv 曲線(xiàn) (Curve)
curv2 2D曲線(xiàn) (2D curve)
surf 表面 (Surface)
自由形態(tài)曲線(xiàn)(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 特殊曲線(xiàn) (Special curve)
sp 特殊的點(diǎn) (Special point)
end 結(jié)束陳述 (End statement)
自由形態(tài)表面之間的連接(Connectivity between free-form surfaces):
con 連接 (Connect)
成組(Grouping):
g 組名稱(chēng) (Group name)
s 光滑組 (Smoothing group)
mg 合并組 (Merging group)
o 對(duì)象名稱(chēng) (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ì)名稱(chēng) (Material name)
mtllib 材質(zhì)庫(kù) (Material library)
shadow_obj 投射陰影 (Shadow casting)
trace_obj 光線(xiàn)跟蹤 (Ray tracing)
ctech 曲線(xiàn)近似技術(shù) (Curve approximation technique)
stech 表面近似技術(shù) (Surface approximation technique)
3吴裤、OBJ文件 -- 實(shí)例:
下面通過(guò)實(shí)例來(lái)具體講解旧找。
OBJ文件記錄一個(gè)四邊形的代碼:
v -0.58 0.84 0
v 2.68 1.17 0
v 2.84 -2.03 0
v -1.92 -2.89 0
f 1 2 3 4
讓我們來(lái)創(chuàng)建一個(gè)OBJ文件,不過(guò)這一回我們不用3D軟件麦牺,而是用寫(xiě)字板來(lái)創(chuàng)建钮蛛。
打開(kāi)寫(xiě)字板,把上面的5行代碼寫(xiě)上去剖膳,可以適當(dāng)加一點(diǎn)注釋魏颓。
保存文件為文本格式,文件名為"myObj.obj"吱晒,甸饱。
注意:代碼最后一定要按一下回車(chē)把光標(biāo)切換到下一行,就是說(shuō)加一個(gè)換行符(\n)仑濒。否則會(huì)看到如下錯(cuò)誤信息:
// Error: line 1: OBJ file line 5: index out of range. //
// Error: line 1: Error reading file. //
在Maya中導(dǎo)入"myObj.obj"文件叹话,看見(jiàn)了吧,導(dǎo)入了一個(gè)四邊形墩瞳。這個(gè)四邊形的形狀是完全由前面的那5行代碼決定的驼壶。
下面我們來(lái)分析一個(gè)這些代碼。
v -0.58 0.84 0
畫(huà)一個(gè)四邊形需要四個(gè)頂點(diǎn)喉酌,這是第一個(gè)頂點(diǎn)热凹,"v"表示頂點(diǎn)(vertex)泵喘,"-0.58"為這個(gè)頂點(diǎn)的X軸坐標(biāo)值,"-0.84"為Y軸坐標(biāo)值般妙,"0"為Z軸坐標(biāo)值纪铺。這是第一個(gè)頂點(diǎn),它的索引號(hào)是1股冗。索引號(hào)是畫(huà)面時(shí)要用到的霹陡。
v 2.68 1.17 0
v 2.84 -2.03 0
v -1.92 -2.89 0
這分別是第二、三止状、四個(gè)頂點(diǎn)烹棉,它們的索引號(hào)分別是2,3怯疤,4浆洗。
現(xiàn)在開(kāi)始畫(huà)面,"f"表示面(face)集峦,1伏社,2,3塔淤,4是前面那四個(gè)頂點(diǎn)的索引號(hào)摘昌。請(qǐng)注意畫(huà)這個(gè)面連接點(diǎn)的順序,是從第一個(gè)點(diǎn)出發(fā)高蜂,依次連接第二聪黎、三、四個(gè)點(diǎn)备恤。如果連接的順序不同所生成的面也會(huì)截然不同稿饰,例如"f 1 2 4 3"會(huì)產(chǎn)生一個(gè)交迭的面,如圖露泊。 面的連接點(diǎn)是按順時(shí)針排列或逆時(shí)針排列喉镰,將決定面的法線(xiàn)方向(面的反正)。 例如:"f 1 2 3 4"面的法線(xiàn)向外惭笑,"f 4 3 2 1"面的法線(xiàn)向里侣姆。 面的連接點(diǎn)順序錯(cuò)誤,是導(dǎo)致導(dǎo)入模型產(chǎn)生碎面的一個(gè)重要原因沉噩。
一個(gè)面不能出現(xiàn)兩個(gè)以上相同的頂點(diǎn)捺宗,這也是檢查OBJ文件出錯(cuò)的一個(gè)要點(diǎn)。
例如:"f 1 2 3 4 3"屁擅,有兩個(gè)相同的頂點(diǎn)偿凭,索引號(hào)是3。一個(gè)面出現(xiàn)兩個(gè)相同頂點(diǎn)派歌,可能造成程序的內(nèi)存分配錯(cuò)誤弯囊。
下面來(lái)研究一下Maya導(dǎo)出的OBJ文件痰哨。
在Maya中創(chuàng)建一個(gè)多邊形立方體,選中這個(gè)立方體匾嘱,選擇菜單"File -> Export Selection..."導(dǎo)出格式為OBJ斤斧,文件名為"cube.obj",如果沒(méi)有此格式霎烙,請(qǐng)?jiān)赑lug-in Manager中載入"objExport.mll"撬讽。 用寫(xiě)字板打開(kāi)"cube.obj",可以看到如下代碼:
# The units used in this file are centimeters.
g default
v -0.500000 -0.500000 0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 2.000000
vt 1.000000 2.000000
vt 0.000000 3.000000
vt 1.000000 3.000000
vt 0.000000 4.000000
vt 1.000000 4.000000
vt 2.000000 0.000000
vt 2.000000 1.000000
vt -1.000000 0.000000
vt -1.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
s off
g pCube1
usemtl initialShadingGroup
f 1/1/1 2/2/2 4/4/3 3/3/4
f 3/3/5 4/4/6 6/6/7 5/5/8
f 5/5/9 6/6/10 8/8/11 7/7/12
f 7/7/13 8/8/14 2/10/15 1/9/16
f 2/2/17 8/11/18 6/12/19 4/4/20
f 7/13/21 1/1/22 3/3/23 5/14/24
這個(gè)文件看起來(lái)稍復(fù)雜一些悬垃,用到了許多關(guān)鍵詞游昼,你可以對(duì)照前面的列表查看一下每個(gè)關(guān)鍵詞的意思。
我來(lái)解釋一下尝蠕。
"vt 1.000000 0.000000"這句"vt"代表點(diǎn)的貼圖坐標(biāo)烘豌。
"vn 0.000000 0.000000 -1.000000"這句"vn"代表點(diǎn)的法線(xiàn)。
"s off"表示關(guān)閉光滑組看彼。
"usemtl initialShadingGroup"表示使用的材質(zhì)廊佩。
"f 7/13/21"這時(shí)在面的數(shù)據(jù)中多了貼圖坐標(biāo)uv點(diǎn)和法線(xiàn)的索引號(hào),索引號(hào)分別用左斜線(xiàn)(/)隔開(kāi)靖榕。
格式:"f 頂點(diǎn)索引/uv點(diǎn)索引/法線(xiàn)索引"标锄。
"g pCube1"表示組,這里的成組與Maya中的成組不一樣茁计,這里的成組是指把"g pCube1"后出現(xiàn)的面都結(jié)合到一起料皇,組成一個(gè)整的多邊形幾何體。
把"cube.obj"文件修改一下就知道成組的意思了簸淀。把"s off"這句后面的代碼替換成以下代碼:
usemtl initialShadingGroup
g pCube_Face1
f 1/1/1 2/2/2 4/4/3 3/3/4
g pCube_Face2
f 3/3/5 4/4/6 6/6/7 5/5/8
g pCube_Face3
f 5/5/9 6/6/10 8/8/11 7/7/12
g pCube_Face4
f 7/7/13 8/8/14 2/10/15 1/9/16
g pCube_Face5
f 2/2/17 8/11/18 6/12/19 4/4/20
g pCube_Face6
f 7/13/21 1/1/22 3/3/23 5/14/24
導(dǎo)入Maya后可以看到瓶蝴,立方體的每個(gè)面是分離的毒返,每個(gè)面的名稱(chēng)分別是"pCube_Face(1~6)"租幕,可見(jiàn)組的名稱(chēng)其實(shí)就是單獨(dú)幾何體的名稱(chēng)。
可不可以用中文命名幾何體(組)呢拧簸?試試就知道了劲绪,把前面的代碼改成:
usemtl initialShadingGroup
g 立方體面1
f 1/1/1 2/2/2 4/4/3 3/3/4
g 立方體面2
f 3/3/5 4/4/6 6/6/7 5/5/8
g 立方體面3
f 5/5/9 6/6/10 8/8/11 7/7/12
g 立方體面4
f 7/7/13 8/8/14 2/10/15 1/9/16
g 立方體面5
f 2/2/17 8/11/18 6/12/19 4/4/20
g 立方體面6
f 7/13/21 1/1/22 3/3/23 5/14/24
試一下,會(huì)發(fā)現(xiàn)模型順利的導(dǎo)入了盆赤。雖然物體的名稱(chēng)都變亂碼了贾富,可這并不是很?chē)?yán)重的事。
不過(guò)使用中文名并不總是這么順利牺六,把"g 立方體面1"這行改為"g 選擇"再試試看颤枪,這回導(dǎo)入時(shí)模型根本無(wú)法出現(xiàn),只會(huì)出現(xiàn)如下的錯(cuò)誤信息:
// Error: line 1: Your OBJ file contains a line which is too long to be parsed. Please edit your obj file. //
// Error: line 1: Error reading file. //
由此可見(jiàn)淑际,物體命名的不規(guī)范也是導(dǎo)致OBJ文件出錯(cuò)的原因之一畏纲。
關(guān)于Maya的物體命名扇住,英文名是很保險(xiǎn)的,標(biāo)點(diǎn)符號(hào)中只有下劃線(xiàn)(_)可用盗胀,數(shù)字不能用放到名稱(chēng)的開(kāi)頭艘蹋,盡量不要用中、日票灰、韓等雙字節(jié)文字女阀。
OBJ文件不支持有孔的多邊形面。
舉個(gè)例子說(shuō)明一下:
選擇Maya的創(chuàng)建多邊形工具(Polygons -> Create Polyon Tool)屑迂,在視圖中畫(huà)一個(gè)四邊形浸策,不要按回車(chē),按Ctrl在四邊形中間點(diǎn)一下惹盼,可以繼續(xù)在四邊形中挖一個(gè)洞的榛。把這個(gè)有孔的多邊形存成OBJ格式,在導(dǎo)入Maya時(shí)逻锐,會(huì)發(fā)現(xiàn)多邊形少了一塊夫晌。如果你把這也看成錯(cuò)誤,現(xiàn)在至少你已經(jīng)知道錯(cuò)誤的原因了昧诱,就是OBJ文件不支持有孔的多邊形面晓淀。
OBJ文件 -- 實(shí)際問(wèn)題:
現(xiàn)在來(lái)討論一點(diǎn)比較實(shí)際的問(wèn)題吧,就是一旦你遇到了一個(gè)出錯(cuò)的OBJ文件盏档,倒底該怎么辦凶掰?
當(dāng)你打開(kāi)OBJ文件后,往往會(huì)看到有幾萬(wàn)行的代碼蜈亩,你恐怕還沒(méi)本事情一眼看出錯(cuò)誤所在行懦窘,除非程序的錯(cuò)誤信息中已經(jīng)告訴你錯(cuò)誤行。如果你不知道錯(cuò)誤在哪里稚配,可以用排除法畅涂,弄清楚肯定正確的代碼范圍,通過(guò)縮減錯(cuò)誤代碼范圍定位錯(cuò)誤道川。例如午衰,你先新建一個(gè)空的OBJ文件,把有錯(cuò)的OBJ文件代碼粘貼一半過(guò)來(lái)冒萄,然后把這個(gè)只有一半代碼的新OBJ文件導(dǎo)入Maya臊岸。如果這時(shí)沒(méi)有錯(cuò)誤信息,說(shuō)明錯(cuò)誤行是在另一半代碼中尊流,可以從另一半代碼中再粘貼一部分代碼試試看帅戒;如果這時(shí)出現(xiàn)錯(cuò)誤,說(shuō)明錯(cuò)誤行就在粘貼的代碼中崖技,可以把粘貼過(guò)來(lái)的代碼刪去一部分再試試看逻住。就這樣施流,逐步縮減范圍直到找到錯(cuò)誤行為止。
這種方法雖然很麻煩鄙信,不過(guò)頗為有效瞪醋。如果你不會(huì)編程,又遇到非常緊急的情況装诡,這種方法還是值得一試的银受。
OBJ文件 -- 細(xì)節(jié):
掌握了這么多差不多也夠用了,不過(guò)由于網(wǎng)上詳細(xì)講解OBJ文件的中文文檔很少鸦采,我還是再講一些例子宾巍,給大家提供多一點(diǎn)的信息吧。
簡(jiǎn)單的OBJ格式寫(xiě)法渔伯。
# Simple Wavefront file
v 0.0 0.0 0.0
v 0.0 1.0 0.0
v 1.0 0.0 0.0
f 1 2 3
面可以使用負(fù)值索引顶霞,有時(shí)用負(fù)值索引描述面更為簡(jiǎn)便。
"f -4 -3 -2 -1"這句索引值"-3"表示從"f"這行往上數(shù)第3個(gè)頂點(diǎn)锣吼,就是"v -0.500000 0.000000 -0.800000"选浑,其它的索引值以此類(lèi)推。 因此與這一行等效的正值索引寫(xiě)法為:"f 1 2 3 4"
v -0.500000 0.000000 0.400000
v -0.500000 0.000000 -0.800000
v -0.500000 1.000000 -0.800000
v -0.500000 1.000000 0.400000
f -4 -3 -2 -1
OBJ文件不包含面的顏色定義信息玄叠,不過(guò)可以引用材質(zhì)庫(kù)古徒,材質(zhì)庫(kù)信息儲(chǔ)存在一個(gè)后綴是".mtl"的獨(dú)立文件中。關(guān)鍵字"mtllib"即材質(zhì)庫(kù)的意思读恃。
材質(zhì)庫(kù)中包含材質(zhì)的漫射(diffuse)隧膘,環(huán)境(ambient),光澤(specular)的RGB(紅綠藍(lán))的定義值寺惫,以及反射(specularity)疹吃,折射(refraction),透明度(transparency)等其它特征西雀。
"usemtl"指定了材質(zhì)之后萨驶,以后的面都是使用這一材質(zhì),直到遇到下一個(gè)"usemtl"來(lái)指定新的材質(zhì)蒋搜。
下面的例子說(shuō)明了指定材質(zhì)的方法篡撵。
Cube with Materials:
# This cube has a different material
# applied to each of its faces.
mtllib master.mtl
v 0.000000 2.000000 2.000000
v 0.000000 0.000000 2.000000
v 2.000000 0.000000 2.000000
v 2.000000 2.000000 2.000000
v 0.000000 2.000000 0.000000
v 0.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 2.000000 2.000000 0.000000
# 8 vertices
g front
usemtl red
f 1 2 3 4
g back
usemtl blue
f 8 7 6 5
g right
usemtl green
f 4 3 7 8
g top
usemtl gold
f 5 1 4 8
g left
usemtl orange
f 5 6 2 1
g bottom
usemtl purple
f 2 6 7 3
# 6 elements
貝塞爾片面(Bezier Patch):
Maya不能導(dǎo)出OBJ格式的貝塞爾片面判莉,卻能夠?qū)胨雇臁?dǎo)入的貝塞爾片面自動(dòng)轉(zhuǎn)換為Nurbs表面。
# 3.0 Bezier patch
v -5.000000 -5.000000 0.000000
v -5.000000 -1.666667 0.000000
v -5.000000 1.666667 0.000000
v -5.000000 5.000000 0.000000
v -1.666667 -5.000000 0.000000
v -1.666667 -1.666667 0.000000
v -1.666667 1.666667 0.000000
v -1.666667 5.000000 0.000000
v 1.666667 -5.000000 0.000000
v 1.666667 -1.666667 0.000000
v 1.666667 1.666667 0.000000
v 1.666667 5.000000 0.000000
v 5.000000 -5.000000 0.000000
v 5.000000 -1.666667 0.000000
v 5.000000 1.666667 0.000000
v 5.000000 5.000000 0.000000
# 16 vertices
cstype bezier
deg 3 3
# Example of line continuation
surf 0.000000 1.000000 0.000000 1.000000 13 14 \
15 16 9 10 11 12 5 6 7 8 1 2 3 4
parm u 0.000000 1.000000
parm v 0.000000 1.000000
end
# 1 element
基數(shù)曲線(xiàn)(Cardinal Curve):
Maya好像不支持OBJ格式的曲線(xiàn)券盅,導(dǎo)入時(shí)不會(huì)出現(xiàn)錯(cuò)誤信息帮哈,卻也不會(huì)出現(xiàn)曲線(xiàn)。
# 3.0 Cardinal curve
v 0.940000 1.340000 0.000000
v -0.670000 0.820000 0.000000
v -0.770000 -0.940000 0.000000
v 1.030000 -1.350000 0.000000
v 3.070000 -1.310000 0.000000
# 6 vertices
cstype cardinal
deg 3
curv 0.000000 3.000000 1 2 3 4 5 6
parm u 0.000000 1.000000 2.000000 3.000000 end
# 1 element
貼圖映射(Texture-Mapped):
# A 2 x 2 square mapped with a 1 x 1 square
# texture stretched to fit the square exactly.
mtllib master.mtl
v 0.000000 2.000000 0.000000
v 0.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 2.000000 2.000000 0.000000
vt 0.000000 1.000000 0.000000
vt 0.000000 0.000000 0.000000
vt 1.000000 0.000000 0.000000
vt 1.000000 1.000000 0.000000
# 4 vertices
usemtl wood
# The first number is the point,
# then the slash,
# and the second is the texture point
f 1/1 2/2 3/3 4/4
# 1 element
【后記】
1锰镀、為什么要研究OBJ娘侍?
學(xué)習(xí)三維軟件咖刃,不僅要學(xué)習(xí)如何制作模型、渲染憾筏、動(dòng)畫(huà)嚎杨,還要掌握它能載入哪些文件,導(dǎo)出哪些格式的文件氧腰,每種格式的文件有哪些特點(diǎn)等枫浙。計(jì)算機(jī)CG技術(shù)就是依照“計(jì)算機(jī)圖形學(xué)”理論的各種計(jì)算,所以你想深入了解古拴,應(yīng)該搜索看看相關(guān)的文章箩帚。否則你就不知道為什么、怎么黄痪、如何去應(yīng)用紧帕。這篇關(guān)于三維模型格式OBJ,實(shí)際研究它的數(shù)據(jù)結(jié)構(gòu)桅打,結(jié)構(gòu)決定屬性是嗜。從這篇你應(yīng)該知道OBJ本身就是文本格式,用記事本可以打開(kāi)挺尾。它包含UV數(shù)據(jù)叠纷,但不包含材質(zhì)特性及路徑等、不包含動(dòng)畫(huà)潦嘶、粒子和動(dòng)力學(xué)信息涩嚣。同時(shí)生成的MTL是材質(zhì)數(shù)據(jù),需要在三維軟件中重新定義一下掂僵。它支持三點(diǎn)以上成面航厚,就是說(shuō)它能存儲(chǔ)四邊面數(shù)據(jù)。但是文章說(shuō)锰蓬,OBJ不能存儲(chǔ)有孔的模型文件幔睬,我用C4D測(cè)試一下,好像這個(gè)結(jié)論不正確芹扭,C4D能夠載入有孔的OBJ模型文件麻顶。
這個(gè)格式的模型文件就是兼容好,可以在各種不同的三維軟件使用舱卡,這也許是它最大的優(yōu)點(diǎn)吧辅肾?
如果你想導(dǎo)出動(dòng)畫(huà)到其他三維軟件,還有一個(gè)格式是FBX轮锥,以后再研究矫钓。
2、天氣太熱了,不愿意寫(xiě)啊新娜。好多文章都躺著草稿箱里赵辕,等天氣涼爽一些再寫(xiě)吧?只能轉(zhuǎn)載一些有用的文章湊數(shù)概龄,但這些文章我也是用“心”的啊还惠。
聲明:文章摘自
http://www.cnblogs.com/slysky/p/4081307.html