設定太陽光(平行光)
在設定不同材質的球體,觀察光照效果
; // 光源的位置
glfloat sun_light_ambient = ;
glfloat sun_light_diffuse = ;
glfloat sun_light_specular = ;
gllightfv(gl_light0, gl_position, sun_light_position); //指定第0號光源的位置
gllightfv(gl_light0, gl_ambient, sun_light_ambient); //gl_ambient表示各種光線照射到該材質上,
//經過很多次反射後最終遺留在環境中的光線強度(顏色)
gllightfv(gl_light0, gl_diffuse, sun_light_diffuse); //漫反射後~~
gllightfv(gl_light0, gl_specular, sun_light_specular);//鏡面反射後~~~
glenable(gl_light0); //使用第0號光照
glenable(gl_lighting); //在後面的渲染中使用光照
glenable(gl_depth_test); //這句是啟用深度測試,這樣,在後面的物體會被擋著,例如房子後面有棵樹,如果不啟用深度測試,
//你先畫了房子再畫樹,樹會覆蓋房子的;但啟用深度測試後無論你怎麼畫,樹一定在房子後面(被房子擋著)
}glpushmatrix();
// 定義乙個球體
;glfloat earth_mat_diffuse = ; // 漫反射的顏色(也就是該物件的顏色) 定義了黃色的
glfloat earth_mat_specular = ; // 材質的鏡面反射顏色 定義了白色
glfloat earth_mat_emission = ; // 材質發射出的光的顏色,定義發出微微的黃色的光
glfloat earth_mat_shininess = 15.0f; // 球體比較的光滑
glmaterialfv(gl_front, gl_ambient, earth_mat_ambient);
glmaterialfv(gl_front, gl_diffuse, earth_mat_diffuse);
glmaterialfv(gl_front, gl_specular, earth_mat_specular);
glmaterialfv(gl_front, gl_emission, earth_mat_emission);
glmaterialf(gl_front, gl_shininess, earth_mat_shininess);
gltranslatef(5.0f, 0.0f, 0.0f);
//如果使用glutsolidsphere函式來繪製球體,則該函式會自動的指定這些法線向量,
//不必再手工指出。如果是自己指定若干的頂點來繪製乙個球體,則需要自己指定法線向量。
glutsolidsphere(2.3, 40, 32);
}glpopmatrix();
glpushmatrix();
// 定義乙個球體
;glfloat earth_mat_diffuse = ; // 淺綠色的球
glfloat earth_mat_specular = ;
glfloat earth_mat_emission = ;
glfloat earth_mat_shininess = 110.0f; // 球體比較粗糙
// gl_ambient 材質的環境顏色
glmaterialfv(gl_front, gl_ambient, earth_mat_ambient);
// gl_diffuse 材質的散射顏色
glmaterialfv(gl_front, gl_diffuse, earth_mat_diffuse);
// gl_specular 材質的鏡面反射顏色
glmaterialfv(gl_front, gl_specular, earth_mat_specular);
// gl_emission 材質的發射光顏色
glmaterialfv(gl_front, gl_emission, earth_mat_emission);
// gl_shininess 鏡面反射指數
glmaterialf(gl_front, gl_shininess, earth_mat_shininess);
gltranslatef(-3.0f, 4.0f, 0.0f); // 平移
glutsolidsphere(2.3, 40, 32);
}glpopmatrix();
glpushmatrix();
// 定義乙個球體
;glfloat earth_mat_diffuse = ; // 深紅色的球
glfloat earth_mat_specular = ; // 鏡面反射出紅光
glfloat earth_mat_emission = ; // 自己發出微微的紅光
glfloat earth_mat_shininess = 60.0f;
// gl_ambient 材質的環境顏色
glmaterialfv(gl_front, gl_ambient, earth_mat_ambient);
// gl_diffuse 材質的散射顏色
glmaterialfv(gl_front, gl_diffuse, earth_mat_diffuse);
// gl_specular 材質的鏡面反射顏色
glmaterialfv(gl_front, gl_specular, earth_mat_specular);
// gl_emission 材質的發射光顏色
glmaterialfv(gl_front, gl_emission, earth_mat_emission);
// gl_shininess 鏡面反射指數
glmaterialf(gl_front, gl_shininess, earth_mat_shininess);
gltranslatef(-4.0f, -4.0f, 0.0f); // 平移
glutsolidsphere(2.3, 40, 32);
}glpopmatrix();
glutswapbuffers(); //交換緩衝區
}void reshape(int w, int h)
int main(int argc, char* argv)
光照學習
光照材質
OpenGL高階光照 1
一 簡介 現實世界的光照是極其複雜的,而且會受到諸多因素的影響,這是我們有限的計算能力所無法模擬的。因此opengl的光照使用的是簡化的模型,對現實的情況進行近似,這樣處理起來會更容易一些,而且看起來也差不多一樣。這些光照模型都是基於我們對光的物理特性的理解。其中乙個模型被稱為馮氏光照模型 phon...
openGL光照系統
opengl 把光照系統分成了三部分 光源,材質和光照環境。opengl 沒有考慮光的折射 1.控制光源 第乙個引數表示設定哪乙個光源的屬性,第二個引數表示設定這個光源的哪個屬性,第三個引數則表示把該屬性值設定為多少 gllightfv gl light0,gl position,sun light...
Opengl光照(茶壺)
include initialize material property,light source,lighting model,and depth buffer.void init void glfloat mat shininess glfloat light position glfloat ...