明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

擠壓造型Extrusion的節(jié)點說明與應(yīng)用案例

[摘要]擠壓造型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é)會了,擠壓造型理解起來就是小菜一碟。