日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

SharpGL学习笔记(一) 平台构建与Opengl的hello World

發(fā)布時間:2025/7/14 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SharpGL学习笔记(一) 平台构建与Opengl的hello World 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

(一)平臺構(gòu)建與Opengl的hello World

?

OpenGL就是3d繪圖的API,微軟針和它競爭推出D3D,也就是玩游戲時最常見的DirectorX組件中的3d功能。 所以不要指望windows提供對Opengl提供最新的什么支持。

C#的開發(fā)環(huán)境也沒有封裝Opengl的組件,Opengl的官方的dll是供C,C++開發(fā)用的。要想用在C#中你得自己導(dǎo)入DLL函數(shù)。但我相信你不會這樣做的,還是引入第三方的Opengl庫來得方便。

?

SharpGL就是C#用的OpenGL庫,之所以選擇它,是因為它最后更新的時間較近,網(wǎng)上的C++教程也最多,而且這個庫是有成功的商業(yè)開發(fā)應(yīng)用的,可以放心使用。

源碼下載地址:

http://www.oschina.net/p/sharpgl

?

引用網(wǎng)上對SharpGL的評價,筆者說幾句:

對于第1點,能支持wpf程序,筆者很贊。

對于第2點,顯然是以訛傳訛,筆者為此跑了一個sharpgl程序幾個小時,也沒看到有什么內(nèi)存增長。所以應(yīng)該是當(dāng)前版本把以前的內(nèi)存泄露問題給解決了。至于是最早哪個版本給解決的,我就不得而知了。

對于第4點,顯然對筆者無所謂。

許多人去選擇OpenTK,如果他不是去開發(fā)OpenGL ES的話,那么多半是害怕內(nèi)存泄露而不選擇SharpGL。

顯然說來說去還是需求來確定你該選擇什么,如果開發(fā)OpenGL ES,你只能選擇OpengTK,否則如果只是做windows平臺的開發(fā),SharpGL和OpengTK都可以選擇。

對SharpGL的總結(jié)如下:(1)安裝部署方便,可以非常容易的集成到Windows Forms和WPF中去使用;(2)存在內(nèi)存泄露的問題,即使運行一個簡單的程序,內(nèi)存在不斷增長,當(dāng)增長到了一定時就不會有太多的增長,由于例程都有這樣的問題,對于我們自己編寫程序,應(yīng)作適當(dāng)考慮;(3)目前SharpGL已經(jīng)支持到OpenGL4.2(http://sharpgl.codeplex.com/discussions/431042),在所有的第三方庫中,其支持的OpenGL版本應(yīng)該是最高的; 4)不支持Linux和Mac平臺(http://sharpgl.codeplex.com/discussions/356490)

?

?

?

?至于OpenGL能干嘛? 對于博主來說,學(xué)它是出于需要,想做3D仿真, 也許你很年青,有大把業(yè)余時間,那就可以用它來寫個CS來爽爽。但博主還是認(rèn)為學(xué)東西要以經(jīng)濟效益和工作需要兩種力量為驅(qū)動力,否則就不要學(xué),在這個知識爆表的年代,其實很有必須提倡節(jié)約時間,盡量把時間用在刀刃上的。

?

?我們用vs2010的C#,構(gòu)建一個空白的windows窗體應(yīng)用程序

?

首先,把 下載的SharpGL里面的3個dll(除serialization.dll)引入C#,然后“選擇項” 選擇SharpGL.Winforms.dll , 就可以在面板上看到4個控件。其中OpenGLControl就可以把它播放到Form上去。它相當(dāng)于Opengl的畫板。

?

?

如果你把OpenGLControl拖放到Form上時不幸出現(xiàn)下面這樣的畫面。

那么多半是因為你用的vs2010,默認(rèn)框架是.Net Framework 4 Client profile, 請切換為.Net Framework 4就好了。

如果不是這個原因,那么你運行程序看看有沒有問題,如果能看到黑色的OpenGLControl控件,那么你保存下這個工程,重新打開應(yīng)該就好了。

至于為什么會這樣,筆者也不清楚。

?

源代碼如下:已經(jīng)做了詳細(xì)解釋

1 using System; 2 using System.Windows.Forms; 3 using SharpGL; 4 5 namespace blankTest 6 { 7 public partial class Form1 : Form 8 { 9 10 public Form1() 11 { 12 InitializeComponent(); 13 14 } 15 16 private void Form1_Load(object sender, EventArgs e) 17 { 18 19 } 20 21 private void openGLControl1_OpenGLInitialized(object sender, EventArgs e) 22 { 23 OpenGL gl = openGLControl1.OpenGL; 24 gl.ClearColor(0, 0, 0, 0); 25 } 26 27 private void openGLControl1_Resize(object sender, EventArgs e) 28 { 29 OpenGL gl = openGLControl1.OpenGL; 30 31 // 設(shè)置當(dāng)前矩陣模式,對投影矩陣應(yīng)用隨后的矩陣操作 32 gl.MatrixMode(OpenGL.GL_PROJECTION); 33 34 // 重置當(dāng)前指定的矩陣為單位矩陣,將當(dāng)前的用戶坐標(biāo)系的原點移到了屏幕中心 35 gl.LoadIdentity(); 36 37 // 創(chuàng)建透視投影變換 38 gl.Perspective(30.0f, (double)Width / (double)Height, 5, 100.0); 39 40 // 視點變換 41 gl.LookAt(-5, 5, -5, 0, 0, 0, 0, 1, 0); 42 43 // 設(shè)置當(dāng)前矩陣為模型視圖矩陣 44 gl.MatrixMode(OpenGL.GL_MODELVIEW); 45 } 46 47 private void openGLControl1_OpenGLDraw(object sender, PaintEventArgs e) 48 { 49 SharpGL.OpenGL gl = this.openGLControl1.OpenGL; 50 //清除深度緩存 51 gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); 52 53 //重置當(dāng)前指定的矩陣為單位矩陣,將當(dāng)前的用戶坐標(biāo)系的原點移到了屏幕中心 54 gl.LoadIdentity(); 55 56 //坐標(biāo)軸變換位置到(-1.5,0,-6) 57 gl.Translate(-1.5f, 0f, -6f); 58 59 gl.Begin(OpenGL.GL_TRIANGLES); 60 { 61 //頂點 62 gl.Vertex(0.0f, 1.0f, 0.0f); 63 //左端點 64 gl.Vertex(-1.0f, -1.0f, 0.0f); 65 //右端點 66 gl.Vertex(1.0f, -1.0f, 0.0f); 67 } 68 gl.End(); 69 70 //把當(dāng)前坐標(biāo)系右移3個單位,注意此時是相對上面(-1.5,0,-6)點定位 71 gl.Translate(3f, 0f, 0f); 72 73 gl.Begin(OpenGL.GL_QUADS); 74 { 75 gl.Vertex(-1.0f, 1.0f, 0.0f); 76 gl.Vertex(1.0f, 1.0f, 0.0f); 77 gl.Vertex(1.0f, -1.0f, 0.0f); 78 gl.Vertex(-1.0f, -1.0f, 0.0f); 79 } 80 gl.End(); 81 gl.Flush(); //強制刷新 82 83 } 84 } 85 }

?

openGLControl1_OpenGLInitialized, openGLControl1_Resiz, openGLControl1_OpenGLDraw

這三個都是控件 openGLControl1 的自帶標(biāo)準(zhǔn)事件。


效果就像下圖這樣了。

?

?整這許多代碼,卻看到畫出這個東西,是不是有些小失望? 不知道和GDI+有什么不同,對吧?

其實,不同的是,GDI+是純2D的, 而上面這兩個基礎(chǔ)圖形可不是2D,而是在3D空間的,雖然它只是一個片,但是也可以在x,y,z方向任意旋轉(zhuǎn)哦。

?

?

?本例雖然簡單,還是附上源代碼吧! 免得搞不出來影響心情。 ^_^

?

本節(jié)源代碼下載

?

原創(chuàng)文章,出自"博客園, 豬悟能'S博客" :?http://www.cnblogs.com/hackpig/

?

總結(jié)

以上是生活随笔為你收集整理的SharpGL学习笔记(一) 平台构建与Opengl的hello World的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。