一、tao.Opengl技术简介

  Opengl是一种C风格的图形库,即opengl中没有类和对象,只有大量的函数。Opengl在内部就是一个状态机,利用不同的函数来修改opengl状态机的状态,以达到需要的效果。

  Tao框架是C#使用Opengl的一种图形库,其他可供C#使用的图形库有诸如Sharpgl等。Tao框架包含了许多C库,如表1。Tao库结合了C#语言的特点,使得在使用Tao库时更加方便。

用途

1

Tao.OpenAl

丰富的音频库

2

Tao.OpenGl

即可使用的图形库

3

Tao.Sdl

Simple DirectMedia Layer,2D库

4

Tao.Platform.Windows

支持通过Windows.Forms使用OpenGl

5

Tao.PhysFs

一个I/o包装器,支持游戏资源存档等

6

Tao.FreeGlut

Opengl实用程序工具包是一组包装器,用于设置Opengl程序和一些绘图例程

7

Tao.Ode

全称是Open Dynamics Engine是在游戏中使用的一个实时物理引擎

8

Tao.Glfw

OpenGl Framework可在不同平台使用的轻量级包装类

9

Tao.DevIL

将各种不同格式的图片(bmp、tif等)加载到Opengl

10

Tao.Cg

高级着色语言工具

11

Tao.Lua

Lua是游戏界最常用的脚本语言

12

Tao.FreeType

字体包

13

Tao.FFmpeg

主要用于播放视频

表1 Tao库

二、C# Form类

  窗体是程序与用户交互的可视界面,窗体也是一个对象,窗体类定义了生成窗体的模版,实例化一个窗体类就产生了一个窗体。.NET框架类库的System.Windows.Forms命名空间中定义的Form类是所有窗体类的基类。

2.1 其主要属性包括窗前名称、图标、其实位置、背景。
  1. Name:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。
  2. StartPosition:用来获取或设置运行时窗体的起始位置。
  3. AutoScroll:用来获取或设置是否实现自动滚动。
  4. Visible:用于获取或设置一个值,该值指示是否显示该窗体或控件。值为true时显示窗体或控件,为false时不显示。
2.2 窗体常用的方法包括:
  1. Show(),该方法的作用是让窗体显示出来。
  2. Refresh(),该方法的作用是刷新并重画窗体。
  3. Close(),该方法的作用是关闭窗体。
2.3 窗体的主要事件包括:
  1. Load事件:该事件在窗体加载到内存时发生,即在第一次显示窗体前发生。
  2. Activated事件:该事件在窗体激活时发生。
  3. Deactivate事件:该事件在窗体失去焦点成为不活动窗体时发生。
  4. Resize事件:该事件在改变窗体大小时发生。
  5. Paint事件:该事件在重绘窗体时发生。
  6. Click事件:该事件在用户单击窗体时发生。
  7. Closed事件:该事件在窗体关闭时发生。

三、SimpleOpenglControl应用

  在动态链接库Tao.Platform.Windows中定义的SimpleOpenglControl类,其定义了几乎所有的Opengl主要绘图函数,包括场景初始化函数、场景绘制渲染函数、双缓存交换函数、重绘函数、窗口大小改变等等。在Form的派生类中添加一个内部的simpleOpenglControl类,就能使用它的所有属性和方法。

从关系图中可以看出模型类可以分为两部分,模型绘制和模型展示。模型绘制需要调用Tao.Opengl库的函数,并且渲染模型;模型展示则需要利用Form类和simpleOpenglControl类来实现。具体过程如下:

1)首先simpleOpenglControl类对象加载Load事件和SizeChanged事件;

2)然后在初始化函数中加载FormLoad事件;

3)最后simpleOpenglControl类对象加载Paint事件,实现重绘;

4)利用设置的timer事件来实现定期更新重绘模型。

四、Opengl绘制函数

Opengl实际上是一个C库函数,即没有类或对象,Tao库实际上是将所有函数封装在了不同的类中,如OpenGl类,SimpleOpenglControl类等等。在建模过程中使用的主要的函数如表2所示。

函数名称

主要用途

glPushMatrix()

将当前矩阵保存如栈顶,保证在其中运行的缩放、平移等变换不影响其他矩阵

glPopMatrix()

与glPushMatrix相对应,将当前矩阵弹出栈顶,两者需一起出现

glRotated()

将相乘旋转矩阵的当前的矩阵,参数包括旋转角度和旋转中心

glScaled()

缩放函数,参数是xyz方向上的缩放比

glTranslated()

平移函数,参数为xyz方向上的平移大小

glEnable()

启用相关功能函数,功能由参数决定,如画虚线等

glDisable()

关闭相关功能函数,一般与glEnable一起出现

glLineWidth()

用于指定绘制线段的像素宽度,参数为像素大小

glColor3d()

用于指定RGB颜色,参数为RGB值

glVertex3d()

用于指定三维顶点,参数为三维顶点值

glBegin()

绘图初始化函数,参数一般包括绘制顶点模式、线段模式等

glEnd()

与glBegin一起使用,在两者之间绘制图形

glViewPort()

用于确定打开窗口的坐标范围

glClearColor()

清除窗口颜色

glLoadIndentity()

重置当前指定的矩阵为单位矩阵

glMatrixMode()

指定哪一个矩阵是当前矩阵

glOrtho()

glOrtho函数是将当前的可视空间设置为正投影空间

gluLookat()

视点转换函数,参数包括视点位置,视点对准的物体在世界坐标的位置和视点向上的方向在世界坐标中的方向

表2 主要建模函数

tao.Opengl相关推荐

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

    一.tao.Opengl技术简介 Opengl是一种C风格的图形库,即opengl中没有类和对象,只有大量的函数.Opengl在内部就是一个状态机,利用不同的函数来修改opengl状态机的状态,以达到 ...

  2. tao.opengl + C#

    一.tao.Opengl技术简介 Opengl是一种C风格的图形库,即opengl中没有类和对象,只有大量的函数.Opengl在内部就是一个状态机,利用不同的函数来修改opengl状态机的状态,以达到 ...

  3. C# + opengl + Tao 环境配置

    基本配置 下载 Tao库 freeglut.dll 在项目中引用 测试代码 备注 基本配置 参考链接OpenGL C#绘图环境配置 下载 Tao库 下载tao库: https://sourceforg ...

  4. c# opengl tao

    本文并不是一个Opengl起步教程,本系列教程参考<Opengl 游戏编程>一书 对于OPENGL,C#有多个库可供选择,http://www.opengl.org/resources/b ...

  5. C#结合OpenGL绘图之Tao库

    转自:http://www.cnblogs.com/wangshide/archive/2012/04/14/2447499.html OpenGL support libraries GLU – S ...

  6. C# OpenGL 环境配置和入门程序

    效果: 环境:Win10 + vs2015: 需要2个东西: 下载tao库: http://www.taoframework.com 直接安装: FreeGlut.dll  FreeGlut.dll ...

  7. OpenGL C#绘图环境配置

    OpenGL C#绘图环境配置 OpenGL简介 OpenGL作为一种图形学编程接口已经非常流行, 虽然在大型游戏方面DirectX有一定的市场占有率, 但由于OpenGL的开放性,可移植性等优点,O ...

  8. OpenGL结合C#进行绘图 VS2015

    转自:http://www.cnblogs.com/wangshide/archive/2012/04/14/2447499.html 本人对OpenGL产生了浓厚的兴趣,又想学习一下C#这个语言,就 ...

  9. C#游戏编程之创建一个简单的卷轴射击游戏

    前几天很多朋友要求贴一篇有关C#游戏开发的实例.本篇文章是创建一个简单的卷轴射击游戏开发实例,内容比较完整,分享给大家,不过篇幅有些长,可以慢慢看哈!本文除CSDN博客外,任何媒体和出版物禁止转载和使 ...

最新文章

  1. Mask R-CNN:实例分割与检测算法
  2. linux date抖动,一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  3. SAP 中如何寻找增强
  4. VM克隆之后启动eth0找不到eth0:unknown interface:no such device
  5. 初学者Pytorch 和 Caffe 使用对比
  6. python生成api文档_文档API生成工具
  7. scrapy爬虫框架实现简单案例:爬取阳光平台内容
  8. 用了三星Dex,我已经快一个月回家没开过电脑了
  9. 学大数据需要具备四种条件?你具备几种?
  10. Java开发对接招行一网通支付功能的总结
  11. Win10 内置 OpenSSH 使用密钥连不上的问题解决
  12. 用凯撒密码对喜欢的人表白
  13. 基本数据类型的隐式转换
  14. C#如何读取身份证阅读器
  15. 红细胞膜载IR780纳米粒(IR780@RBC MNPs)|红细胞囊泡修饰聚乙烯亚胺载体
  16. java中钩子函数回调函数_钩子函数和回调函数
  17. Apple 公司的电影预告片网站
  18. 李琦自曝女儿不是亲生 但丝毫不影响家庭的美满幸福
  19. 理解分布式数据处理的三个级别
  20. 中国电信2025年全网具备规模提供千兆以上到户能力

热门文章

  1. 微信开发 JS接口安全域名修改
  2. Strong-Convexity:强凸性
  3. 机器学习之朴素贝叶斯
  4. python爬取appstore的评论数据的步骤_评论抓取:Python爬取微信在APPStore上的评论内容及星级...
  5. 张飞流水帐(完整版)
  6. [深度学习从入门到女装]V-Net
  7. 尤雨溪:VUE 3 之后会休息一下
  8. 微信小程序使用后台播放器播放音乐
  9. ad网络标号设置经验_AD9 设置网络标号作用域
  10. OpenGL ES 简介