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之一,它在一...