擠壓造型Extrusion的節(jié)點說明與應(yīng)用案例
發(fā)表時間:2024-06-13 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]擠壓造型Extrusion的節(jié)點說明和應(yīng)用實例----------------------------1。擠壓造型的節(jié)點說明:Extrusion節(jié)點 Extrusion spine [0 0 0,0 1 0] # MFVec3f crossSection [1 1,1 -1,-...
擠壓造型Extrusion的節(jié)點說明和應(yīng)用實例
----------------------------
1。擠壓造型的節(jié)點說明:
Extrusion節(jié)點
Extrusion
{
spine [0 0 0,0 1 0] # MFVec3f
crossSection [1 1,1 -1,-1 -1,-1 1,1 1] # MFVec2f
scale [1 1] # MFVec2f
orientation [0 0 1 0] # MFRotation
beginCap TRUE # SFBool
endCap TRUE # SFBool
ccw TRUE # SFBool
solid TRUE # SFBool
convex TRUE # SFBool
creaseAngle 0 # SFFloat
}
<域>:
spine 該域定義龍骨折線,包括一系列三維點,依次連接相鄰點就得到一條折線。該域的
坐標在節(jié)點的局坐標系上定義。
crossSection 定義二維折線,包括一系列二維的坐標,依次連接相鄰坐標點就得到一條
分段線性折線。該則先在節(jié)點的局部坐表系xz平面中定義,二維的坐標的第一個數(shù)是x坐
標,另一個是z坐標。
/*我們重點關(guān)心上面兩個域*/
scale 該城定義二維折線的尺度縮放變換參數(shù)。在節(jié)點局部坐標系的XZ平面內(nèi),尺度變
換以平面的坐標原點為參照點,值的第一個數(shù)對應(yīng)X軸的變換,第二個數(shù)對應(yīng)Z軸。尺度變
換參數(shù)值必須大于零。一般該域值的個數(shù)與spine域一樣,順序?qū)?yīng)著每個龍骨構(gòu)造點處
的二維拆線的尺度變換。如果該城只指定了一個值,每一處的二維折線都使用這個值進行
變換。
orientation 該域定義三維旋轉(zhuǎn)變換參數(shù)。一般該域值的個數(shù)與SPine域一樣,順序?qū)?yīng)
著每個龍骨構(gòu)造點處的二維折線的旋轉(zhuǎn)變換。如果該域只指定了一個值,每一處的二維折
線都使用這個值進行變換。注意這個旋轉(zhuǎn)變換并不在節(jié)點的局部坐標系上定義,而在對應(yīng)
每個龍骨構(gòu)造點處的一個特殊的構(gòu)造點坐標系上進行。
beginCap 該域說明延伸體是否有起始端面(對應(yīng)龍骨中第一個構(gòu)造點)。如果
beginCap= FALSE,則不產(chǎn)生起始端面,否則,起始端面是將crossSection域中的二維折
線首尾相連構(gòu)成的多邊形,處于龍骨第一個構(gòu)造點坐標系的xz平面。
endCap 該域說明延伸體是否有終止端面(對應(yīng)龍骨中最后一個構(gòu)造點)。如果endCap=
FALSE,則不產(chǎn)生終止端面,否則,終止端面是將crossSection域中的二維折線首尾相連
構(gòu)成的多邊形,處于龍骨最后一個構(gòu)造點坐標系的xz平面。
ccw Extlusion節(jié)點自動生成幾何面的法線,該域決定法線方向與二維折線走向的關(guān)系。
當cow=TRUE時,二維折線走向(由折點定義的順序指定)、龍骨走向(由龍骨構(gòu)造點定
義的順序指定)與法線方向應(yīng)成右手關(guān)系;反之,當cow=FALSE時,二維折線走向、龍骨
走向與法線方向應(yīng)成左手關(guān)系。如果域solid=TRUE,只有逆著法線方向觀察,才可以看到
幾何面。
solid 對于一個幾何體的面,法線方向的表面被認為是“外”表面,與此相反的是“內(nèi)”
表面, 當solid域為TRUE時,只顯示“外”表面,“內(nèi)”表面并不顯示著色。當幾何體是
閉合的時候,該域用于瀏覽器實現(xiàn)優(yōu)化。如果solid= FALSE,則意味著“內(nèi)”、“外”表
面都要顯示,瀏覽器必須計算兩個表面,這時如果使用質(zhì)材,面上的某點在兩個表面使用
質(zhì)材圖像上的同一像點。
convex 該域告訴測覽器幾何體是否為一個完全的凸面體。如果不能確定,該域應(yīng)該設(shè)為
FALSE。convex域用于測覽器實現(xiàn)優(yōu)化。
creaseAngle 該域影響瀏覽器對幾何體相鄰表面之間棱的處理。creaseAngle指定一個大
于0的角度值(弧度),如果相鄰表面法線之間的夾角的絕對值小于這一角度,創(chuàng)覽器對
相鄰表面做平滑處理,棱不能被明顯地察覺到。該域通常用于生成光滑的表面。
<事件>:
Set-SPine eventIn MFVc3f 設(shè)置spine路徑的值。
Set-CrossSection eventIn MFVec2f 設(shè)置crossSection路徑的值。
set-scale eventIn MFVec2f 設(shè)置scale的值。
set-orientation eventIn MFRotation 設(shè)置orientation的值
<說明>:
ExtruSion節(jié)點為描述多種形狀的形體提供了一種有效和直接的方式,那些可以用ZD
截面圖形經(jīng)在空間中沿某一路徑移動而形成的形體均可采用此方式。
crossSection域描述了一個x-z平面上的2D準形截面。將crossSection的拷貝放在每
個spine路徑的連接處,按照scale、orientation域的值進行縮放或旋轉(zhuǎn),然后將相鄰連
接處的交叉部分的相應(yīng)頂點連接起來形成物體的側(cè)面。如果beginCap endCap已被說明,
適當?shù)钠矫娑噙呅味嗣保╟aps)便可被加在所構(gòu)建形體的末端。
------------------------
2。vrml代碼如下:
#VRML V2.0 utf8
#用戶視角
Viewpoint
{
position 0 4 10
description "Look"
}
#背景
Background
{
skyColor
[
0.0 0.2 0.7,
0.0 0.5 1.0,
1.0 1.0 1.0
]
skyAngle [1.309,1.571]
}
Group
{
children
[
DEF Body Transform #螺絲紋,擠壓造型
{
children Shape
{
appearance DEF DColor Appearance
{
material Material
{
diffuseColor .2 .1 .32
specularColor .31 .388 .388
ambientIntensity .07
shininess 1
}
}
geometry DEF Whorl Extrusion
{
crossSection
[
0.05 0,0 0.08,-0.05 0,0.05 0
]
spine [ ]
scale [ ]
beginCap TRUE
endCap TRUE
solid TRUE
}
}
}, # end Body
DEF Top Transform #釘子帽,圓柱
{
translation 0 5.05 0
children Shape
{
appearance USE DColor
geometry Cylinder
{
radius 0.5
height 0.1
}
}
},
Transform #釘子的身子,圓錐
{
translation 0 2.5 0
rotation 1 0 0 3.14
children Shape
{
appearance USE DColor
geometry Cone
{
bottomRadius 0.25
height 5
side TRUE
}
}
},
DEF myScript Script
{
field SFFloat a 0.01
eventOut MFVec3f spin_changed
eventOut MFVec2f scal_changed
url "vrmlscript:
function initialize()
{
y_add = 0; //Y方向上的增量
cent = Math.PI/16; //螺旋時的角度的增量
angle = 0.0;
sc = 0; //縮放比例
N = 64 * 5;
for(i = 0; i < N - 20; i++)
{
b = angle / (64*Math.PI);
part_x = b * Math.cos(angle);
part_z = - b * Math.sin(angle);
/*spin就是一個多邊形逼近形成的圓,Y上加
上增量,就形成了螺旋上升的造型。*/
spin_changed[i] = new SFVec3f(part_x, y_add, part_z);
scal_changed[i] = new SFVec2f(sc,sc);
angle += cent;
y_add += 1 / 64;
sc += 0.01;
}
}"
}
]
ROUTE myScript.spin_changed TO Whorl.set_spine
ROUTE myScript.scal_changed TO Whorl.set_scale
}
3。解釋
crossSection [] 就是一個在x-z平面上的封閉圖形,例子中是一個三角形;
spine [ ] 是crossSection的圖形拉動的軌跡,(x,y,z)三維坐標形成的一個數(shù)組
scale [ ] 造型在各個spine點的縮放比例。
其實只要高中的立體幾何學(xué)會了,擠壓造型理解起來就是小菜一碟。