文章出處

CSharpGL(17)重構CSharpGL

CSharpGL用起來我自己都覺得繁瑣了,這是到了重構的時候。

下載

CSharpGL已在GitHub開源,歡迎對OpenGL有興趣的同學加入(https://github.com/bitzhuwei/CSharpGL

核心N合一

為了解耦,我把CSharpGL核心拆分為5個DLL。然后發現這只會帶來麻煩。用的時候要引用多個DLL,開發的時候也沒有益處。于是全部N合一,成為一個CSharpGL.dll。

現在的版本內容如上圖所示。

Demo:GLCanvas

這個demo每秒隨機更換一個背景色。演示了如何使用GLCanvas(drag-drop即可),清晰展示了GLCanvas最基本的渲染功能。

 

Demo:北斗七星(Big Dipper)

這個demo演示了如何用CSharpGL進行modern rendering。

北斗七星模型的頂點位置如下:

1 [0]    {-2.5000, +1.0000, +0.0000}
2 [1]    {-1.5000, +1.0000, +0.0000}
3 [2]    {-0.5000, +0.5000, +0.0000}
4 [3]    {+0.5000, +0.2500, +0.0000}
5 [4]    {+1.0000, -1.0000, +0.0000}
6 [5]    {+2.0000, -1.0000, +0.0000}
7 [6]    {+2.5000, +0.0000, +0.0000}

北斗七星模型的頂點顏色是由紅色逐漸過度到紫色。

旋轉、縮放

通過camera和satelliteRotator實現旋轉和縮放模型的功能。

拾取

鼠標移動到北斗七星模型上,會在BulletinBoard窗口上顯示出拾取到的圖元。

GLSwitch

有時候你需要用GL.LineWidth();設置線寬度;有時候需要用GL.PointSize();設置點的大小。CSharpGL提供GLSwitch對象,可以為各個IRenderable對象動態增刪這些功能。

北斗七星Demo里,你可以在PropertyGrid窗口動態增刪GLSwitch。

UniformVariables

CSharpGL提供類似GLSwitch的可視化編輯方式,來動態增刪改shader中的uniform變量。

DrawMode

還可以動態修改渲染模式。

其他類型就不貼圖了。

另外,不同的DrawMode下,拾取到的圖元也是不同的。

Demo:Geometry Shader(EmitNormalLine)

用geometry shader自動渲染出模型頂點的法線是目前我找到的geometry Shader的最好的應用。

下圖中的白色針狀就是各個頂點的法線。

Teapot

Sphere

Cube

 

 

總結

原CSharpGL的其他功能(UI、3ds解析器、TTF2Bmp、CSSL等),我將逐步加入新CSharpGL。

歡迎對OpenGL有興趣的同學關注(https://github.com/bitzhuwei/CSharpGL


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()