日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

C#中使用tao.opengl绘制三维模型

發(fā)布時(shí)間:2023/12/18 C# 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中使用tao.opengl绘制三维模型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、tao.Opengl技術(shù)簡(jiǎn)介

  Opengl是一種C風(fēng)格的圖形庫(kù),即opengl中沒有類和對(duì)象,只有大量的函數(shù)。Opengl在內(nèi)部就是一個(gè)狀態(tài)機(jī),利用不同的函數(shù)來修改opengl狀態(tài)機(jī)的狀態(tài),以達(dá)到需要的效果。

  Tao框架是C#使用Opengl的一種圖形庫(kù),其他可供C#使用的圖形庫(kù)有諸如Sharpgl等。Tao框架包含了許多C庫(kù),如表1。Tao庫(kù)結(jié)合了C#語(yǔ)言的特點(diǎn),使得在使用Tao庫(kù)時(shí)更加方便。

?

庫(kù)

用途

1?????? ?

Tao.OpenAl

豐富的音頻庫(kù)

2?????? ?

Tao.OpenGl

即可使用的圖形庫(kù)

3?????? ?

Tao.Sdl

Simple DirectMedia Layer,2D庫(kù)

4?????? ?

Tao.Platform.Windows

支持通過Windows.Forms使用OpenGl

5?????? ?

Tao.PhysFs

一個(gè)I/o包裝器,支持游戲資源存檔等

6?????? ?

Tao.FreeGlut

Opengl實(shí)用程序工具包是一組包裝器,用于設(shè)置Opengl程序和一些繪圖例程

7?????? ?

Tao.Ode

全稱是Open Dynamics Engine是在游戲中使用的一個(gè)實(shí)時(shí)物理引擎

8?????? ?

Tao.Glfw

OpenGl Framework可在不同平臺(tái)使用的輕量級(jí)包裝類

9?????? ?

Tao.DevIL

將各種不同格式的圖片(bmp、tif等)加載到Opengl

10??? ?

Tao.Cg

高級(jí)著色語(yǔ)言工具

11??? ?

Tao.Lua

Lua是游戲界最常用的腳本語(yǔ)言

12??? ?

Tao.FreeType

字體包

13??? ?

Tao.FFmpeg

主要用于播放視頻

?表1 Tao庫(kù)

二、C# Form類

  窗體是程序與用戶交互的可視界面,窗體也是一個(gè)對(duì)象,窗體類定義了生成窗體的模版,實(shí)例化一個(gè)窗體類就產(chǎn)生了一個(gè)窗體。.NET框架類庫(kù)的System.Windows.Forms命名空間中定義的Form類是所有窗體類的基類。

2.1 其主要屬性包括窗前名稱、圖標(biāo)、其實(shí)位置、背景。
  1. Name:用來獲取或設(shè)置窗體的名稱,在應(yīng)用程序中可通過Name屬性來引用窗體。
  2. StartPosition:用來獲取或設(shè)置運(yùn)行時(shí)窗體的起始位置。
  3. AutoScroll:用來獲取或設(shè)置是否實(shí)現(xiàn)自動(dòng)滾動(dòng)。
  4. Visible:用于獲取或設(shè)置一個(gè)值,該值指示是否顯示該窗體或控件。值為true時(shí)顯示窗體或控件,為false時(shí)不顯示。
2.2 窗體常用的方法包括:
  1. Show(),該方法的作用是讓窗體顯示出來。
  2. Refresh(),該方法的作用是刷新并重畫窗體。
  3. Close(),該方法的作用是關(guān)閉窗體。
2.3 窗體的主要事件包括:
  1. Load事件:該事件在窗體加載到內(nèi)存時(shí)發(fā)生,即在第一次顯示窗體前發(fā)生。
  2. Activated事件:該事件在窗體激活時(shí)發(fā)生。
  3. Deactivate事件:該事件在窗體失去焦點(diǎn)成為不活動(dòng)窗體時(shí)發(fā)生。
  4. Resize事件:該事件在改變窗體大小時(shí)發(fā)生。
  5. Paint事件:該事件在重繪窗體時(shí)發(fā)生。
  6. Click事件:該事件在用戶單擊窗體時(shí)發(fā)生。
  7. Closed事件:該事件在窗體關(guān)閉時(shí)發(fā)生。

三、SimpleOpenglControl應(yīng)用

  在動(dòng)態(tài)鏈接庫(kù)Tao.Platform.Windows中定義的SimpleOpenglControl類,其定義了幾乎所有的Opengl主要繪圖函數(shù),包括場(chǎng)景初始化函數(shù)、場(chǎng)景繪制渲染函數(shù)、雙緩存交換函數(shù)、重繪函數(shù)、窗口大小改變等等。在Form的派生類中添加一個(gè)內(nèi)部的simpleOpenglControl類,就能使用它的所有屬性和方法。

?????? 從關(guān)系圖中可以看出模型類可以分為兩部分,模型繪制和模型展示。模型繪制需要調(diào)用Tao.Opengl庫(kù)的函數(shù),并且渲染模型;模型展示則需要利用Form類和simpleOpenglControl類來實(shí)現(xiàn)。具體過程如下:

1)首先simpleOpenglControl類對(duì)象加載Load事件和SizeChanged事件;

2)然后在初始化函數(shù)中加載FormLoad事件;

3)最后simpleOpenglControl類對(duì)象加載Paint事件,實(shí)現(xiàn)重繪;

4)利用設(shè)置的timer事件來實(shí)現(xiàn)定期更新重繪模型。

?四、Opengl繪制函數(shù)

Opengl實(shí)際上是一個(gè)C庫(kù)函數(shù),即沒有類或?qū)ο?#xff0c;Tao庫(kù)實(shí)際上是將所有函數(shù)封裝在了不同的類中,如OpenGl類,SimpleOpenglControl類等等。在建模過程中使用的主要的函數(shù)如表2所示。

函數(shù)名稱

主要用途

glPushMatrix()

將當(dāng)前矩陣保存如棧頂,保證在其中運(yùn)行的縮放、平移等變換不影響其他矩陣

glPopMatrix()

與glPushMatrix相對(duì)應(yīng),將當(dāng)前矩陣彈出棧頂,兩者需一起出現(xiàn)

glRotated()

將相乘旋轉(zhuǎn)矩陣的當(dāng)前的矩陣,參數(shù)包括旋轉(zhuǎn)角度和旋轉(zhuǎn)中心

glScaled()

縮放函數(shù),參數(shù)是xyz方向上的縮放比

glTranslated()

平移函數(shù),參數(shù)為xyz方向上的平移大小

glEnable()

啟用相關(guān)功能函數(shù),功能由參數(shù)決定,如畫虛線等

glDisable()

關(guān)閉相關(guān)功能函數(shù),一般與glEnable一起出現(xiàn)

glLineWidth()

用于指定繪制線段的像素寬度,參數(shù)為像素大小

glColor3d()

用于指定RGB顏色,參數(shù)為RGB值

glVertex3d()

用于指定三維頂點(diǎn),參數(shù)為三維頂點(diǎn)值

glBegin()

繪圖初始化函數(shù),參數(shù)一般包括繪制頂點(diǎn)模式、線段模式等

glEnd()

與glBegin一起使用,在兩者之間繪制圖形

glViewPort()

用于確定打開窗口的坐標(biāo)范圍

glClearColor()

清除窗口顏色

glLoadIndentity()

重置當(dāng)前指定的矩陣為單位矩陣

glMatrixMode()

指定哪一個(gè)矩陣是當(dāng)前矩陣

glOrtho()

glOrtho函數(shù)是將當(dāng)前的可視空間設(shè)置為正投影空間

gluLookat()

視點(diǎn)轉(zhuǎn)換函數(shù),參數(shù)包括視點(diǎn)位置,視點(diǎn)對(duì)準(zhǔn)的物體在世界坐標(biāo)的位置和視點(diǎn)向上的方向在世界坐標(biāo)中的方向

表2 主要建模函數(shù)

實(shí)例

OpenGL作為一種圖形學(xué)編程接口已經(jīng)非常流行, 雖然在大型游戲方面DirectX有一定的市場(chǎng)占有率, 但由于OpenGL的開放性,可移植性等優(yōu)點(diǎn),OpenGL已經(jīng)成了一種圖形學(xué)方面的標(biāo)準(zhǔn)。

(1)Python的 pyOpenGL;

(2)C#的OpenTK(包括OpenAL, OpenGL, OpenCL); tao C#綁定;

(3)JavaScript:WebGL
等等。 這樣我們就可以利用自己熟悉的語(yǔ)言來編寫OpenGL的圖形程序了。

(值得注意的是:每個(gè)不同的綁定基本都包括了 gl 庫(kù)[OpenGL的核心函數(shù)庫(kù)], glu庫(kù)[實(shí)用函數(shù)庫(kù)], glut庫(kù)[實(shí)用工具箱] 等等)

OpenGL support libraries

  • GLU?– Some additional functions for OpenGL programs.
  • GLUT?– The OpenGL utility toolkit. Defunct.
  • freeglut?–?Open source?alternative to GLUT
  • GLUI?– a?GUI?toolkit made with GLUT
  • GLFW - A modern alternative to GLUT and FreeGLUT.
  • GLee?– The OpenGL Easy Extension library.
  • GLEW?– The OpenGL Extension Wrangler Library.
  • GLM?– C++ mathematics toolkit for OpenGL based on the GLSL specification.
  • JOGL?– Java bindings for OpenGL API.

本人常用的語(yǔ)言是C#和Python, 最后選了C#的tao作為編程環(huán)境。

1. 如何配置綁定:

首先下載tao庫(kù):?http://www.taoframework.com

然后安裝到自己熟悉的目錄。

2. 如何導(dǎo)入所需的庫(kù):

新建C#控制臺(tái)項(xiàng)目,導(dǎo)入剛才安裝的程序目錄 bin下的: Tao.OpenGL.dll, Tao.FreeGlut.dll, Tao.Platform.Windows.dll.

然后在 .cs 文件開頭加入:

using Tao.OpenGl;
using Tao.FreeGlut;
using Tao.Platform.Windows;

3. 編程示例:

寫一個(gè)簡(jiǎn)單的程序:

1 using System.Collections.Generic;2 using System.Linq;3 using System.Text;4 5 using Tao.OpenGl;6 using Tao.FreeGlut;7 using Tao.Platform.Windows;8 9 class Program 10 { 11 static string title = "用 glRecti() 畫矩形"; 12 static void myInit( ) 13 { 14 // 設(shè)置屬性 15 Gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // 白色背景 16 Gl.glColor3f(1.0f, 0.0f, 0.0f); // 用紅色繪制圖形 17 18 // 建立視圖 19 Gl.glMatrixMode(Gl.GL_PROJECTION); 20 Gl.glLoadIdentity(); 21 Glu.gluOrtho2D(0.0, 600.0, 0.0, 600.0); 22 } 23 static void display() 24 { 25 Gl.glClear(Gl.GL_COLOR_BUFFER_BIT); 26 Gl.glRecti(0, 0, 100, 120); 27 Gl.glFlush(); 28 } 29 static void Main(string[] args) 30 { 31 Glut.glutInit(); 32 Glut.glutInitDisplayMode(Glut.GLUT_RGBA | Glut.GLUT_SINGLE); 33 Glut.glutInitWindowPosition(400, 100); 34 Glut.glutInitWindowSize(600, 600); 35 Glut.glutCreateWindow(title); 36 37 myInit(); 38 Glut.glutDisplayFunc(display); 39 Glut.glutMainLoop(); 40 41 Console.ReadKey(); 42 } 43 }

運(yùn)行后發(fā)現(xiàn)有問題, 缺少 FreeGlut.dll , 怎么回事?不是已經(jīng)把庫(kù)導(dǎo)入了嗎? Goolge一下, 還需要FreeGlut.dll 文件。

FreeGlut.dll 下載地址:http://www.transmissionzero.co.uk/software/freeglut-devel/

下載:freeglut 2.8.0 MSVC Package, 可能要比這個(gè)新。

然后將壓縮包中 bin 下的 freeglut.dll 復(fù)制到 windows目錄下。

總結(jié)

以上是生活随笔為你收集整理的C#中使用tao.opengl绘制三维模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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