demo8
這裡設定opengl的渲染方式不打算使用深度測試,如果使用第一課的**的話,請確認是否已經去掉了gldepthfunc(gl_lequal);和glenable(gl_depth_test);兩行。否則,所見到的效果將會一團糟。這裡我們使用了紋理對映,可以注意到我們通過混色來啟用了紋理對映。
這裡我們使用的顏色設定函式是glcolor4ub,而不是以前的glcolor4f。ub意味著引數是unsigned byte型的。乙個byte的取值範圍是0~255。
不過**中有一處我沒有看明白什麼意思:
gltranslatef(0.0f,0.0f,zoom); // zoom into the screen (using the value in 'zoom')
glrotatef(tilt,1.0f,0.0f,0.0f); // tilt the view (using the value in 'tilt')
glrotatef(star[loop].angle,0.0f,1.0f,0.0f); // rotate to the current stars angle
gltranslatef(star[loop].dist,0.0f,0.0f); // move forward on the x plane
glrotatef(-star[loop].angle,0.0f,1.0f,0.0f); // cancel the current stars angle
glrotatef(-tilt,1.0f,0.0f,0.0f); // cancel the screen tilt
教材上給的解釋如下,捉摸不透:
現在我們來移動星星。星星開始時位於螢幕的中心。我們要做的第一件事是把場景沿y軸旋轉。如果我們旋轉90度的話,x軸不再是自左至右的了,他將由裡向外穿出螢幕。為了讓大家更清楚些,舉個例子。假想您站在房子中間。再設想您左側的牆上寫著-x,前面的牆上寫著-z,右面牆上就是+x咯,您身後的牆上則是+z。加入整個房子向右轉90度,但您沒有動,那麼前面的牆上將是-x而不再是-z了。所有其他的牆也都跟著移動。-z出現在右側,+z出現在左側,+x出現在您背後。神經錯亂了吧?通過旋轉場景,我們改變了x和z平面的方向。
第二行**沿x軸移動乙個正值。通常x軸上的正值代表移向了螢幕的右側(也就是通常的x軸的正向),但這裡由於我們繞y軸旋轉了座標系,x軸的正向可以是任意方向。如果我們轉180度的話,螢幕的左右側就映象反向了。因此,當我們沿 x軸正向移動。
glrotatef(star[loop].angle,0.0f,1.0f,0.0f); // 旋轉至當前所畫星星的角度
gltranslatef(star[loop].dist,0.0f,0.0f); // 沿x軸正向移動
接著的**帶點小技巧。星星實際上是乙個平面的紋理。現在您在螢幕中心畫了個平面的四邊形然後貼上紋理,這看起來很不錯。一切都如您所想的那樣。但是當您當您沿著y軸轉上個90度的話,紋理在螢幕上就只剩右側和左側的兩條邊朝著您。看起來就是一條細線。這不是我們所想要的。我們希望星星永遠正面朝著我們,而不管螢幕如何旋轉或傾斜。
我們通過在繪製星星之前,抵消對星星所作的任何旋轉來實現這個願望。您可以採用逆序來抵消旋轉。當我們傾斜螢幕時,我們實際上以當前角度旋轉了星星。通過逆序,我們又以當前角度「反旋轉」星星。也就是以當前角度的負值來旋轉星星。就是說,如果我們將星星旋轉了10度的話,又將其旋轉-10度來使星星在那個軸上重新面對螢幕。下面的第一行抵消了沿y軸的旋轉。然後,我們還需要抵消掉沿x軸的螢幕傾斜。要做到這一點,我們只需要將螢幕再旋轉-tilt傾角。在抵消掉x和y軸的旋轉後,星星又完全面對著我們了。
glrotatef(-star[loop].angle,0.0f,1.0f,0.0f); // 取消當前星星的角度
glrotatef(-tilt,1.0f,0.0f,0.0f); // 取消螢幕傾斜
opengl 入門學習 隨筆八
下面寫一段讀取檔案的程式,也算是乙個模組吧。void readfile const char filename if fseek fp,int sizeof mask seek end exit 0 if fread mask,sizeof mask 1,fp exit 0 fclose fp 程式...
OpenGL 入門教程 八
本文源自 opengl中使用rgba色彩體系,rgb為紅綠藍三原色,a為?值,該值代表色彩融合時所佔的比例。顏色是頂點的重要屬性之一,沒有色彩的世界是毫無生氣的。使用glcolor r,g,b,a 設定當前顏色,此後定義所有的頂點都將是這個顏色的,直到再次改變當前顏色。該命令有兩種常用形式glcol...
OpenGL學習筆記(八)
在opengl中繪製乙個物體,會像是這樣 0.複製頂點陣列到緩衝中供opengl使用 glbindbuffer gl array buffer,vbo glbufferdata gl array buffer,sizeof vertices vertices,gl static draw 1.設定頂...