對Reflection的一點改進

2021-04-07 06:39:14 字數 2236 閱讀 1624

之前實現的那個reflection沒有把光照加進去,使得不是很逼真,與真實的景象有出入。只要我們把光源也想象

為乙個物體,在鏡子中也會有映象,也會使virtual object產生光照效果。這裡我採用的是聚光燈,對其的屬性設定如下:

glfloat lightamb = ; // ambient light

glfloat lightdif = ; // diffuse light

glfloat lightspecular = ;

glfloat spot_dir = ;

glfloat lightpos = ; // light position

gllightmodeli(gl_light_model_local_viewer, 1);

gllightfv(gl_light0, gl_ambient, lightamb);   // set the ambient lighting for light0

gllightfv(gl_light0, gl_diffuse, lightdif);   // set the diffuse lighting for light0

gllightfv(gl_light0, gl_specular, lightspecular);

gllightfv(gl_light0, gl_spot_direction, spot_dir);

gllightf(gl_light0, gl_spot_exponent, 3.0);

gllightf(gl_light0, gl_spot_cutoff, 180.0);

gllightf(gl_light0, gl_constant_attenuation, 0.5);

gllightf(gl_light0, gl_linear_attenuation, 1.0);

gllightf(gl_light0, gl_quadratic_attenuation, 1.5);

注意,這只是在init()函式中初始化聚光燈。其中有兩個函式涉及到了光源的位置和方向,在此均沒有設定。

因為他們與當時的模型檢視矩陣相關,儲存在人眼座標系中。

//在當前模型檢視矩陣下渲染實際的聚光燈

gldisable(gl_lighting);

glcolor3f(1.f, 1.f, 0.f);

glpushmatrix();

glmultmatrixd(light->worldmatrix());

gllightfv(gl_light0, gl_position, pos);

gllightfv(gl_light0, gl_spot_direction, spot_dir);

glusphere(p, 0.02, 12, 12);

glpopmatrix();

glenable(gl_lighting);

//渲染映象聚光燈(virtual object)

glpushmatrix();

glmultmatrixd(reflector->matrix());

glscalef(1.f, 1.f, -1.f);

gldisable(gl_lighting);

glcolor3f(1.f, 1.f, 0.f);

glpushmatrix();

glmultmatrixd(light->matrix());

gllightfv(gl_light0, gl_position, pos);

gllightfv(gl_light0, gl_spot_direction, spot_dir);

glusphere(p, 0.02, 12, 12);

glpopmatrix();

glenable(gl_lighting);

glcullface(gl_front);         //這句也很重要,我們畫映象物體時它的揀選方向倒置了,簡單說無論之前

// 的glfrontface()是把順時針還是逆時針設定為"正面"方向,我們只需把

//當前的"正面"剔除了(cull),virtual object才能正確渲染

glmultmatrixd(virtualobject->matrix());

drawobject();

glcullface(gl_back);

glpopmatrix();

得到的效果圖如下:(紅色原點為光源位置)

這是聚光燈角度為90的效果圖,可以看見實際的光照效果和鏡面的明暗效果是一致的。下圖為聚光角度180

的效果圖:

對需求的一點看法

需求是什麼,如何來做好需求,在cmmi 模型裡都給予了說明。模型將需求分為兩個部分,乙個是二級的需求管理,另乙個是 的需求開發 之後又看了rup 對需求的描述,它沒有明確對需求管理與開發進行劃分,它的工作流包括了以下幾個部分 問題分析,理解涉眾需要,定義系統,管理專案規模,改進系統定義,管理需求變更...

對 threadfence的一點理解

一直沒搞清楚,cuda 2.2版增加的 threadfence到底有何作用,直到今天看到sdk 3.0手冊 中的下面例子才恍然大悟.中文為我的理解,嘿嘿 乙個求和的例子 device unsigned int count 0 統計有幾個block結束的變數 shared bool islastblo...

對寫書的一點感想

python科學計算 的作者寫過一篇對寫這本書的感想 寥寥數語,卻能體會到作者寫書過程的艱辛和快樂,以及從中而來的成就感。歷時23個月,622頁,262千字,19章,266幅插圖,360個例項程式,393份問卷調查。個人感覺寫書是一次心靈和身體的苦旅,就像一路跪拜到布達拉宮,個中酸甜苦辣只有自己知道...