第32課拾取,alpha混合測(cè)試_第1頁(yè)
第32課拾取,alpha混合測(cè)試_第2頁(yè)
第32課拾取,alpha混合測(cè)試_第3頁(yè)
第32課拾取,alpha混合測(cè)試_第4頁(yè)
第32課拾取,alpha混合測(cè)試_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

32Alpha混合Alpha測(cè)試:歡迎來(lái)到32.這課大概是在我所寫作已來(lái)最大的一課.超過1000行代碼和約1540L.這也是第一課用到我新的NeHeGL基本代碼.這課寫了很長(zhǎng)時(shí)間,但他是值得期待的.一些知識(shí)點(diǎn)用到是:Alpha混合,Alpha測(cè)試,鼠標(biāo),同時(shí)用到Ortho和,顯示客戶鼠標(biāo),按深度排列物體,動(dòng)畫幀從單張材質(zhì)圖和要點(diǎn),你將學(xué)到精選的內(nèi)容!最初的版本是在屏幕上顯示三個(gè)物體,當(dāng)你單擊他們將改變顏色.很有趣!?!不怎樣!象往常樣,給這些家伙留下一個(gè)超極好的課程.使課程有趣,豐富當(dāng)然..美觀.所以,經(jīng)過幾個(gè)星期的編碼之后,這課程完成了!即使你不編碼,你仍會(huì)喜歡這課.這是個(gè)完整的.的目標(biāo)是射擊的靶子,在你失去一定數(shù)的靶子后,你將不能再用鼠標(biāo)單擊物體.我確信會(huì)有批評(píng),但我非常樂觀對(duì)這課!我已在從深度里選擇和排序物體這個(gè)里找到一些需要注意的代碼.我僅僅會(huì)在lesson32.cpp里.有一些不成改動(dòng)在NeHeGL代里.最重要的改動(dòng)是我加入鼠標(biāo)支持在WindowProc().我也加入intmouse_x,mouse_y在存鼠標(biāo)運(yùn)動(dòng).在NeHeGL.h以下兩條代碼被加入:externintmouse_x;&externintmouse_課程用到的材質(zhì)是用AdobePhotoshop做的.每個(gè).TGA文件是32位有一個(gè)alpha通道.若你不確信自已能在一個(gè)加入alpha通道,找一本好書,上網(wǎng),或讀AdobePhotoshop幫助.全部的過程非常相似程.調(diào)入你物體在AdobePhotoshop(或一些其它圖形處理程序,且支持alpha通道).用選擇顏色工具選你的背景.選區(qū).新建一個(gè)圖.粘貼生成新文件.取消選擇你圖的背景應(yīng)是黑色.使周圍是白色.選全部圖.回到最初的圖且建一個(gè)alpha通道.粘貼黑和白透明圖你就完成建立alpha通道.存為32位t.TGA文件.使確定保存透明背景是選中的,保存!如以往我希望你喜歡這課程.我感你對(duì)他的想法.若你有些問題或你發(fā)現(xiàn)一些問題,告訴我.我匆忙的完成這課程所以若你發(fā)現(xiàn)哪部分很難懂,給我發(fā)些郵件,然后我會(huì)用不同的方式或更詳細(xì)的解釋!#include<windows.h>#include<stdio.h>#include<stdarg.h>#include<time.h>#include"NeHeGL.h"在第1里,我提倡關(guān)于適當(dāng)?shù)姆椒ㄟB接到OpenGL庫(kù).在VisualC++里點(diǎn)擊’項(xiàng)目’,設(shè)置,連接項(xiàng).移下到對(duì)象/庫(kù)模塊加入OpenGL32.lib,GLu32.lib和GLaux.lib.預(yù)編譯一個(gè)需要的庫(kù)將使編譯器找出所出的錯(cuò)誤.有時(shí)你不想發(fā)生!使事情更壞,若你僅僅預(yù)編譯庫(kù)在debug模式,和有人試在release模式建立你程序...的錯(cuò)誤.有許多人看代碼.他們大多數(shù)是新程序員.他們?nèi)〉侥愕拇a,試著編譯.他們得到錯(cuò)誤,刪掉代碼,移走.下而的代碼告訴編譯者去連接需要的庫(kù).一點(diǎn)多些的字,但少些以后的頭痛.在這個(gè)課程,連接OpenGL32庫(kù),GLu32庫(kù)和WinMM庫(kù)(用來(lái)放音樂).在這課程會(huì)調(diào)入.TGA文件所以我們不用GLaux"opengl32.lib" 在時(shí)連接Opengl32.lib"glu32.lib" glu32.lib"winmm.lib" winmm.lib下而的3行檢查若CDS_FULLSCREEN已被你的編譯器定義.若還沒被定義,給CDS_FULLSCREEN為4.馬上你完全部丟掉...一些編譯器不給CDS_FULLSCREEN變量,將返回一個(gè)錯(cuò)誤,但是CDS_FULLSCREEN是有用的!防止出錯(cuò)消息,檢查若CDS_FULLSCREEN是否定義,若出錯(cuò),定義他.使每人生活更簡(jiǎn)單再定義Draws函數(shù),為窗口和按鍵設(shè)變量.你若不懂定義,讀一遍MSDN術(shù)語(yǔ)表.保持清醒,我不是教C/C++,買一本好書若你對(duì)非gl幫助! CDS_FULLSCREEN4voidDrawGL_Window* 下面的代碼是用戶設(shè)置變量.base是將用到的字體顯示列表的開始列表值.roll是將用到的移動(dòng)的大地和建立旋轉(zhuǎn)的云.level應(yīng)是級(jí)別(開始是1級(jí)).miss保留失去了多少物體.他還用來(lái)顯示用戶的士氣(不丟失意味著高士氣).kills保留每級(jí)打到多少靶子.score會(huì)保存運(yùn)行時(shí)打中的總數(shù),同時(shí)用到結(jié)束比賽!最后一行是讓通過結(jié)構(gòu)比較的函數(shù).是等待qsort最后參數(shù)到type(const*void,const*//////旋轉(zhuǎn)的////////當(dāng)前的分 typedefint(*compfn)(constvoid*,const //定義用來(lái)比較的函現(xiàn)在為物體的結(jié)構(gòu).這個(gè)結(jié)構(gòu)存了所有一個(gè)物體的信息.旋轉(zhuǎn)的方向,若被打中,在屏幕的位置,等等.一個(gè)快速運(yùn)動(dòng)的變量...rot讓物體旋轉(zhuǎn)特別的方向.hit若物體沒被打中將是FALSE.若物體給打中或飛出,變量將是TRUE.變量frame是用來(lái)存動(dòng)畫的周期.每一幀改變?cè)黾右粋€(gè)材質(zhì).在這課有在用變量dir.dir個(gè)值:0-物體左移,-體右移,2-和最后3-texid是從04數(shù).0表示是藍(lán)面材質(zhì),1是水桶材質(zhì),2是靶子的材質(zhì),3是可樂的材質(zhì)和4是花瓶材質(zhì).最近在調(diào)入材質(zhì)的代碼,你將看到先前5種材質(zhì)來(lái)自目標(biāo).x和y兩者都用來(lái)記屏模上物體的位置.x表示物體在x-軸,y表示物體在y-軸物體在z-軸上的旋轉(zhuǎn)是記在變量spin.在以后的代碼,加或減spin基數(shù)在旅行的方向上最后,distance保存物體到屏幕的距離.距離是重要的變量,用他來(lái)計(jì)算屏幕的左右兩邊,而且在對(duì)象關(guān)閉之前排序物體,畫出物體的距離.structobjectsGLuint //旋轉(zhuǎn)(0-不轉(zhuǎn),1-順時(shí)針轉(zhuǎn),2-逆時(shí)針轉(zhuǎn)bool //GLuint //當(dāng)前效果的動(dòng)畫GLuint //物體的方向(0-左,1-右,2-上,3-下GLuinttexid; //物體材質(zhì)IDGLfloatx; //物體X位置GLfloaty; //物體Y位置GLfloatspin; //物體旋轉(zhuǎn)GLfloatdistance; //物體距離解釋下面的代碼沒有真正的結(jié)果.在這課調(diào)入TGA圖代替bitmaps.下面的用來(lái)表示TGA圖片數(shù)據(jù)的結(jié)構(gòu)是盡可能好的.若你需要詳細(xì)的解釋下面的代碼TGA文件的課程.typedef //新建一個(gè)結(jié){GLubyte*imageData; //數(shù)據(jù)(最大32位)GLuintbpp; //顏色深度每象素GLuint //寬GLuint //高GLuint //貼圖材質(zhì)ID用來(lái)選擇一個(gè)材} //結(jié)構(gòu)名緊接下面的代碼為們10個(gè)材質(zhì)和個(gè)30物體留出空間.若你打算在里加物體得增加這個(gè)變量TextureImage //定義10材objects //定義30我不想限制每個(gè)物體的大小.瓶子(vase)比can高,水桶bucket比瓶子寬.去改變一切是簡(jiǎn)單的,我建了一個(gè)結(jié)構(gòu)存物體的寬和高.我然后在最后一行代碼中設(shè)每個(gè)物體的寬高.得到這個(gè)cokecans寬,我將檢查size[3].w.藍(lán)面是0,水桶是1,和靶子是2,等.寬度表現(xiàn)在w.使有意義?structdimensions //物體維GLfloat //GLfloat ////每個(gè)物體的大小:藍(lán)面,水桶,靶子,可樂,瓶dimensionssize[5]={{1.0f,1.0f},{1.0f,1.0f},{1.0f,1.0f},{0.5f,1.0f},{0.75f,1.5f}};下面是大段代碼是調(diào)入TGA和轉(zhuǎn)換他為材質(zhì).這是同我在第25課所用的一樣的代碼你可我用TGA的原因是他們是有alpha通道的.這個(gè)alpha通道告訴OpenGL哪一部分圖是透明的,哪一部分是白底.alpha通道是被建立在處理程序,并保存在.TGA里面.OpenGL調(diào)入,能用alpha通道設(shè)置中每個(gè)象素透明的數(shù)量.boolLoadTGA(TextureImage*texture,char //調(diào)入一個(gè)TGA文件到內(nèi){ (未)壓縮的TGA //用來(lái)比較TGA //首先6個(gè)有用 //每象素字節(jié)數(shù)在文件使 //用來(lái)大小 // //設(shè)置默認(rèn)的GL模為FILE*file=fopen(filename, //打開TGA文if(file==NULL //文件是否已存在 pare)||//是否讀出12個(gè)字節(jié)? pare,sizeof(TGAheader))!=0|| //文件頭是不是想要的? //若正確則讀下6個(gè)Bytes{if(file==NULL) //文件是否已存在?returnFALSE; //返回錯(cuò)誤 //否{ //若有任何錯(cuò)誤,關(guān)掉文return //返回錯(cuò)}} =header[1]*256+ //定義TGAtexture->height=header[3]*256+ //定義TGAif(texture->width<=0|| //若寬<=0texture->height<=0|| //若高<=0(header[4]!=24&& //若TGA是24or32位{ //若有任何錯(cuò)誤,關(guān)掉文return //返回錯(cuò)}texture->bpp=header[4]; //取TGA的位每象素(24或32)bytesPerPixel=texture->bpp/8; //除以8得到字節(jié)每象素 =texture->width*texture->height*bytesPerPixel; //計(jì)算所需內(nèi)存為TGA數(shù)據(jù)texture->imageData=(GLubyte //分配內(nèi)存為TGA數(shù)if(texture->imageData==NULL //這個(gè)內(nèi)存是否存在fread(texture->imageData,1,imageSize,file)!=imageSize) //大小與保留內(nèi)存的大小想等?{ //數(shù)據(jù)的調(diào) //若成功 圖象數(shù) //return //返回錯(cuò)}fLuinti=0;i<int(imageSize); //在圖象數(shù)據(jù)里循 //交換第1和第3Bytes(’紅’red和’藍(lán)’blue) //臨時(shí)圖象的’i’texture->imageData[i]=texture->imageData[i+2]; //設(shè)第1Byte得到變量第3Bytetexture->imageData[i+2]=temp; //設(shè)第3Byte得到變量’temp1Byte變量)}fclose //關(guān)掉文//建立一個(gè)貼圖材質(zhì)從以上數(shù)glGenTextures(1, //生成OpenGL材質(zhì)glBindTexture(GL_TEXTURE_2D,texture[0].texID); //綁定的材質(zhì)glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); //線過濾器glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, //線過濾if //若TGA24位{ //設(shè)’type’為}glTexImage2D(GL_TEXTURE_2D,0,type,texture[0].width,texture[0].height,0,type,GL_UNSIGNED_BYTE,texture[0].imageData);return //材質(zhì)建立成功,返回正}2D字體材質(zhì)代碼同我已一課用的是一樣的.然而,有一些小不同.第一是你將看到僅僅唯一生成95顯示列表.若你看字體材質(zhì),你會(huì)看到只有95字母計(jì)算空間在頂,左.第二個(gè)事是你將通知分在16.0f為cx和只分在8.0f為cy.我這樣做的結(jié)果是因?yàn)樽煮w材質(zhì)是256象素寬,但僅僅一伴就高(128象素).所以計(jì)算cx分為16.0f和計(jì)算分cy為一半(8.0f).若你不懂下面的代碼,回去讀17.建立字體的代碼的詳細(xì)解釋在第17GLvoid //建立字體顯示列{ //建立95顯示列表glBindTexture(GL_TEXTURE_2D,textures[9].texID); //綁字體材質(zhì)for(intloop=0;loop<95;loop++) //循環(huán)在95列表{float //X位置在當(dāng)前字float //Y位置在當(dāng)前字 //開始建 //用四邊形組成每個(gè)字 1.0f-cy-0.120f);glVertex2i(0,0);//質(zhì)地/點(diǎn)座標(biāo)(底左)glTexCoord2f(cx+0.0625f,1.0f-cy-0.120f);glVertex2i(16,0);//質(zhì)地/點(diǎn)座標(biāo)(底右)glTexCoord2f(cx+0.0625f,1.0f-cy); glVertex2i(16,16);//質(zhì)地/點(diǎn)座標(biāo)(頂右) glVertex2i(0,16);//質(zhì)地/點(diǎn)座標(biāo)(頂左) //完成建 的四邊形(字母 //移到字體的右 //完成建軍立這個(gè)顯示列表 //循環(huán)直到所有256}輸出的代碼也在第17課,但已修改為在屏幕輸出的分?jǐn)?shù),等級(jí)和士氣(不斷改變的值GLvoid置{GLvoid置{GLinty,constchar*string, //保存在的字符 //if(string== //若文字為 //返va_start(ap,string,//轉(zhuǎn)換字符 //結(jié)果的字符glBindTexture(GL_TEXTURE_2D, //選擇字體材 //存模式矩 //設(shè)模式矩 //文字輸出位置(0,0-底左-BottomLeft) //選擇字體設(shè)置glCallLists(strlen(text),GL_UNSIGNED_BYTE, //輸出顯示列表中的文 //取出以前的模式矩陣}這些代碼調(diào)用排序程序.它比較距離在兩個(gè)結(jié)構(gòu)并返回-1若第一個(gè)結(jié)構(gòu)的距離小于第二個(gè),1若第一個(gè)結(jié)構(gòu)的距離大于第二個(gè)0否則(若距離相等intCompare(structobjects*elem1,structobjects //比較函{if(elem1->distance<elem2 //若第一個(gè)結(jié)構(gòu)的距離小于第二個(gè)return-//返回-elseif(elem1->elem2-//返回 //否則(若距離相等)return0; //返回0}InitObject()代碼是來(lái)建立每個(gè)物體.開始設(shè)rot為1.這使物體順時(shí)針旋轉(zhuǎn).然后設(shè)效果動(dòng)畫幀為0(不想效果從中間開始).下面設(shè)hit為FALSE,意思是物體還沒被或正開如.選一個(gè)物體材質(zhì),texid用來(lái)給一個(gè)隨機(jī)的變量從0到4.0blueface材質(zhì)和4是vase材質(zhì).這給5種隨機(jī)物體距離變量是在-0.0fto-40.0f(4000/100is40)的隨機(jī)數(shù).當(dāng)真實(shí)的畫物體,透過在屏幕上的另10個(gè)單位.所以當(dāng)物體在畫時(shí),他們將畫從-10.0fto-50.0f單位在屏幕(不挨著,也不離得太遠(yuǎn)).我分隨機(jī)數(shù)為100.0f得到更精確的浮點(diǎn)數(shù)值.在給完隨機(jī)的距離之后,給物體一個(gè)隨機(jī)的y.不想物體低于-1.5f,否則他將低于大地,且不想物體高于3.0f.所以留在的區(qū)間的隨機(jī)數(shù)不能高于4.5f(-1.5f+4.5f=3.0f).去計(jì)算x位置,用一些狡猾的數(shù)學(xué).用的距離減去15.0f.除以2減5*level.再減隨機(jī)數(shù)(0.0f到5)乘level.減5*levelrndom(0.0fto5*level)這是.使事情簡(jiǎn)單明白x,寫一個(gè)快的例子.距離是-30.0f,當(dāng)前級(jí)是object[num].x=(-22.5f)-5-{letssay開始在屏模上移10個(gè)單位,距離是-30.0f.其實(shí)是-40.0f.用的代碼在NeHeGL.cpp文件.GLvoidInitObject(int //初始化一{ //順時(shí)針旋 //設(shè)效果動(dòng)畫幀為 //設(shè)點(diǎn)擊檢測(cè)為0 //設(shè)一個(gè)材質(zhì) //隨機(jī)距離 //隨機(jī)Y位置//隨機(jī)開始X位置基于物體的距離和隨機(jī)的延時(shí)量(確定變量) //選一個(gè)隨機(jī)的方向if //若隨機(jī)的方{ // //開始在左邊(否定}現(xiàn)在檢查texid來(lái)找出所選的的物體.若texid為0,所選的物體是Blueface.blueface總是在大地上面旋轉(zhuǎn).確定開始時(shí)在地上的層,設(shè)y是-2.0f.if //藍(lán)色天空表 //總是在大地上面旋下面檢查若texid是1.這樣,電腦所選物體的是Bucket.bucket不從左到右運(yùn)動(dòng),它從天上掉下來(lái).首先不得不設(shè)dir是3.這告訴電腦的水桶bucket是掉下來(lái)或向下運(yùn)動(dòng).最初的代碼假定物體從左到右運(yùn)動(dòng).因?yàn)閎ucket是向下落的,得不給它一個(gè)新的隨機(jī)的變量x.若不是這樣,bucket會(huì)被看不到.它將不在左邊落下就在屏幕外面.給它一個(gè)新的隨機(jī)距離變量在屏幕上.代替減去15,僅僅減去10.這給一些幅度,保持物體在屏幕??.設(shè)的distance是-30.0f,從0.0f-40.0f的隨量.為什么從0.0f到f?不是從0.0fto-40.0f?答案很簡(jiǎn)單.rand()函數(shù)總返回正數(shù).所以總是正數(shù).另外,回到的故事.有個(gè)正數(shù)從0.0f到40.0f.加距離最小10.0f除以2.舉個(gè)例子,x量為15,距離是-object[num].x=float(15{assuming15wasreturned))+(-20.0f);下面設(shè)y.想水桶從天上下來(lái).我人不想穿過云.所以設(shè)y為4.5f.剛在去的下面一if //水桶{ //下 //隨機(jī)X,開始在屏模上}想靶子從地面突出到天上.檢查物體為(texid是2).若是,設(shè)方向(dir)是2(上).用精確的數(shù)x位置.不想開始在地上.設(shè)y初值為-3.0f(在).然后減一個(gè)值從0.0f到5乘當(dāng)前l(fā)evel.靶子不是立即出現(xiàn).在高級(jí)別是有延時(shí),delay,靶子將出現(xiàn)在一個(gè)在另一個(gè)以后,給你很少時(shí)間打到他們.if //靶{ //開始向上 //隨機(jī)X,開始在下面的大地+隨變}所有其它的物體從右到左旅行,因而不必給任何變量付值來(lái)改變物體.它們應(yīng)該剛好工作在所給的隨現(xiàn)在來(lái)點(diǎn)有趣的材料!"為了alpha混合技術(shù)正常的工作,透明的原物必須不斷地排定在從后向前".當(dāng)畫alpha混合物體是,在遠(yuǎn)處的物體是先畫的,這是非常重要的,下面畫緊臨的上面的物體理由是簡(jiǎn)單的...Z緩沖區(qū)防止OpenGL從已畫好的混合東西再畫象素.這就是為什么會(huì)發(fā)生物體畫在透明混合之后而不再顯示出來(lái).為什么你最后看到的是一個(gè)四邊形與物體...很不好看!已知道每個(gè)物體的深度.因而在初始化一個(gè)物體之后,能通過把物體排序,而用qsort函數(shù)(快速排序sort),來(lái)解決這個(gè)問題.通過物體排序,能確信第一個(gè)畫的是最遠(yuǎn)的物體.這意味著當(dāng)畫物體時(shí),起始于第一個(gè)物體,物體通過用距離將被先畫.緊挨著那個(gè)物體(晚一會(huì)兒畫)將看到先前的物體在他們的后面,再將適度的混合這文中的這行線注釋是我在MSDN網(wǎng)上花時(shí)間查找之后找到的解答.他們工作的很好,允許各種的排序結(jié)構(gòu).qsort傳送4個(gè)參數(shù).第一個(gè)參數(shù)指向物體數(shù)組(被排序的數(shù)組d).第二個(gè)參數(shù)是想排序數(shù)組的個(gè)數(shù)...當(dāng)然,想所有的排序的物體普遍的被顯示(各個(gè)level).第三個(gè)參數(shù)規(guī)定物體結(jié)構(gòu)的大不,第四個(gè)參數(shù)指向的Compare()函數(shù).大概有更好的排序結(jié)構(gòu)的方法,但是qsort()工作起來(lái)...這個(gè)是重要的知識(shí)點(diǎn),若想用glAlphaFunc()和glEnable(GL_ALPHA_TEST),排序是沒必要的.然而,用Alpha功能你被限制在完全透明或完全白底混合,沒有中間值.用Blendfunc()排序用一些的工作,但他顧及半透明物體.//排序物體從距離:物體數(shù)組的開始地址***MSDN代碼修改為這個(gè)TUT***//各種的數(shù)//各自的要素的//qsort((void*)&object,level,sizeof(structobjects),(compfn)Compare}初始化的代碼總是一樣的.首先的現(xiàn)兩行取得window的消息和建盤消息.然后用srand()建一個(gè)基于時(shí)間的多樣化的.之后調(diào)入TGA并用LoadTGA()轉(zhuǎn)換到材質(zhì).先前的5個(gè)是將穿過屏幕的物體.Explode是動(dòng)畫,大地和天空彌補(bǔ)現(xiàn)場(chǎng)背景,crosshair是你在屏幕上看到表現(xiàn)鼠標(biāo)當(dāng)前位置的光標(biāo),最后,用來(lái)顯示分?jǐn)?shù),標(biāo)題和士氣值的字體的圖片.若任何調(diào)入的,則到返回FALSE值,并程序結(jié)束.值得注意的是這些基本代碼不是返回整數(shù)型(INIT)的FAILED錯(cuò)誤消息.BOOLInitialize(GL_Window*window,Keys* //任何OpenGL{g_window=window; =keys;srand((unsigned)time(NULL) //使隨機(jī)化事件if((!LoadTGA(&textures[0],"Data/BlueFace.tga"))|| //調(diào)入藍(lán)面材質(zhì)(!LoadTGA(&textures[1],"Data/Bucket.tga"))|| //調(diào)入水桶材質(zhì)(!LoadTGA(&textures[2],"Data/.tga"))|| //調(diào)入靶子材質(zhì)(!LoadTGA(&textures[3],"Doke.tga"))|| //調(diào)入可樂材質(zhì)(!LoadTGA(&textures[4],"Data/Vase.tga"))|| //調(diào)入花瓶材質(zhì)(!LoadTGA(&textures[5],"Data/Explode.tga"))|| //調(diào)入材質(zhì)(!LoadTGA(&textures[6],"Data/Ground.tga"))|| //調(diào)入地面材質(zhì)(!LoadTGA(&textures[7],"Data/Sky.tga"))|| //調(diào)入天空材質(zhì) rosshair.tga"))|| //調(diào)入 光標(biāo)材質(zhì) //調(diào)入字符材{return //若調(diào)入失敗,}若所有調(diào)入成功則輪到材質(zhì),能繼續(xù)初始化.字體材質(zhì)被調(diào)入,因而保險(xiǎn)能建立的字體.跳入BuildFont()來(lái)做這些.然后設(shè)置OpenGL.背景色為黑,alpha也設(shè)為0.0f.深度緩沖區(qū)設(shè)為激活小于或等于測(cè)試glBlendFunc()是很重要的一行代碼.設(shè)混合函數(shù)(GL_SRC_ALPHA,A).這些加上alpha變量的屏幕上的混合物體存在物體的材質(zhì).在設(shè)置混合模式之后,激活blending(混合).然后打開2D材質(zhì)貼圖,最后,打開GL_CULL_FACE.這是去除每個(gè)物體的后面(沒有一點(diǎn)浪費(fèi)在一些看不到的循環(huán)).畫一些四邊形逆時(shí)針卷動(dòng),因而精致而適當(dāng)?shù)拿嫫缦鹊奈艺務(wù)撌褂胓lAlphaFunc()代替alpha混合.若你想用Alpha函數(shù),注釋出的兩行混合代碼和不注釋的兩行在glEnable(GL_BLEND)之下.你也能注釋出qsort()函數(shù)在InitObject()部分里程序應(yīng)該運(yùn)行ok,但sky為sky質(zhì)已是一個(gè)alpha變量0.5f.當(dāng)早在我說(shuō)關(guān)于Alpha數(shù)工作在alpha變量0或1.若你想它出現(xiàn),你將不得不修改sky材質(zhì)alpha通道!再則,若你決定用Alpha函數(shù)代替,你不得排序物體.兩個(gè)方法都有好處!再下而是從SGI的快速:"alpha函數(shù)丟棄細(xì)節(jié),代替畫他們?cè)诮Y(jié)構(gòu)緩沖器里.因此排序原來(lái)的物體不是必須的(除了一些其它像混合alpha開的).不占優(yōu)勢(shì)的是象素必須完全白底或完全透明". //建立的字體顯示列g(shù)lClearColor(0.0f,0.0f,0.0f,0.0f); //黑色背景 //安裝深度緩沖器 //深度的類型測(cè)試 //打開深度測(cè)glBlendFunc(GL_SRC_ALPHA, //打開Alpha混//設(shè)Alpha測(cè)//打開Alpha測(cè)//打開材質(zhì)貼//在程序的這段,還沒有物體被定義,所以循環(huán)30都調(diào)for(intloop=0;loop<30;loop++) //循環(huán)在30個(gè)物體Objects //初始化每個(gè)物體return //返回正確(設(shè)初值成功}在初始化代碼里,調(diào)入BuildFont()建立95的顯示列表.所以這里在程序結(jié)束前刪掉95表voidDeinitialize //任何user{glDele //刪掉所有95字體顯示列}現(xiàn)在為急速原始物體...是實(shí)際被選?形鍰宓拇?.第一行為選擇物體的信息分配內(nèi)存.hits是當(dāng)選擇時(shí)碰撞迅檢測(cè)的次數(shù).void{//這是選擇正GLuint GLint下面的代碼,若結(jié)束(FALSE).沒有選任何,返回(exit).若還在運(yùn)行(TRUE),用Playsound()命令放射擊

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論