OpenGL 光照例項 1

2021-07-24 10:21:39 字數 3631 閱讀 1336

設定太陽光(平行光)

在設定不同材質的球體,觀察光照效果

; // 光源的位置

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 ...