免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

opengl一個可以運行的立方體貼圖-創新互聯

對于開始學習opengl的人來說 下載一個可以運行的代碼,對自己的鼓舞極大,但是網上下載的程序大多數由于這樣那樣的原因不能運行.有時會抱怨:照抄的啊 咋不行呢?其實原因很簡單 主要是環境變了 庫配置不對 版本不對 有的庫是debug 而有的是release 所以導致不能運行.

網站建設哪家好,找創新互聯!專注于網頁設計、網站建設、微信開發、微信小程序定制開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了榆樹免費建站歡迎大家使用!

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

/ fangkuai.cpp : 定義控制臺應用程序的入口點。

//

#include "stdafx.h"

#include "glut.h"  //引用相關包

#include <windows.h>

#include "glaux.h"> //用的是擴展庫

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

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

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

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

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

GLfloat  xrot;  // X 旋轉量

GLfloat  yrot;  // Y 旋轉量

GLfloat  zrot;  // Z 旋轉量

GLuint  texture[1];  // 存儲一個紋理

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

{

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

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

 {

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

 }

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

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

 {

 fclose(File);     // 關閉句柄

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

 }

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

}

int LoadGLTextures()     // 載入位圖(調用上面的代碼)并轉換成紋理

{

 int Status=FALSE;     // 狀態指示器

 AUX_RGBImageRec *TextureImage[1];   // 創建紋理的存儲空間 這里創建一個

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

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

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

 {

 Status=TRUE;     // 將 Status 設為 TRUE

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

 // 使用來自位圖數據生成 的典型紋理

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

 // 生成紋理

 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);   // 釋放紋理圖像占用的內存

 }

 free(TextureImage[0]);    // 釋放圖像結構

 }

 return Status;      // 返回 Status

}

//繪制立方體

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

{

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

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

 glTranslatef(0.0f,0.0f,-5.0f);     // 移入屏幕 5 個單位 網屏幕深處移動

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

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

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

 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 軸旋轉

 yrot+=0.2f;        // Y 軸旋轉

 zrot+=0.4f;        // Z 軸旋轉

}

void display(void)

{

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

  glLoadIdentity();                   // Reset The View

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

  DrawCube();

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

}

//初始化

void init (void)

{

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

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

  glEnable(GL_CULL_FACE);             //啟用裁剪

  glEnable(GL_TEXTURE_2D);

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

}

//當窗口大小改變時,會調用這個函數

void reshape(GLsizei w,GLsizei h)

{

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

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

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

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

  glLoadIdentity();         //變為單位矩陣

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

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

  glLoadIdentity();         //變為單位矩陣

}

//鍵盤輸入事件函數

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

{

 switch(key)

 {

 case 'd':   //當按下鍵盤上d時,以沿X軸旋轉為主

 xrot+=1.0f;  //設置旋轉增量

 glutPostRedisplay();  //重繪函數

 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 ();                 //初始化資源,這里一定要在創建窗口以后,不然會無效。

 LoadGLTextures();

  glutDisplayFunc(display);

 glutReshapeFunc(reshape);         //繪制圖形時的回調

  glutKeyboardFunc(keyboard);

  glutMainLoop();

  return 0;

}

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

文章標題:opengl一個可以運行的立方體貼圖-創新互聯
文章出自:http://m.newbst.com/article36/diocpg.html

成都網站建設公司_創新互聯,為您提供網站維護App設計響應式網站標簽優化App開發云服務器

廣告

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

手機網站建設