C OpenGL程式設計之OpenGL 光照

2021-06-27 20:53:26 字數 2058 閱讀 4361

本文基礎:

c#+opengl程式設計之環境搭建

現在是第四章 opengl 光照,這章開始,我遇到麻煩了,因為原書的auxsolidsphere這個函式,c# 沒有封裝,我就把例程修改為:

3個光源,乙個正方形。

using system;

using system.collections.generic;

using system.text;

using tao.opengl;

using tao.glfw;

namespace opengl

; static float lightpositiong = new float ;

static float lightpositionb = new float ;

/** 定義三個光源的漫射光 */

static float diffuselightr = new float ;

static float diffuselightg = new float ;

static float diffuselightb = new float ;

/** 定義三個光源的鏡面光 */

static float specularlightr = new float ;

static float specularlightg = new float ;

static float specularlightb = new float ;

/** 再定義乙個預設的光源 */

static float diffuselight = new float ;

static float specularlight = new float ;

static float lightposition = new float ;

float m_angle = 0.0f; /**< 設定初始角度為0 */

public light()

: base()

/// /// 初始化視口投影,恢復原書的視口

///

public override void iniview(int windowwidth, int windowheight)

/// /// 過載,使用draw方法繪圖

///

///

///

public override void drawglscene(int mou***, double currenttime)

/// /// 過載

///

///

///

public override void update(float milliseconds)

else

/** 更新綠色光源 */

if (glfw.glfwgetkey(glfw.glfw_key_f2) == glfw.glfw_release) /**< 當數字'2'鍵沒有被按下時 */

else

/** 更新藍色光源 */

if (glfw.glfwgetkey(glfw.glfw_key_f3) == glfw.glfw_release) /**< 當數字'3'鍵沒有被按下時 */

else

m_angle = m_angle + milliseconds * 10;

}/** 繪製函式 */

void draw()

/// /// 由於沒有auxsolidsphere這個輔助函式,我做了修改,改為正方形

///

///

private void auxsolidsphere(float p)

public void drawcube()

}}

程式我們用到了update過載來計算動畫變數,在我的機器上只用時間差值太慢,我

時間差值x10作為動畫時間,大家可以根據自己機器修改。

程式執行結果與原書不同,乙個白色的正方形,因為三個顏色紅 綠 藍疊加就是白色,大家可以通過按住鍵盤f1 f2 f3 來關閉相應燈檢視燈光顏色疊加效果。

程式設計之我見

激情不夠,活也不行 部分專注專案,理論不行。或當下的技術棧完全可以勝任工作,拿到可觀的薪水,溫水之中做乙隻安逸的青蛙。學好程式設計必須富有激情,充滿了性趣。理論 沒有理論支撐,實踐只是機械性的死記硬背 實踐 將理論穿插進實踐,將理論都玩明白,姿勢要舒服。經驗 遇到的問題多了,解決的多了,經驗就多了。...

網路程式設計之Socket程式設計

對 tcp ip udp socket 程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問 1.什麼是tcp ip udp?2.socket在 呢?3.socket是什麼呢?4.你會使用它們嗎?什麼是tcp ip udp?tcp ip transmission co...

網路程式設計之socket程式設計

大多數專案是在linux下開發伺服器端,而在windows下開發客戶端,需要經常在兩大平台之間進行切換,單獨學習一種平台沒有實踐意義。值得欣慰的是,兩大平台下的 socket 程式設計非常相似,並不會增加多少學習成本。網路程式設計就是編寫程式使兩台聯網的計算機相互交換資料。這就是socket的全部內...