OPENGL入門函式

2021-04-18 18:25:03 字數 3534 閱讀 6932

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_********s)的意思是開始繪製三角形

……它們之間的點都是以三點為乙個集合的,這同樣適用於四邊形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)//載入位圖圖象

// 如果沒提供,返回 null

file=fopen(filename,"r");

// 嘗試開啟檔案

if (file)

// 檔案存在麼?

return null;

// 如果載入失敗,返回 null

}int loadgltextures()//載入位圖(呼叫上面的**)並轉換成紋理

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

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)的白色環境光。

如果沒有環境光,未被漫射光照到的地方會變得十分黑暗。

glfloat lightdiffuse= ;

// 漫射光引數

glfloat lightposition= ;

// 光源位置

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 鍵已按下並且鬆開了?

else                                            // 否則

}if (!keys['l'])

// l鍵鬆開了麼?

if (keys[vk_prior])

// pageup按下了?

if (keys[vk_prior])

// pageup按下了?

混合(

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通道值的半透明混合函式

OpenGL入門學習

include 太陽 地球和月亮 假設每個月都是30天 一年12個月,共是360天 static int day 200 day的變化 從0到359 void mydisplay void void myidle void int main int argc,char argv 3 關於垂直同步co...

OpenGL入門學習

說起程式設計作圖,大概還有很多人想起tc的 include 吧?但是各位是否想過,那些畫面絢麗的pc遊戲是如何編寫出來的?就靠tc那可憐的640 480解析度 16色來做嗎?顯然是不行的。本帖的目的是讓大家放棄tc的老舊圖形介面,讓大家接觸一些新事物。opengl作為當前主流的圖形api之一,它在一...

OpenGL入門學習

說起程式設計作圖,大概還有很多人想起tc的 include 吧?但是各位是否想過,那些畫面絢麗的pc遊戲是如何編寫出來的?就靠tc那可憐的640 480解析度 16色來做嗎?顯然是不行的。本帖的目的是讓大家放棄tc的老舊圖形介面,讓大家接觸一些新事物。opengl作為當前主流的圖形api之一,它在一...