一、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+C#绘制三维模型的更多相关文章

  1. CSharpGL(6)在OpenGL中绘制UI元素

    CSharpGL(6)在OpenGL中绘制UI元素 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入 ...

  2. 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)

    0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...

  3. 使用OpenGL ES绘制3D图形

    如果应用定义的顶点不在同一个平面上,并且使用三角形把合适的顶点连接起来,就可以绘制出3D图形了. 使用OpenGL  ES绘制3D图形的方法与绘制2D图形的步骤大致相同,只是绘制3D图形需要定义更多的 ...

  4. 【Qt for Android】OpenGL ES 绘制彩色立方体

    Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...

  5. OpenGL学习-------绘制简单的几何图形

    本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中会有所不同.数学上的 ...

  6. [转]关于OpenGL的绘制上下文

    [转]关于OpenGL的绘制上下文 本文转自(http://www.cnblogs.com/Liuwq/p/5444641.html) 什么是绘制上下文(Rendering Context) 初学Op ...

  7. 关于OpenGL的绘制上下文

    什么是绘制上下文(Rendering Context) 初学OpenGL,打开红宝书,会告诉你OpenGL是个状态机,OpenGL采用了客户端-服务器模式,那时觉得好抽象,直到后来了解了绘制上下文才把 ...

  8. 2.x最终照着教程,成功使用OpenGL ES 绘制纹理贴图,添加了灰度图

    在之前成功绘制变色的几何图形之后,今天利用Openg ES的可编程管线绘制出第一张纹理. 学校时候不知道OpenGL的重要性,怕晦涩的语法.没有跟老师学习OpenGL的环境配置,现在仅仅能利用coco ...

  9. Android OpenGL ES 开发(四): OpenGL ES 绘制形状

    在上文中,我们使用OpenGL定义了能够被绘制出来的形状了,现在我们想绘制出来它们.使用OpenGLES 2.0来绘制形状会比你想象的需要更多的代码.因为OpenGL的API提供了大量的对渲染管线的控 ...

随机推荐

  1. poj 3693 Maximum repetition substring 重复次数最多的连续子串

    题目链接 题意 对于任意的字符串,定义它的 重复次数 为:它最多可被划分成的完全相同的子串个数.例如:ababab 的重复次数为3,ababa 的重复次数为1. 现给定一字符串,求它的一个子串,其重复 ...

  2. luogu 1258 小车问题 小学奥数(?)

    题目链接 题意 甲.乙两人同时从A地出发要尽快同时赶到B地.出发时A地有一辆小车,可是这辆小车除了驾驶员外只能带一人.已知甲.乙两人的步行速度一样,且小于车的速度.问:怎样利用小车才能使两人尽快同时到 ...

  3. linux中的strip命令简介------给文件脱衣服【转】

    转自:http://blog.csdn.net/stpeace/article/details/47090255 版权声明:本文为博主原创文章,转载时请务必注明本文地址, 禁止用于任何商业用途, 否则 ...

  4. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---21

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  5. malloc和free函数的使用

    #include <stdio.h> #include <stdlib.h> int main() { int *p,t; p = (int *)malloc(40*sizeo ...

  6. LeetCode OJ--Same Tree

    https://oj.leetcode.com/problems/same-tree/ 判断两个二叉树,是否相等. 深搜 /** * Definition for binary tree * stru ...

  7. AC日记——文艺平衡树 洛谷 P3391

    文艺平衡树 思路: splay翻转操作模板: 虚拟最左最右端点,然后每次都把l翻转到root,r+2翻转到root的右节点: 然后在r+2的左节点上打标记: 标记需要在旋转,rank,print时下放 ...

  8. 关于asp.netCore3.0区域和路由配置

    在ASP.NET Core 3.0中路由配置和2.0不一样了 一.MVC 服务注册 ASP.NET Core 3.0 添加了用于注册内部的 MVC 方案的新选项Startup.ConfigureSer ...

  9. CVPR 2019|PoolNet:基于池化技术的显著性检测 论文解读

    作者 | 文永亮 研究方向 | 目标检测.GAN 研究动机 ​ 这是一篇发表于CVPR2019的关于显著性目标检测的paper,在U型结构的特征网络中,高层富含语义特征捕获的位置信息在自底向上的传播过 ...

  10. 详解Swift和OC的混编

    前言: 我们在一些情况下,仅仅使用swift 是无法完成一个项目的,在swift项目中必要用到 OC 实现一些功能,比如,项目要使用一些第三方的框架,但这个第三方的框架却是用 OC 实现的,或者你的项 ...