成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

opengl一個(gè)可以運(yùn)行的立方體貼圖-創(chuàng)新互聯(lián)

對于開始學(xué)習(xí)opengl的人來說 下載一個(gè)可以運(yùn)行的代碼,對自己的鼓舞極大,但是網(wǎng)上下載的程序大多數(shù)由于這樣那樣的原因不能運(yùn)行.有時(shí)會(huì)抱怨:照抄的啊 咋不行呢?其實(shí)原因很簡單 主要是環(huán)境變了 庫配置不對 版本不對 有的庫是debug 而有的是release 所以導(dǎo)致不能運(yùn)行.

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了榆樹免費(fèi)建站歡迎大家使用!

下面這個(gè)例子是紋理貼圖: 圖片必須是能被2整除的 比如 128X128  512X512 文件名:MF.bmp 保證你運(yùn)行而且可以手動(dòng)控制旋轉(zhuǎn) ,由于開始貼在正面,所以你看到的是平面.按D鍵 立即旋轉(zhuǎn).

/ fangkuai.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。

//

#include "stdafx.h"

#include "glut.h"  //引用相關(guān)包

#include <windows.h>

#include "glaux.h"> //用的是擴(kuò)展庫

#include <stdio.h> //基本IO口函數(shù)庫 本例主要是讀文件

#pragma comment( lib, "winmm.lib")//這個(gè)是加載聲音

#pragma comment( lib, "opengl32.lib")

#pragma comment( lib, "glu32.lib")

#pragma comment( lib, "glaux.lib")

GLfloat  xrot;  // X 旋轉(zhuǎn)量

GLfloat  yrot;  // Y 旋轉(zhuǎn)量

GLfloat  zrot;  // Z 旋轉(zhuǎn)量

GLuint  texture[1];  // 存儲(chǔ)一個(gè)紋理

AUX_RGBImageRec *LoadBMP(CHAR *Filename)   // 載入位圖圖象

{

 FILE *File=NULL;     // 文件句柄

 if (!Filename)      // 確保文件名已提供

 {

 return NULL;     // 如果沒提供,返回 NULL

 }

 File=fopen(Filename,"r");    // 嘗試以讀方式打開文件

 if (File)      // 文件存在么?

 {

 fclose(File);     // 關(guān)閉句柄

 return auxDIBImageLoadA(Filename);   // 載入位圖并返回指針

 }

 return NULL;      // 如果載入失敗,返回 NULL

}

int LoadGLTextures()     // 載入位圖(調(diào)用上面的代碼)并轉(zhuǎn)換成紋理

{

 int Status=FALSE;     // 狀態(tài)指示器

 AUX_RGBImageRec *TextureImage[1];   // 創(chuàng)建紋理的存儲(chǔ)空間 這里創(chuàng)建一個(gè)

 memset(TextureImage,0,sizeof(void *)*1);  // 將指針設(shè)為 NULL

 // 載入位圖,檢查有無錯(cuò)誤,如果位圖沒找到則退出

 if (TextureImage[0]=LoadBMP("mf.bmp"))  //加載位圖  AUX只支持bmp格式

 {

 Status=TRUE;     // 將 Status 設(shè)為 TRUE

 glGenTextures(1, &texture[0]);   // 創(chuàng)建紋理

 // 使用來自位圖數(shù)據(jù)生成 的典型紋理

 glBindTexture(GL_TEXTURE_2D, texture[0]);//依據(jù)加載的位圖創(chuàng)建紋理

 // 生成紋理

 glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 線形濾波

 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // 線形濾波

 }

 if (TextureImage[0])     // 紋理是否存在

 {

 if (TextureImage[0]->data)    // 紋理圖像是否存在

 {

  free(TextureImage[0]->data);   // 釋放紋理圖像占用的內(nèi)存

 }

 free(TextureImage[0]);    // 釋放圖像結(jié)構(gòu)

 }

 return Status;      // 返回 Status

}

//繪制立方體

void DrawCube(void)     // 從這里開始進(jìn)行所有的繪制

{

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度緩存

 glLoadIdentity();     // 重置當(dāng)前的模型觀察矩陣

 glTranslatef(0.0f,0.0f,-5.0f);     // 移入屏幕 5 個(gè)單位 網(wǎng)屏幕深處移動(dòng)

 glRotatef(xrot,1.0f,0.0f,0.0f);     // 繞X軸旋轉(zhuǎn)

 glRotatef(yrot,0.0f,1.0f,0.0f);     // 繞Y軸旋轉(zhuǎn)

 glRotatef(zrot,0.0f,0.0f,1.0f);     // 繞Z軸旋轉(zhuǎn)

 glBindTexture(GL_TEXTURE_2D, texture[0]);    // 選擇紋理

 glBegin(GL_QUADS);//繪制正方形

 // 前面

 glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); // 紋理和四邊形的左下

 glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); // 紋理和四邊形的右下

 glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f); // 紋理和四邊形的右上

 glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f); // 紋理和四邊形的左上

 // 后面

 glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 紋理和四邊形的右下

 glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); // 紋理和四邊形的右上

 glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); // 紋理和四邊形的左上

 glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 紋理和四邊形的左下

 // 頂面

 glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); // 紋理和四邊形的左上

 glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f); // 紋理和四邊形的左下

 glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f); // 紋理和四邊形的右下

 glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); // 紋理和四邊形的右上

 // 底面

 glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 紋理和四邊形的右上

 glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 紋理和四邊形的左上

 glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); // 紋理和四邊形的左下

 glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); // 紋理和四邊形的右下

 // 右面

 glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 紋理和四邊形的右下

 glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); // 紋理和四邊形的右上

 glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f); // 紋理和四邊形的左上

 glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); // 紋理和四邊形的左下

 // 左面

 glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 紋理和四邊形的左下

 glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); // 紋理和四邊形的右下

 glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f); // 紋理和四邊形的右上

 glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); // 紋理和四邊形的左上

 glEnd();

  glFlush();  //立即有效

 xrot+=0.3f;        // X 軸旋轉(zhuǎn)

 yrot+=0.2f;        // Y 軸旋轉(zhuǎn)

 zrot+=0.4f;        // Z 軸旋轉(zhuǎn)

}

void display(void)

{

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   // 清楚顏色數(shù)據(jù)和深度數(shù)據(jù)(清屏)

  glLoadIdentity();                   // Reset The View

  glTranslatef(0.0f,0.0f,-5.0f);//旋轉(zhuǎn)

  DrawCube();

  glutSwapBuffers();       //交換緩沖區(qū)。顯示圖形

}

//初始化

void init (void)

{

  glClearColor (0.0, 0.0, 1.0, .0);       //清理顏色,為黑色,(也可認(rèn)為是背景顏色) 透明色不能是背景透明

  glCullFace(GL_BACK);             //背面裁剪(背面不可見)

  glEnable(GL_CULL_FACE);             //啟用裁剪

  glEnable(GL_TEXTURE_2D);

  LoadGLTextures();       //載入紋理貼圖

}

//當(dāng)窗口大小改變時(shí),會(huì)調(diào)用這個(gè)函數(shù)

void reshape(GLsizei w,GLsizei h)

{

  //這里小說明一下:矩陣模式是不同的,他們各自有一個(gè)矩陣。投影相關(guān)

  //只能用投影矩陣。(只是目前情況下哦,等我學(xué)多了可能就知道為什么了。)

  glViewport(0,0,w,h);     //設(shè)置視口

  glMatrixMode(GL_PROJECTION);   //設(shè)置矩陣模式為投影變換矩陣,GL_PROJECTION  GL_TEXTURE

  glLoadIdentity();         //變?yōu)閱挝痪仃?/p>

  gluPerspective(60, (GLfloat)w / h, 0, 1000);   //設(shè)置投影矩陣

  glMatrixMode(GL_MODELVIEW);     //設(shè)置矩陣模式為視圖矩陣(模型)

  glLoadIdentity();         //變?yōu)閱挝痪仃?/p>

}

//鍵盤輸入事件函數(shù)

void keyboard(unsigned char key,int x,int y)

{

 switch(key)

 {

 case 'd':   //當(dāng)按下鍵盤上d時(shí),以沿X軸旋轉(zhuǎn)為主

 xrot+=1.0f;  //設(shè)置旋轉(zhuǎn)增量

 glutPostRedisplay();  //重繪函數(shù)

 break;

 case 's':

 yrot+=1.0f;

 glutPostRedisplay();

 break;

 case 'a':

 zrot+=1.0f;

 glutPostRedisplay();

 break;

 default:

 break;

 }

}

int main(int argc, char *argv[])

{

  glutInit(&argc, argv);  //固定格式

  glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

  glutInitWindowSize(600, 600);   //顯示框的大小

  glutInitWindowPosition(100,100); //確定顯示框左上角的位置

  glutCreateWindow("OpenGL紋理貼圖");

 init ();                 //初始化資源,這里一定要在創(chuàng)建窗口以后,不然會(huì)無效。

 LoadGLTextures();

  glutDisplayFunc(display);

 glutReshapeFunc(reshape);         //繪制圖形時(shí)的回調(diào)

  glutKeyboardFunc(keyboard);

  glutMainLoop();

  return 0;

}

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章標(biāo)題:opengl一個(gè)可以運(yùn)行的立方體貼圖-創(chuàng)新互聯(lián)
文章出自:http://jinyejixie.com/article36/diocpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)App設(shè)計(jì)、響應(yīng)式網(wǎng)站標(biāo)簽優(yōu)化、App開發(fā)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
濮阳县| 会东县| 内乡县| 涿鹿县| 星子县| 南阳市| 潢川县| 古蔺县| 巴塘县| 秦安县| 泾阳县| 嘉祥县| 茌平县| 嘉兴市| 涿鹿县| 桓台县| 棋牌| 临夏县| 龙门县| 临湘市| 张家口市| 绵阳市| 同心县| 朝阳市| 海阳市| 平罗县| 武清区| 东阿县| 海南省| 南汇区| 江阴市| 陈巴尔虎旗| 盐池县| 新宾| 阳曲县| 吴江市| 富阳市| 岳西县| 黎川县| 无棣县| 黑龙江省|