日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > Delphi > 正文

NeHe的opengl教程delphi版(6)----紋理映射(貼圖)

2019-11-18 18:32:36
字體:
供稿:網(wǎng)友
 

{

貼圖可以極大的節(jié)省CPU時間。呵呵,但是這一節(jié)費了我比較多的時間 : (

因為用到了opengl的輔助庫,現(xiàn)在這個庫的函數(shù)已經(jīng)很少有人用了,但是我還是找到了,感謝zdcnow(磁效應(yīng)),他給我提供的這個輔助庫的delphi版本。在學(xué)習(xí)本節(jié)之前,請大家到網(wǎng)上下載glaux.dll、Glaux.pas文件,并加到項目中。

好了,讓我們繼續(xù)OPENGL之路.

首先我們需要加進SysUtils單元,因為我們這節(jié)要用到文件操作,我們還要將Glaux單元加進來。

然后我們在第一課的基礎(chǔ)上加上幾個變量,xrot , yrot 和 zrot 。這些變量用來使立方體繞X、Y、Z軸旋轉(zhuǎn)。texture[] 為一個紋理分配存儲空間。如果您需要不止一個的紋理,應(yīng)該將數(shù)字1改成您所需要的數(shù)字。

}

VAR

   h_RC             : HGLRC;            // Rendering Context(著色描述表)。
   h_DC             : HDC;              // Device Context(設(shè)備描述表)
   h_Wnd            : HWND;             // 窗口句柄
   h_Instance       : HINST;            // 程序Instance(實例)。
   keys             : Array[0..255] Of Boolean; // 用于鍵盤例程的數(shù)組

   xrot,                                // X 旋轉(zhuǎn)量 ( 新增 )
   yrot,                                // Y 旋轉(zhuǎn)量 ( 新增 )
   zrot             : GLfloat;          // Z 旋轉(zhuǎn)量 ( 新增 )

  Texture          : Array[0..1] Of GLuint; // 存儲一個紋理 ( 新增 )

{然后引載入opengl32.dll中的兩個過程,我們要用到他們}


PRocedure glGenTextures(n: GLsizei; Var textures: GLuint); stdcall; external
   opengl32;
Procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external
   opengl32;

{接下來我們需要增加一個新的函數(shù),用來再入圖像,該函數(shù)的返回類型在Glaux.pas中定義如下:

TAUX_RGBImageRec= record
       sizeX, sizeY: GLint;
        data: pointer;
          end;
 PTAUX_RGBImageRec= ^TAUX_RGBImageRec;

具體含義會在后面介紹}

Function LoadBmp(filename: pchar): PTAUX_RGBImageRec;
Var
   BitmapFile       : Thandle;          // 文件句柄
Begin
   //接下來檢查文件名是否已提供
   If Filename = '' Then                // 確保文件名已提供。
      result := Nil;                    // 如果沒提供,返回 NULL
   //接著檢查文件是否存在。
   BitmapFile := FileOpen(Filename, fmOpenWrite); //嘗試打開文件
   //如果我們能打開文件的話,很顯然文件是存在的。

   If BitmapFile > 0 Then               // 文件存在么?
      Begin
         //關(guān)閉文件。
         FileClose(BitmapFile);         // 關(guān)閉句柄
         //auxDIBImageLoad(Filename) 讀取圖象數(shù)據(jù)并將其返回。
         result := auxDIBImageLoadA(filename); //載入位圖并返回指針
      End
   Else
      //如果我們不能打開文件,我們將返回NiL。
      result := Nil;                    // 如果載入失敗,返回NiL。
End;

//接下來在創(chuàng)建一個新函數(shù),用來載入紋理貼圖

Function LoadTexture: boolean;

//Status 的變量。我們使用它來跟蹤是否能夠載入位圖以及能否創(chuàng)建紋理。
// Status 缺省設(shè)為 FALSE (表示沒有載入或創(chuàng)建任何東東)。
//TextureImage變量PTAUX_RGBImageRec類型  存儲位圖的圖像記錄。
//次記錄包含位圖的寬度、高度和數(shù)據(jù)。

Var
   Status           : boolean;
   TextureImage     : Array[0..1] Of PTAUX_RGBImageRec;
Begin
   Status := false;
   ZeroMemory(@TextureImage, sizeof(TextureImage)); // 將指針設(shè)為 NULL
   TextureImage[0] := LoadBMP('Texture.bmp');
   If TextureImage[0] <> Nil Then
      Begin
         Status := TRUE;                // 將 Status 設(shè)為 TRUE
         //現(xiàn)在使用中 TextureImage[0] 的數(shù)據(jù)創(chuàng)建紋理。
         //glGenTextures(1, texture[0]) 告訴OpenGL我們想生成一個紋理名字
         //(如果您想載入多個紋理,加大數(shù)字)。
         //glBindTexture(GL_TEXTURE_2D, texture[0]) 告訴OpenGL將紋理名字 texture[0] 綁定到紋理目標(biāo)上。
         //2D紋理只有高度(在 Y 軸上)和寬度(在 X 軸上)。
         //主函數(shù)將紋理名字指派給紋理數(shù)據(jù)。
         //本例中我們告知OpenGL, &texture[0] 處的內(nèi)存已經(jīng)可用。
         //我們創(chuàng)建的紋理將存儲在 &texture[0] 的 指向的內(nèi)存區(qū)域。
         glGenTextures(1, texture[0]);  // 創(chuàng)建紋理
         glBindTexture(GL_TEXTURE_2D, texture[0]);  // 使用來自位圖數(shù)據(jù)生成 的典型紋理
         //下來我們創(chuàng)建真正的紋理。
         //下面一行告訴OpenGL此紋理是一個2D紋理 ( GL_TEXTURE_2D )。
         //數(shù)字零代表圖像的詳細(xì)程度,通常就由它為零去了。
         //數(shù)字三是數(shù)據(jù)的成分?jǐn)?shù)。因為圖像是由紅色數(shù)據(jù),綠色數(shù)據(jù),藍(lán)色數(shù)據(jù)三種組分組成。
         //TextureImage[0].sizeX 是紋理的寬度。
         //如果您知道寬度,您可以在這里填入,但計算機可以很容易的為您指出此值。
         // TextureImage[0].sizey 是紋理的高度。
         //數(shù)字零是邊框的值,一般就是零。
         // GL_RGB 告訴OpenGL圖像數(shù)據(jù)由紅、綠、藍(lán)三色數(shù)據(jù)組成。
         //GL_UNSIGNED_BYTE 意味著組成圖像的數(shù)據(jù)是無符號字節(jié)類型的。
         //最后... TextureImage[0].data 告訴OpenGL紋理數(shù)據(jù)的來源。
         //此例中指向存放在 TextureImage[0] 記錄中的數(shù)據(jù)。

         // 生成紋理
         glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0].sizeX,
            TextureImage[0].sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE,
            TextureImage[0].data);

         //下面的兩行告訴OpenGL在顯示圖像時,
         //當(dāng)它比放大得原始的紋理大(GL_TEXTURE_MAG_FILTER)
         //或縮小得比原始得紋理小(GL_TEXTURE_MIN_FILTER)時OpenGL采用的濾波方式。
         //通常這兩種情況下我都采用 GL_LINEAR。這使得紋理從很遠(yuǎn)處到離屏幕很近時都平滑顯示。
         //使用 GL_LINEAR需要CPU和顯卡做更多的運算。
         //如果您的機器很慢,您也許應(yīng)該采用 GL_NEAREST 。
         //過濾的紋理在放大的時候,看起來斑駁的很(馬賽克啦)。
         //您也可以結(jié)合這兩種濾波方式。在近處時使用 GL_LINEAR ,遠(yuǎn)處時 GL_NEAREST 。
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);  // 線形濾波
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);  // 線形濾波
      End;
   //現(xiàn)在我們釋放前面用來存放位圖數(shù)據(jù)的內(nèi)存。
   //我們先查看位圖數(shù)據(jù)是否存放在處。
   //如果是的話,再查看數(shù)據(jù)是否已經(jīng)存儲。
   //如果已經(jīng)存儲的話,刪了它。
   //接著再釋放 TextureImage[0] 圖像結(jié)構(gòu)以保證所有的內(nèi)存都能釋放。
   If assigned(TextureImage[0]) Then    // 紋理是否存在
      If assigned(TextureImage[0].data) Then // 紋理圖像是否存在
         TextureImage[0].data := Nil;   // 釋放紋理圖像占用的內(nèi)存
   TextureImage[0] := Nil;              // 釋放圖像結(jié)構(gòu)
   // 最后返回狀態(tài)變量。如果一切OK,變量 Status 的值為 TRUE 。否則為 FALSE
   result := Status;                    // 返回 Status
End;


上一篇:在Delphi中自己建立交叉表

下一篇:正確看待《Delphi高手突破》最后一章的實例

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

国产视频二区| 日韩中文字幕视频在线观看| 国产日韩中文在线| 婷婷精品视频| 亚洲制服一区| 日韩精品视频在线看| 欧美日韩一二| 亚洲国产专区| 亚州福利视频| 欧美国产中文| 91精品国产自产在线观看永久∴| 日韩欧美999| 91精品婷婷国产综合久久竹菊| 欧美不卡一二三| 精品亚洲国内自在自线福利| 久久精品欧美日韩精品| 欧美日韩国产一区| 日韩精品视频免费看| 国产黄色在线播放| 精品国产乱码久久久久久牛牛| 亚州黄色一级| 日韩欧美国产高清91| 亚洲福利精品视频| 日韩精品资源二区在线| 91精品婷婷国产综合久久竹菊 | 一区二区三区精品99久久| 精品无人国产偷自产在线| 欧美日韩久久久| 国产一级片在线播放| 久久99精品国产| 国产日产一区二区| 中文字幕亚洲视频| 天堂√8在线中文| 色99中文字幕| 日韩高清不卡一区| 精品一区二区在线观看视频| 久久精品免费看| 亚洲综合日韩中文字幕v在线| 日韩精品视频在线观看视频| 日韩在线二区| 精品国产欧美日韩不卡在线观看| 日韩欧美国产高清| 最近高清中文在线字幕在线观看| 欧美日韩国产大片| 日韩高清不卡在线| 国产网站av| wwwwww国产| 日韩欧美国产免费播放| 亚洲丝袜一区| 国产超级va在线视频| 日韩.欧美.亚洲| 亚洲第一精品在线| 日韩欧美中文字幕在线观看| 精品国产欧美| 精品国产免费视频| 日韩欧美中文字幕在线观看| 精品国产99久久久久久 | 91精品观看| 最近高清中文在线字幕在线观看1| 91精品国产色综合久久久蜜香臀| 日韩欧美三级| 久久人人88| 天天综合天天| 中文字幕国产日韩| 91精品网站| 日韩欧美亚洲区| 欧美在线日韩在线| 欧美熟妇乱码在线一区| 中文字幕在线播出| 国产午夜在线观看| 亚洲一级网站| 国产午夜精品久久| 91欧美日韩麻豆精品| 亚洲天堂视频一区 | 国产黄色在线观看| 欧美日韩尤物久久| 国产v日产∨综合v精品视频| 中文字幕一区不卡| 亚洲欧美99| 国产高清一区| 午夜一区二区三区| 国产欧美日韩视频在线| а√天堂8资源中文在线| av免费观看国产| 国产一区日韩| 欧美三级中文字幕| 一级国产黄色片| 中文字幕在线观看播放| 国产视频一区三区| 欧美亚洲视频在线看网址| 中文字幕一区二区三区精品| 日韩欧美在线综合| 久久 天天综合| 国产视频97| 日韩欧美国产高清91| 中文字幕4区| 91精品啪在线观看国产60岁 | 麻豆一区二区99久久久久| 日韩视频在线观看视频| 在线国产1区| 国产欧美一级| 欧美日韩免费不卡视频一区二区三区| 天堂中文在线视频| 亚洲福利视频专区| 精品国产欧美日韩不卡在线观看| 日韩av在线中文字幕| 成人欧美亚洲| 欧美激情视频一区二区三区在线播放 | 亚洲高清免费一级二级三级| 国产丝袜在线播放| 亚洲福利精品| va中文字幕| 日本精品二区| 久久99久久久久久久噜噜| 在线视频你懂得一区| 1024国产在线| 日韩影院二区| 在线一区免费| 一区二区三区在线免费| 国产传媒久久久| 日韩在线精品| 日韩欧美在线1卡| 亚洲一区在线观看网站| 天天综合日日夜夜精品| 国产欧美三级| 国产欧美日韩在线看| 一区二区三区久久| 欧美日韩乱国产| 亚洲国产午夜精品| 亚洲福利在线看| 亚洲中文字幕在线一区| 日韩中文字幕综合| 日韩欧美色综合网站| 欧美一级日韩不卡播放免费 | 欧美不卡视频一区| 久久99久久久久| 国产欧美第一页| 日韩三级视频中文字幕| 成人a在线观看| 在线视频亚洲| 午夜一区二区三区| 亚洲三级欧美| 99在线精品视频免费观看20| 日韩免费视频一区| 国产日产一区二区三区| 精品久久久精品| 日韩高清不卡| 久久精品久久精品国产大片| 日韩午夜高潮| 第一页在线观看| 欧美日韩国产专区| 亚洲第一视频在线观看| 中文字幕 亚洲视频| 一区二区三区在线不卡| 精品在线99| 国产中文在线播放| 区日韩二区欧美三区| 国产久卡久卡久卡久卡视频精品| 亚洲图片小说综合| 日韩 国产 一区| 欧美亚洲视频在线看网址| 久久99精品久久久| 色综合久久六月婷婷中文字幕| 99精品视频国产| 欧美日韩国产一二三| 日韩久久99| 91精品日本| 精品国产欧美日韩| 欧美日韩高清| 欧美日韩91| 国内精品露脸在线视频播放| 精品熟女一区二区三区| 免费网站看黄yyy222| 国产乱国产乱老熟300| 精品免费久久久| 国产黄在线观看| 国产91久久久久| 一区二区三区视频网站| 国产福利免费观看| 精品久久久久久无| 日韩精品在线免费观看| 不卡一二三区| 国产成人精品网址| 欧美一级日韩不卡播放免费| 国产福利久久| 中文字幕无线码一区| 一级一片免费视频| 婷婷综合福利| 色综合天天性综合| 国产高清不卡av| 欧美人妻一区二区三区| 欧美日韩在线播放视频| 日韩精品视频在线| 亚洲一区中文字幕在线观看| 欧美三级中文字幕| 一级片免费在线| 久久精品在线观看| av中文资源在线| 久久99久久久久| 欧美日韩精品免费在线观看视频| 午夜国产福利一区二区| 你懂的亚洲视频| 欧美日韩国产高清一区| 国产一二三区精品视频| 亚洲精品中文字幕乱码三区| 日韩在线视频观看| 日韩欧美专区在线| 二区三区中文字幕| 欧美日韩在线第一页| 免费在线视频一级不卡| 午夜一区二区三区视频| 午夜高潮免费视频| 欧美日韩综合视频| 久久网站免费观看| 国产色在线 com| 91精品国产99| 亚洲视频中文字幕| 国产高清精品二区| av免费观看网站| 欧美在线视频第一页| 国产欧美日韩在线观看| 国产免费播放一区二区| av中文在线资源| 美日韩精品免费视频| 视频一区中文字幕国产| 搞黄在线观看| 日韩欧美中文字幕视频| 国产午夜精品视频免费不卡69堂| 日韩欧美一级在线播放| 蜜桃精品视频| 日韩三级视频中文字幕| 国产日韩1区| 精品久久在线| 亚洲三级免费看| 中文字幕国产亚洲| 亚洲成av人片在线| 欧美日韩国产高清一区| 91久久大香伊蕉在人线| 久久蜜桃一区二区| 国产欧美日韩视频在线| 中文字幕日韩高清| 久久综合九色欧美综合狠狠| 国产日韩成人精品| 日韩在线视频网| 国产一级网站视频在线| 日韩视频一区| 亚洲大片精品永久免费| 欧美 日韩 国产 在线观看| 一区二区视频国产| a天堂中文在线官网在线| 日本精品在线| 日本黄色一区二区| 国产一级在线播放| 精品视频国产| 99精品一级欧美片免费播放| 久艹在线视频| 日韩精品在线看| 日韩中文字幕在线视频播放 | 国产视频中文字幕在线观看| 午夜亚洲一区| 日韩三级视频在线播放| 色www精品视频在线观看| 国产欧美日韩中文字幕在线| 在线日韩欧美| 日本精品福利视频| 国产福利一区二区| 91色在线看| 欧美高清视频一区二区三区| 国产丝袜一区| 国产中文伊人| a视频免费在线观看| 久久99蜜桃精品| 天堂在线中文资源| 国产在线导航| 国产一级在线免费观看| 国产日韩av一区二区| 国产一二三四| 国产资源在线观看| 国产在线播放一区二区| 一区二区中文视频| 久久精品在线观看| 日韩欧美国产一二三区| 国产一区成人| 国产高清一级片| 中文在线中文字幕| 国产极品嫩模在线视频一区| 欧美亚洲天堂网| 免费看黄资源大全高清| 国产欧美日韩91| 国产成人一二三区| 欧美日韩高清在线播放| 久久综合久久综合九色| 国产亚洲一区字幕| 欧美日韩国产片| 日韩wumaV| 极品久久久久久| 亚洲视频日韩| 日韩精品三级| 日韩精品a在线观看91| 青青国产91久久久久久| 午夜亚洲一区| 亚洲成av人片| 黄色片网站在线| 久久蜜桃精品| 成人精品国产福利| 日韩美女中文字幕| 国产视频aaa| 日韩一级网站| 色欧美日韩亚洲| 一级片免费在线播放| 交视频在线观看国产| 国产自产视频| 日韩欧美一级在线播放| 亚洲一区在线观看免费| 国产日韩中文字幕在线| 国产91大片| 久久久99免费| 日韩在线观看视频一区二区| 中文字幕高清在线播放| 国产乱国产乱300精品| 日本熟女一区二区| 精品久久香蕉国产线看观看gif| 91极品视频在线观看| 99视频一区| 国产色在线视频| 日韩欧美在线看| 久久香蕉一区| 亚洲第一福利视频在线| 先锋男人资源站| 日本不卡免费高清视频| 久久久精品国产免费观看同学| 欧美亚洲国产日韩2020| 欧美大片在线观看一区| 国产视频二区| 狠狠色综合色区| 久久 天天综合| 亚洲一区资源| 中文 欧美 日韩| 欧美日韩精品综合| 亚洲免费精品视频| 欧美日韩国产专区| 国产福利一区二区| 精品日韩在线观看| 一区免费在线| 中文在线视频| 精品一性一色一乱农村| 一区二区视频免费看| 一区二区在线观| 久久久精品国产免费观看同学| 伊人精品视频| 在线国产一级| 日韩区欧美区| 日韩精品视频在线看| 91一区二区| 精品免费视频| 中文字幕综合在线| 日韩av一区二区在线| 天天综合日日夜夜精品| 国产欧美中文在线| 91精品国产91久久| 国产欧美 在线欧美| 免费在线视频一区二区| 国产激情在线| 麻豆精品99| 国产成人一二三区| 福利在线国产| 在线亚洲免费| 激情综合色综合久久| 午夜一区二区三区| 亚洲天堂国产视频| 快she精品国产999| 欧美日韩高清在线| 午夜一区二区视频| 欧美三级精品| 国产成人精品日本亚洲专区61| 7799精品视频天天看| 最新中文字幕在线| 国产真实乱子伦精品视频| 五月综合激情日本mⅴ| 久久视频免费看| 亚洲黄在线观看| 久久riav| 91久久精品午夜一区二区| 日韩免费不卡avV| 日韩精品a在线观看91| 欧美专区中文字幕| 九九九精品视频| 国产永久免费高清在线观看| 久久麻豆视频| 亚洲羞羞网站| 国产在线观看黄色| 亚洲免费在线视频一区 二区| 二区三区中文字幕| www高清在线视频日韩欧美| 国产99精品| 国产一区精品| 精品熟女一区二区三区| 欧美日韩性视频在线| 日韩免费视频一区二区| 国产乱码在线|