freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

三維虛擬場景中三維虛擬儀表程序設(shè)計畢業(yè)論文-閱讀頁

2025-07-13 10:49本頁面
  

【正文】 的紋理是可以根據(jù)用戶十點的遠(yuǎn)近來自動調(diào)整和變化的,即紋理圖像的細(xì)節(jié)層次;并且當(dāng)紋理無法完全覆蓋幾何體的每一個頂點時,通過邊界截取方式的調(diào)整,可以重復(fù)映射同一塊紋理,或者將邊界顏色應(yīng)用到未覆蓋的物體表面上。他們在內(nèi)部實現(xiàn)上各有不同,但是基本的數(shù)據(jù)交互接口沒有顯著的差異。只有幾何體可以設(shè)置紋理坐標(biāo),因此在設(shè)置節(jié)點的紋理之前,必須得到該節(jié)點子樹中所有的幾何體對象并設(shè)置他們的紋理坐標(biāo)。它的基本定義如表52所示。)const Vec4damp。其中which參數(shù)可以選擇3個紋理坐標(biāo)軸(WARP_S、WARP_R);wrap參數(shù)可以選擇CLAMP等多種邊界截取方案void setFilter(FilterParameter which,F(xiàn)ilterMode wrap)FilterMode getFilter(FilterParameter which)const設(shè)置/獲取紋理濾波方式。設(shè)置/獲取某個面的紋理圖像Unsigned int getNumImages()const虛函數(shù)。osg::Texture2D類的基本定義如表53所示。以一個2D紋理的圖片源作為輸入?yún)?shù)void setImage(Image*Image)Image* getImage()設(shè)置/獲取該2D紋理的輸入圖片源對象void setTextureWidth(int width)void setTextureHeight(int Height)設(shè)置2D紋理圖像的大小OSG中對紋理的分類有:(1) 二維紋理。它的設(shè)置如表54所示。如果圖像大小不符合此要求,Texture2D類內(nèi)部將自動重新采樣,調(diào)整紋理圖像的大小,但是也會因此耗費(fèi)一定的時間和系統(tǒng)資源。一維紋理要求紋理寬度為2 的冪次方,一維紋理的OSG屬性類Texture1D如表55所示。它最常用于醫(yī)學(xué)和地質(zhì)學(xué)方面,可以用來表達(dá)醫(yī)學(xué)CT圖像或者巖層的狀態(tài)。三維紋理會耗費(fèi)大量的系統(tǒng)資源。表56 三維紋理的設(shè)置OSG成員方法描述Texture3D對象紋理的類型標(biāo)識由Image對象的明細(xì)層次決定紋理數(shù)據(jù)分辨率的明細(xì)層次Texture::setInternalFormat(GLint)紋素中的數(shù)據(jù)分量個數(shù),取值14的整數(shù)或者其他枚舉常量Texture3D::setTextureWidth(int)紋理的寬度Texture3D::setTextureHeight(int)紋理的高度Texture3D:: setTextureDepth(int)紋理的深度Texture::setBorderWidth(GLint)紋理邊框的厚度Image::setPixelFormat(GLenum)圖像像素的表達(dá)格式,例如GL_RGBAImage::setDataType(GLenum)圖像像素個分量的數(shù)據(jù)類型,例如:GL_BYTE三維紋理要求紋理的寬度、高度和深度均為2 的冪次方個紋素。這種類型的紋理主要用于OpenGL著色語言(GLSL)程序中二維紋理數(shù)組對象的表達(dá)。立方圖紋理主要用于反射貼圖或環(huán)境貼圖的表達(dá),例如對于場景中天空景象的渲染。在OpenGL中的傳統(tǒng)紋理類型先知了圖像的尺寸必須是2的冪次方,而矩形紋理則取消了這一限制,它支持任意尺寸的二維圖像作為紋理。 OSG中使用TextureRectangle類表達(dá)這種紋理類型,其功能函數(shù)與Texture2D相同。圖 54 背景模板繪制流程圖圖55 osg::ShapeDrawable的繼承關(guān)系圖圖56 osg::TessellationHints的繼承關(guān)系圖 其中TessellationHints類是用來設(shè)置圖元的精度,而ShapeDrawable類是用來繪制三維虛擬儀表背景模板的一種方法,新建一個shape,在其方法成員中,新建一個Box,在Box的方法成員中,設(shè)置中心為(,),其后緊接著的是分別為該背景模板的長、寬、高;最后ShapeDrawable的成員是獲取精度,關(guān)鍵代碼如下:……osg::ref_ptrosg::TessellationHints hints = new osg::TessellationHints?!?然后將shape加載到幾何節(jié)點geode中去,這樣一個沒有任何光澤的扁平長方體平板就畫好了,運(yùn)行效果如圖57所示。設(shè)置材質(zhì)我們要用到Material類,它的繼承關(guān)系如圖58所示。設(shè)置紋理則相對復(fù)雜些,它需要讀入一張圖片,這張圖片則是我們要設(shè)置的紋理,并且需要用到texture2D類和StateSet類。圖59 osg::Texture2D關(guān)系繼承圖圖510 osg::StateSet類的繼承關(guān)系圖 在OSG中,osg::Texture紋理的通用類的基本定義如表57所示。以一個2D紋理的圖片源作為輸入?yún)?shù)void setImage(Image*Image)Image* getImage()設(shè)置/獲取該2D紋理的輸入圖片源對象void setTextureWidth(int width)void setTextureHeight(int Height)設(shè)置2D紋理圖像的大小 通過該表我們可以找到設(shè)置紋理的方法,再通過顏色的設(shè)置,就可以設(shè)置好背景模板的紋理,關(guān)鍵實現(xiàn)代碼如下:……//設(shè)置顏色 shapesetColor(osg::Vec4(,))。 materialsetDiffuse(osg::Material::FRONT_AND_BACK,osg::Vec4f(,))。 materialsetShininess(osg::Material::FRONT_AND_BACK,)。//獲取一張紋理圖片 if(()) { texture2DsetImage(())。 geodegetOrCreateStateSet()setMode(GL_BLEND,osg::StateAttribute::ON)。 geodegetOrCreateStateSet()setTextureAttributeAndModes(0,(),osg::StateAttribute::ON)。圖511 運(yùn)行效果圖 三維虛擬儀表刻度表的繪制 繪制刻度表的流程圖如圖512所示。在函數(shù)里面,我們先畫三維虛擬儀表刻度表的外圓,然后再畫外圓里面的度量刻度,最后畫指針。然后 再對第一個頂點進(jìn)行初始化,再利用for循環(huán)通過依次增加的角度來繪出其余100個頂點,最后通過PrimitiveSet類設(shè)置頂點的關(guān)聯(lián)方式就能畫好一個圓。圖512 繪制刻度表的流程圖圖513 osg::PrimitiveSet類的繼承關(guān)系圖在OSG中使用PrimitiveSet類來表達(dá)圖元組的信息,如果沒有設(shè)置任何圖元組,幾何體對象將無法正常工作,圖元組是用于實現(xiàn)頂點索引機(jī)制,將頂點數(shù)據(jù)有序地構(gòu)成不同幾何形狀的重要方式。表58 PrimitiveSet類的定義圖元類型對應(yīng)OpenGL圖元描述POINTSGL_ POINTS繪制用戶指定的所有頂點LINESGL_ LINES繪制直線。多段直線的第一段由數(shù)組中的前兩個點決定;其余段的起點位置為上一段的終點坐標(biāo),而終點位置由數(shù)組中隨后的點決定LINES_LOOPGL_ LINES_LOOP繪制封閉直線。三角形的3個頂點由數(shù)組中相鄰的3個點決定,并按照逆時針的順序進(jìn)行繪制;用戶提供的點不止3個時,將嘗試?yán)^續(xù)繪制新的三角形TRIANGLE_ STRIPGL_ TRIANGLE_ STRIP繪制多段三角形條帶。第一段三角形的3個頂點由數(shù)組中的前3個點決定,其余段三角形的繪制,起始邊由整個數(shù)組的第一點和上一段三角形的最后一個點決定,第三點由數(shù)組中隨后的一點決定QUADSGL_ QUADS繪制四邊形。第一段四邊形的起始邊由數(shù)組中的前兩個點決定,邊的矢量方向由這兩點的延伸方向決定;起始邊的對邊由其后的兩個點決定,如果起始邊和對邊的矢量方向不同,那么四邊形將會扭曲;其余段四邊形的繪制,起始邊由上一段決定,其對邊由隨后的兩點及其延伸方向決定POLYGONGL_POLYGON繪制任意多邊形,根據(jù)用戶提供的頂點的數(shù)量繪制凸多邊形 根據(jù)這個表我們就知道該用LINES_STRIP這種方法繪制多段直線條帶,即繪制外圓,然后定義一個角度angle,使之變化到對應(yīng)的角度,在對應(yīng)的地方繪制頂點,關(guān)鍵實現(xiàn)代碼如下: ……osg::ref_ptrosg::Vec3Array vertices = new osg::Vec3Array(101)。//初始化第一個頂點在(,)處//依次繪制剩下的100個頂點 for ( unsigned int i=1。 ++i ) { float angle = (float)i * osg::PI / 。 }…… 就這樣我們就畫好了外圓,畫好外圓后,我們就琢磨著畫圓里面的刻度了,實際生活中的儀表刻度類似于一條條線段,所以畫度量刻度可以用一條條短的線段表示,然后再設(shè)置線寬就能比較真實地反映出刻度。coords是頂點,最后將geometry加到geode中去,這樣就可以把外圓里面的度量刻度畫好。圖514 osg::LineWidth類的繼承關(guān)系圖 通過設(shè)置線寬就能逼真的顯示出度量刻度了,關(guān)鍵實現(xiàn)代碼如下: ……//繪制外圓內(nèi)側(cè)的度量刻度for ( unsigned int i=1。 ++i ) { osg::ref_ptrosg::Geometry geom1 = new osg::Geometry。 float angle = (float)((i1)/2) * osg::PI / 。 coordspush_back(osg::Vec3( (radius1) * cosf(angle), , (radius1) * sinf(angle)+5 ))。 geom1setVertexArray(())。 } else{ osg::ref_ptrosg::Vec3Array coords=new osg::Vec3Array。 coordspush_back(osg::Vec3( () * cosf(angle), , () * sinf(angle)+5 ))。 //設(shè)置頂點的關(guān)聯(lián)方式 geom1addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINES,0,2))。 geodeaddDrawable( () )。所以要先建立一個新的geometry,然后申請兩個頂點并設(shè)置其頂點的關(guān)聯(lián)方式,通過PrimitiveSet類就能得到那根我們想要的指針,運(yùn)行效果如圖515所示。繪制數(shù)據(jù)變化曲線圖的坐標(biāo)系,也就是繪制兩條相互垂直相交的線段,首先先建立一個新的geometry,然后申請四個頂點,通過PrimitiveSet類設(shè)置其頂點的關(guān)聯(lián)方式,通過LineWidth類設(shè)置線寬,再通過建立一個四維顏色數(shù)組對這四個頂點進(jìn)行顏色設(shè)置,即:osg::Vec4Array* colors = new osg::Vec4Array。//新建一個頂點數(shù)組;geometrysetVertexArray(vertices)。//設(shè)置頂點的坐標(biāo);verticespush_back(osg::Vec3(,))。verticespush_back(osg::Vec3(,))。osg::Vec4Array* colors = new osg::Vec4Array。//對頂點設(shè)置顏色;colorspush_back(osg::Vec4f(,))。colorspush_back(osg::Vec4f(,))。geometrysetColorBinding(osg::Geometry::BIND_OVERALL)。//設(shè)置頂點的連接方式;……通過上述方法和代碼就能繪制出兩條相互垂直相交的坐標(biāo)系,運(yùn)行效果如圖517所示。畫好三維虛擬儀表的刻度表和數(shù)據(jù)變化曲線圖的坐標(biāo)系后,還需要在相應(yīng)的地方附上數(shù)字或文字說明,以更好的了解該表所具有的功能和作用。最后我們就能在適當(dāng)?shù)奈恢梅胖孟鄳?yīng)的文本信息。圖519 osgText::Text類的繼承關(guān)系圖 關(guān)鍵代碼如下:……//設(shè)置字體,字體光盤文件夾IVE中可以找到std::string caiyun(fonts/)。statesetsetMode(GL_LIGHTING,osg::StateAttribute::OFF)。//設(shè)置位置1osg::Vec3 position2(,)。 //設(shè)置位置3osg::Vec3 position4(,)。 //設(shè)置位置5osg::Vec3 position6(,)。 //設(shè)置位置7osg::Vec3 position8(,)。osgText::Text* text2 = new osgText::Text。osgText::Text* text4 = new osgText::Text。osgText::Text* text6 = new osgText::Text。osgText::Text* text8 = new osgText::Text。//加載到節(jié)點2中g(shù)eode3addDrawable( text2 )。 //加載到節(jié)點4中g(shù)eode5addDrawable( text4 )。 //加載到節(jié)點6中g(shù)eode7addDrawable( text6 )。 //加載到節(jié)點8中g(shù)eode8addDrawable( text8 )。text2setFont(caiyun)。text4setFont(caiyun
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1