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

正文內(nèi)容

三維虛擬場景中三維虛擬儀表程序設(shè)計終稿畢業(yè)論文-資料下載頁

2025-06-28 12:37本頁面
  

【正文】 setDataType(GLenum)圖像像素個分量的數(shù)據(jù)類型,例如:GL_BYTEImage對象圖像數(shù)據(jù)的內(nèi)容二維紋理要求圖像的寬度和高度必須是2的冪次方,單位是紋素。如果圖像大小不符合此要求,Texture2D類內(nèi)部將自動重新采樣,調(diào)整紋理圖像的大小,但是也會因此耗費一定的時間和系統(tǒng)資源。(2) 一維紋理。一維紋理要求紋理寬度為2 的冪次方,一維紋理的OSG屬性類Texture1D如表55所示。表55 一維紋理的OSG屬性類Texture1DOSG的成員方法描述Texture1D對象紋理的類型標識由Image對象的明細層次決定紋理數(shù)據(jù)分辨率的明細層次Texture::setInternalFormat(GLint)紋素中的數(shù)據(jù)分量個數(shù),取值14的整數(shù)或者其他枚舉常量Texture1D::setTextureWidth(int)紋理的寬度Texture::setBorderWidth(GLint)紋理邊框的厚度Image::setPixelFormat(GLenum)圖像像素的表達格式,例如GL_RGBAImage::setDataType(GLenum)圖像像素個分量的數(shù)據(jù)類型,例如:GL_BYTEImage對象一維圖像數(shù)據(jù)的內(nèi)容(3) 三維紋理。它最常用于醫(yī)學和地質(zhì)學方面,可以用來表達醫(yī)學CT圖像或者巖層的狀態(tài)??梢灾v它理解為多層二維子紋理所構(gòu)成的一個立方體,而其中的每一個紋素此時稱為一個體素。三維紋理會耗費大量的系統(tǒng)資源。用于設(shè)置三維問題的OSG屬性類Texture3D如表56所示。表56 三維紋理的設(shè)置OSG成員方法描述Texture3D對象紋理的類型標識由Image對象的明細層次決定紋理數(shù)據(jù)分辨率的明細層次Texture::setInternalFormat(GLint)紋素中的數(shù)據(jù)分量個數(shù),取值14的整數(shù)或者其他枚舉常量Texture3D::setTextureWidth(int)紋理的寬度Texture3D::setTextureHeight(int)紋理的高度Texture3D:: setTextureDepth(int)紋理的深度Texture::setBorderWidth(GLint)紋理邊框的厚度Image::setPixelFormat(GLenum)圖像像素的表達格式,例如GL_RGBAImage::setDataType(GLenum)圖像像素個分量的數(shù)據(jù)類型,例如:GL_BYTE三維紋理要求紋理的寬度、高度和深度均為2 的冪次方個紋素。(4)二維紋理數(shù)組,它是一種較為特殊的紋理類型,它和三維紋理的概念上無本質(zhì)上的區(qū)別;osg::Texture2DArray類的成員函數(shù)與Texture3D也別無二致。這種類型的紋理主要用于OpenGL著色語言(GLSL)程序中二維紋理數(shù)組對象的表達。(5)立方圖紋理,它是一種新的紋理映射表達方式,它使用6個二維圖像來表達一個立方體的6個面,而S/T/R坐標軸的遠的為這個立方體的中心點。立方圖紋理主要用于反射貼圖或環(huán)境貼圖的表達,例如對于場景中天空景象的渲染。(6)矩形紋理。在OpenGL中的傳統(tǒng)紋理類型先知了圖像的尺寸必須是2的冪次方,而矩形紋理則取消了這一限制,它支持任意尺寸的二維圖像作為紋理。 不受到“2的冪次方”限制的圖像成為NPOTS紋理,它避免了傳統(tǒng)二維紋理對于任意尺寸圖像的重新采樣過程,并且可以節(jié)省更多的系統(tǒng)空間;但是NPOTS紋理不支持Mipmap的過濾,對于紋理邊界截取方式的設(shè)置也只有GL_CLAMP、GL_CLAMP_TO_EDGE和GL_CLAMP_TO_BORDER3中。 OSG中使用TextureRectangle類表達這種紋理類型,其功能函數(shù)與Texture2D相同。 三維虛擬儀表的繪制 三維虛擬儀表背景模板的繪制 繪制背景模板的流程圖如圖54所示。圖 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。osg::ref_ptrosg::ShapeDrawable shape = new osg::ShapeDrawable(new osg::Box(osg::Vec3(, , ), ,),())。…… 然后將shape加載到幾何節(jié)點geode中去,這樣一個沒有任何光澤的扁平長方體平板就畫好了,運行效果如圖57所示。圖57 運行效果圖然后我們需要對其進行設(shè)置材質(zhì),顏色、紋理等等。設(shè)置材質(zhì)我們要用到Material類,它的繼承關(guān)系如圖58所示。圖58 osg::Material關(guān)系繼承圖設(shè)置顏色則比較簡單,我們只需建立一個顏色數(shù)組即可,然后對長方體的每個頂點設(shè)置它的顏色就行了。設(shè)置紋理則相對復雜些,它需要讀入一張圖片,這張圖片則是我們要設(shè)置的紋理,并且需要用到texture2D類和StateSet類。其繼承關(guān)系分別如圖59,510所示。圖59 osg::Texture2D關(guān)系繼承圖圖510 osg::StateSet類的繼承關(guān)系圖 在OSG中,osg::Texture紋理的通用類的基本定義如表57所示。表57 osg::Texture2D類的基本定義Texture2D默認構(gòu)造函數(shù)Texture2D(Image*Image)構(gòu)造函數(shù)。以一個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(,))。 //設(shè)置材質(zhì) materialsetAmbient(osg::Material::FRONT_AND_BACK,osg::Vec4f(,))。 materialsetDiffuse(osg::Material::FRONT_AND_BACK,osg::Vec4f(,))。 materialsetSpecular(osg::Material::FRONT_AND_BACK,osg::Vec4f(,))。 materialsetShininess(osg::Material::FRONT_AND_BACK,)。 //設(shè)置紋理image=osgDB::readImageFile(Image/)。//獲取一張紋理圖片 if(()) { texture2DsetImage(())。 } geodegetOrCreateStateSet()setAttributeAndModes((),osg::StateAttribute::ON)。 geodegetOrCreateStateSet()setMode(GL_BLEND,osg::StateAttribute::ON)。 geodegetOrCreateStateSet()setMode(GL_DEPTH_TEST,osg::StateAttribute::ON)。 geodegetOrCreateStateSet()setTextureAttributeAndModes(0,(),osg::StateAttribute::ON)?!ㄟ^這些類以及代碼的實現(xiàn)我們就能繪制出這個真實富有色彩的三維虛擬儀表的背景模板——扁平長方體平板了,這個平板不僅富有真實感,有棱有角,好看,還能朝著不同的方向轉(zhuǎn)動和從各個不同的角度觀看以及放大和縮小,運行效果如圖511所示。圖511 運行效果圖 三維虛擬儀表刻度表的繪制 繪制刻度表的流程圖如圖512所示。在現(xiàn)實生活中的三維虛擬儀表都是一個類似于鐘表的表盤,只不過指針指向的刻度不僅僅是時間,還可以是速度或其它數(shù)據(jù)的大小,所以我們需要畫一個外圓,外圓內(nèi)側(cè)則是度量刻度,它代表速度的值,中心則是畫一根可以轉(zhuǎn)動的指針,由于繪制三維虛擬儀表刻度表相對復雜一些,于是可以在主函數(shù)main()外建立一個函數(shù)createFace()來繪制三維虛擬儀表的刻度表,這樣做會使主函數(shù)的功能更加清晰、明朗。在函數(shù)里面,我們先畫三維虛擬儀表刻度表的外圓,然后再畫外圓里面的度量刻度,最后畫指針。首先也是通過osg::ref_ptrosg::Geode geode = new osg::Geode新建一個幾何節(jié)點,畫圓的思路是先畫出101個頂點,然后將這101個頂點用線連接起來就圍成一個圓,101個頂點相當于把這個圓平均分成100份,所以就要初始化一個頂點數(shù)組Vertices,數(shù)組里面包括101個頂點,即:osg::ref_ptrosg::Vec3Array vertices = new osg::Vec3Array(101)。然后 再對第一個頂點進行初始化,再利用for循環(huán)通過依次增加的角度來繪出其余100個頂點,最后通過PrimitiveSet類設(shè)置頂點的關(guān)聯(lián)方式就能畫好一個圓。PrimitiveSet類的繼承關(guān)系如圖513所示。圖512 繪制刻度表的流程圖圖513 osg::PrimitiveSet類的繼承關(guān)系圖在OSG中使用PrimitiveSet類來表達圖元組的信息,如果沒有設(shè)置任何圖元組,幾何體對象將無法正常工作,圖元組是用于實現(xiàn)頂點索引機制,將頂點數(shù)據(jù)有序地構(gòu)成不同幾何形狀的重要方式。PrimitiveSet類按照與OpenGL相似的方式,定義了10種圖元類型,用于構(gòu)成任意復雜程度的,由點、線以及多邊形面片組成的物體,如表58所示。表58 PrimitiveSet類的定義圖元類型對應(yīng)OpenGL圖元描述POINTSGL_ POINTS繪制用戶指定的所有頂點LINESGL_ LINES繪制直線。直線的起點、終點由數(shù)組中先后相鄰的兩個點決定;用戶提供的點不止兩個時,將嘗試繼續(xù)繪制新的直線LINES_STRIPGL_ LINES_STRIP繪制多段直線條帶。多段直線的第一段由數(shù)組中的前兩個點決定;其余段的起點位置為上一段的終點坐標,而終點位置由數(shù)組中隨后的點決定LINES_LOOPGL_ LINES_LOOP繪制封閉直線。繪圖方式與多段直線相同,但是最后將自動封閉該直線TRIANGLESGL_ TRIANGLES繪制三角形。三角形的3個頂點由數(shù)組中相鄰的3個點決定,并按照逆時針的順序進行繪制;用戶提供的點不止3個時,將嘗試繼續(xù)繪制新的三角形TRIANGLE_ STRIPGL_ TRIANGLE_ STRIP繪制多段三角形條帶。第一段三角形的3個頂點由數(shù)組中的前3個點決定;其余三角形的繪制,其始邊由上一段三角形的后兩個點決定 續(xù)表TRIANGLE_FANGL_ TRIANGLE_FAN繪制三角形面。第一段三角形的3個頂點由數(shù)組中的前3個點決定,其余段三角形的繪制,起始邊由整個數(shù)組的第一點和上一段三角形的最后一個點決定,第三點由數(shù)組中隨后的一點決定QUADSGL_ QUADS繪制四邊形。四邊形的4個頂點由數(shù)組中的相鄰4個點決定,并按照逆時針的順序進行繪制;用戶提供的點不止4個時,將嘗試繼續(xù)繪制新的四邊形QUADS_ STRIPGL_ QUADS_ STRIP繪制多段四邊形條帶。第一段四邊形的起始邊由數(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)。//定義一個頂點數(shù)組,共個 (*vertices)[0].set( , , )。//初始化第一個頂點在(,)處//依次繪制剩下的100個頂點 for ( unsigned int i=1。 i=100。 ++i ) { float angle = (float)i * osg::PI / 。 (*vertices)[i].set( radius * cosf(angle), , radius * sinf(angle)+5 )。 }…… 就這樣我們就畫好了外圓,畫好外圓后,我們就琢磨著畫圓里面的刻度了,實際生活中的儀表刻度類似于一條條線段,所以畫度量刻度可以用一條條短的線段表示,然后再設(shè)置線寬就能比較真實地反映出刻度。我們通過for循環(huán),每循環(huán)一次都建立一個geometry
點擊復制文檔內(nèi)容
數(shù)學相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1