tao.opengl + C#
一、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 主要建模函数
转自:http://www.cnblogs.com/z1987/p/4534498.html
tao.opengl + C#相关推荐
- C#中使用tao.opengl绘制三维模型
一.tao.Opengl技术简介 Opengl是一种C风格的图形库,即opengl中没有类和对象,只有大量的函数.Opengl在内部就是一个状态机,利用不同的函数来修改opengl状态机的状态,以达到 ...
- tao.Opengl
一.tao.Opengl技术简介 Opengl是一种C风格的图形库,即opengl中没有类和对象,只有大量的函数.Opengl在内部就是一个状态机,利用不同的函数来修改opengl状态机的状态,以达到 ...
- C# + opengl + Tao 环境配置
基本配置 下载 Tao库 freeglut.dll 在项目中引用 测试代码 备注 基本配置 参考链接OpenGL C#绘图环境配置 下载 Tao库 下载tao库: https://sourceforg ...
- c# opengl tao
本文并不是一个Opengl起步教程,本系列教程参考<Opengl 游戏编程>一书 对于OPENGL,C#有多个库可供选择,http://www.opengl.org/resources/b ...
- C#结合OpenGL绘图之Tao库
转自:http://www.cnblogs.com/wangshide/archive/2012/04/14/2447499.html OpenGL support libraries GLU – S ...
- C# OpenGL 环境配置和入门程序
效果: 环境:Win10 + vs2015: 需要2个东西: 下载tao库: http://www.taoframework.com 直接安装: FreeGlut.dll FreeGlut.dll ...
- OpenGL C#绘图环境配置
OpenGL C#绘图环境配置 OpenGL简介 OpenGL作为一种图形学编程接口已经非常流行, 虽然在大型游戏方面DirectX有一定的市场占有率, 但由于OpenGL的开放性,可移植性等优点,O ...
- OpenGL结合C#进行绘图 VS2015
转自:http://www.cnblogs.com/wangshide/archive/2012/04/14/2447499.html 本人对OpenGL产生了浓厚的兴趣,又想学习一下C#这个语言,就 ...
- C#游戏编程之创建一个简单的卷轴射击游戏
前几天很多朋友要求贴一篇有关C#游戏开发的实例.本篇文章是创建一个简单的卷轴射击游戏开发实例,内容比较完整,分享给大家,不过篇幅有些长,可以慢慢看哈!本文除CSDN博客外,任何媒体和出版物禁止转载和使 ...
最新文章
- 《大数据、小数据、无数据:网络世界的数据学术》一 导读
- 一篇文章让你彻底了解什么叫Netty!大牛看了直呼内行!
- TensorFlow学习笔记(二十二) tensorflow数据读取方法总结
- Unity C# 设计模式(一)单例模式
- linux编译安装的报错,linux编译安装时常见错误解决办法
- 生产者-消费者 BlockingQueue 运用示例
- [Hive]Hive表文件压缩介绍
- Android 实现计时器
- DoIP(一)——基础概念
- iOS中 语音识别功能/语音转文字教程详解
- 教你用python截屏APP,将截取到的图片进行文字识别并将信息保存在EXCEL中。(附源码)
- 简单明了的java反射机制
- AndroidStudio导入Bmob后端云一系列错误
- 怎么查看笔记本内存条型号_新买的笔记本如何查看笔记本内存条型号有哪些方法...
- 【华人学者风采】黄维 西北工业大学
- java sql查询空内容,sql查询空指针异常
- PiXYZStudio:Revit 模型轻量化
- selenium学习之安全微伴自动完成
- 错误接受率 (FAR), 错误拒绝率(FRR), 等错误率(EER)
- 教育:构造主义和机能主义