OPENGL入門函數

來源:互聯網
上載者:User
glLoadIdentity()// 重設當前的模型觀察矩陣調用,glLoadIdentity()之後,您實際上將當前點移到了螢幕中心。 glTranslatef(x, y, z) //沿著 X, Y 和 Z 軸移動。glTranslatef(-1.5f,0.0f,-6.0f);//沿著X軸左移1.5個單位,Y軸不動(0.0f),最後移入螢幕6.0f個單位當您用函數移動的時候,您並不是相對螢幕中心移動,而是相對與當前所在的螢幕位置。 畫多邊形過程: glBegin(GL_TRIANGLES) 的意思是開始繪製三角形……它們之間的點都是以三點為一個集合的,這同樣適用於四邊形 GL_QUADS。glVertex 的第一個參數是X座標,然後依次是Y座標和Z座標。第一個點是上頂點,然後是左下頂點和右下頂點。 glEnd() 告訴OpenGL三角形已經建立好了。 色彩值:色彩值的範圍從0.0f到1.0f。0.0f代表最黑的情況,1.0f就是最亮的情況。glClearColor 後的第一個參數是Red Intensity(紅色分量),第二個是綠色,第三個是藍色。glColor3f(r,g,b)。括弧中的三個參數依次是紅、綠、藍三色分量。 旋轉角度:GLfloat          rtri;                       // 定義用於三角形的角度GLfloat          rquad;                   // 定義用於四邊形的角度glRotatef(Angle,Xvector,Yvector,Zvector)           //負責讓對象繞某個軸旋轉。rtri+=0.2f;                                         // 增加三角形的旋轉變數(速度)—置於參數Angle中rquad-=0.15f;                                    // 減少四邊形的旋轉變數 載入映像:映像的寬和高必須是2的n次方;寬度和高度最小必須是64象素;並且出於相容性的原因,映像的寬度和高度不應超過256象素。如果您的原始素材的寬度和高度不是64,128,256象素的話,使用影像處理軟體重新改變映像的大小。可以肯定有辦法能繞過這些限制,但現在我們只需要用標準的紋理尺寸。AUX_RGBImageRec *LoadBMP(char *Filename)       // 載入位元影像圖象{       FILE *File=NULL;                                           // 檔案控制代碼if (!Filename)                                                   // 確保檔案名稱已提供              {return NULL;}                                        // 如果沒提供,返回 NULLFile=fopen(Filename,"r");                                  // 嘗試開啟檔案if (File)                                                            // 檔案存在麼?       {              fclose(File);                                              // 關閉控制代碼              return auxDIBImageLoad(Filename);           // 載入位元影像並返回指標       }return NULL;                                                   // 如果載入失敗,返回 NULL}  int LoadGLTextures()                   // 載入位元影像( 調用上面的代碼) 並轉換成紋理{int Status=FALSE;                                            // 狀態指示器AUX_RGBImageRec *TextureImage[1];             // 建立紋理的儲存空間memset(TextureImage,0,sizeof(void *)*1);         // 將指標設為 NULL// 載入位元影像,檢查有無錯誤,如果位元影像沒找到則退出if (TextureImage[0]=LoadBMP("Data/NeHe.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);//上面一行告訴OpenGL此紋理是一個2D紋理 ( GL_TEXTURE_2D )。參數“0”代表映像的詳細程度,通常就由它為零去了。參數三是資料的成分數。因為映像是由紅色資料,綠色資料,藍色資料三種組分組成。 TextureImage[0]->sizeX 是紋理的寬度。如果您知道寬度,您可以在這裡填入,但電腦可以很容易的為您指出此值。 TextureImage[0]->sizey 是紋理的高度。參數零是邊框的值,一般就是“0”。 GL_RGB 告訴OpenGL映像資料由紅、綠、藍三色資料群組成。GL_UNSIGNED_BYTE 意味著組成映像的資料是無符號位元組類型的。最後... TextureImage[0]->data 告訴OpenGL紋理資料的來源。此例中指向存放在 TextureImage[0] 記錄中的資料。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}  繪製貼圖(紋理映射)過的立方體:glTexCoord2f 的第一個參數是X座標。   0.0f 是紋理的左側。1.0f 是紋理的右側。 glTexCoord2f 的第二個參數是Y座標。                0.0f 是紋理的底部。 1.0f 是紋理的頂部。 一般表達方式: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); // 紋理和四邊形的左上……glEnd();  光照:GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f };            // 環境光線參數我們得到的是半亮(0.5f)的白色環境光線。如果沒有環境光線,未被漫射光照到的地方會變得十分黑暗。GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f };                     // 漫射光參數GLfloat LightPosition[]= { 0.0f, 0.0f, 2.0f, 1.0f };                    // 光源位置int InitGL(GLvoid)中設定:glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);     // 設定環境光線glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); // 設定漫射光glLightfv(GL_LIGHT1, GL_POSITION, LightPosition);     // 設定光源位置glEnable(GL_LIGHT1);                                                   // 啟用一號光源  鍵盤控制:if (keys['L'] && !lp)                           // L 鍵已按下並且鬆開了?{lp=TRUE;                                   // lp 設為 TRUElight=!light;                                 // 切換光源的 TRUE/FALSEif (!light)                                    // 如果沒有光源       {              glDisable(GL_LIGHTING);   // 禁用光源       }       else                                            // 否則       {              glEnable(GL_LIGHTING);    // 啟用光源       }}if (!keys['L'])                                     // L鍵鬆開了麼?{       lp=FALSE;                                  // 若是,則將lp設為FALSE}if (keys[VK_PRIOR])                         // PageUp按下了?{       z-=0.02f;                      // 若按下,將木箱移向螢幕內部}if (keys[VK_PRIOR])                         // PageUp按下了?{       z-=0.02f;                      // 若按下,將木箱移向螢幕內部} 混合(Blend ):絕大多數人都認為Alpha分量代表材料的透明度。這就是說,alpha值為0.0時所代表的材料是完全透明的。alpha值為1.0時所代表的材料則是完全不透明的。glColor4f(1.0f,1.0f,1.0f,0.5f);                                  // 全亮度, 50% Alpha 混合(GL_RGBA)glBlendFunc(GL_SRC_ALPHA,GL_ONE);          // 基於源象素alpha通道值的半透明混合函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.