OpenGL第8,9講小結

2022-03-13 11:42:46 字數 2692 閱讀 3668

這兩節,透明度和物體的3d運動,主要集中在第9講,因為第9講也用到了通過alpha值來調整透明度的地方。

因為要模擬星星,所以要建立的四邊形需要很多,例子中建立了50個正方形。因為每個星星的屬性都差不多,所以選擇了用結構體來迴圈建立。(感覺有點像物件導向的思路。)為了讓星星在翻轉的時候不至於由麵變成一條線,通過自己數次的測試,我理解為x,y,z座標軸始終是固定在所建立的物件上的,舉個例子,想像乙個正方形正對著自己,然後z軸箭頭向內,尾巴朝著自己,假如讓此正方形向左(你自己的左邊)轉90度,那麼座標軸的z軸箭頭就像固定在正方形上那樣,變成了箭頭指向右邊,尾巴朝向自己的左邊。恩,(記住座標軸就跟長在要建立的物件上就對了,之前繞死我了,以為座標軸軸心不動,怎麼都想不明白,一步一步變換觀察才發現自己理解錯了)。

所以,操作順序是:(假設有個定點,所有的星星都圍繞著這個定點運動)先在定點通過翻轉,朝向星星所在點的方向,然後向星星的位置出發(**是沿x軸移動,也就是通過兩次翻轉說把x軸的箭頭指向了星星的位置),到達星星位置,然後再逆序兩次翻轉復位(最開始正對觀察者,到達指定位置後仍然要正對觀察者,這樣才不會在翻轉的時候出現一條線的情形)。

接著就是通過改變每次迴圈的距離和角度變化來造就各種神奇的軌跡啦。還有,修改透明度要在建立四邊形之前的位置修改,就是這裡:

修改位置1的值,範圍0~255,值越大越透明(看起來會很亮)對比一下,左邊255,右邊50(用了次10,快看不見了):

還有教程裡說把深度測試關了,我試著沒關也沒看出什麼區別。。帶過吧。

還有報各種重定義之類的問題,試著新增或者去掉外部依賴項glu.lib之類的(我之前加進去也沒報錯)。

之前說過的用滑鼠左右鍵以及滾輪控制的方法,我找到啦,因為例子**用了windows自己的這個函式:

lresult callback wndproc(    hwnd    hwnd,            //

handle for this window

uint umsg, //

message for this window

wparam wparam, //

additional message information

lparam lparam) //

additional message information

else

return

0; //

return to the message loop}

case wm_syscommand: //

intercept system commands

break; //

exit}

case wm_close: //

did we receive a close message?

case wm_keydown: //

is a key being held down?

case wm_keyup: //

has a key been released?

case wm_size: //

resize the opengl window

case

wm_mbuttondown:

case wm_lbuttondown: //

左鍵按下

case wm_lbuttonup: //

左鍵釋放

case wm_rbuttondown: //

右鍵按下

case wm_rbuttonup: //

右鍵釋放

case wm_mousewheel: //

滾輪else

//messagebox(null,"you","",mb_ok|mb_iconexclamation);

return0;}}

//pass all unhandled messages to defwindowproc

return

defwindowproc(hwnd,umsg,wparam,lparam);

}

而我再使用glut自己的這個函式就報記憶體衝突的錯誤:

glutmousefunc(mouse);
所以要麼只用這個,要麼就像我一樣用上面的**。其中

int zdelta = get_wheel_delta_wparam(wparam);
這個是當滾輪事件觸發時,用於判斷是向前滾還是向後混的變數,zdelta會相應的呈正或負。我參考這個作的修改。

哎,一弄大半天都快過去了,不過弄清楚了很多問題,也蠻值得的啦。

OpenGL第12 14講小結

首先要為自己為什麼沒有寫第10講的控制3d場景和第11講的紅旗飄飄呢?因為沒看啊 哈哈哈,而且我嘗試著執行紅旗飄飄的時候電腦藍屏了 可能不是它的鍋 暫時跳過了。恩,12到14主要了解了這麼些東西,乙個使用list來批量建立重複的物件,還有就是顯示3d文字。建立乙個list 方便自己記直接貼 了,其實...

Nehe的OpenGL的第8, 9課的筆記

混色的定義 將要繪製的物體的想色顏色,與螢幕上相同位置的畫素顏色相互混合.正確的繪製透明物件的方法 首先,繪製所有不透明物件 然後,關閉深度測試 最後,從遠及近的繪製透明物件 混色方法 glcolor4f 1.0f,1.0f,1.0f,0.5f 以全亮度繪製此物體,並對其進行50 的alpha混合 ...

openGL第六講 庫函式

opengl基礎技術講座 庫函式與執行方式 1.4.1 opengl開發元件 windows9x nt下的opengl元件有兩種,一種是sgi公司提供的,一種是microsoft公司提供的。兩者的開始庫大體上沒有什麼區別,都是由由三大部分組成 1 函式的說明檔案 gl.h glu.h glut.h和...