转自:http://www.cnblogs.com/wangshide/archive/2012/04/14/2447499.html

本人对OpenGL产生了浓厚的兴趣,又想学习一下C#这个语言,就想两个一起学习一下,就正好发现这篇文章,结合起来学习。

路漫漫其修远兮,吾将上下而求索!!

OpenGL简介

OpenGL作为一种图形学编程接口已经非常流行, 虽然在大型游戏方面DirectX有一定的市场占有率, 但由于OpenGL的开放性,可移植性等优点,OpenGL已经成了一种图形学方面的标准。

由于选修了OpenGL计算机图形学编程, 上课老师用的是C的OpenGL绑定, 转而找了下其他的绑定http://www.opengl.org/resources/bindings/,有

(1)Python的 pyOpenGL;

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

(3)JavaScript:WebGL
等等。 这样我们就可以利用自己熟悉的语言来编写OpenGL的图形程序了。

(值得注意的是:每个不同的绑定基本都包括了 gl 库[OpenGL的核心函数库], glu库[实用函数库], glut库[实用工具箱] 等等)

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.

本人常用的语言是C#和Python, 最后选了C#的tao作为编程环境。

1. 如何配置绑定:

首先下载tao库:(原文提供的链接没打开,遂从csdn下载的,链接:http://download.csdn.net/download/qiangzhiliu2003/2829428)

然后安装到自己熟悉的目录。

2. 如何导入所需的库:

新建C#控制台项目,导入刚才安装的程序目录 bin下的: Tao.OpenGL.dll, Tao.FreeGlut.dll, Tao.Platform.Windows.dll.

(项目--添加引用--浏览--bin)

然后在 .cs 文件开头加入:

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

3. 编程示例:

写一个简单的程序:

using System.Collections.Generic;
using System.Linq;
using System.Text; using Tao.OpenGl;
using Tao.FreeGlut;
using Tao.Platform.Windows; class Program
{
static string title = "用 glRecti() 画矩形";
static void myInit()
{
// 设置属性
Gl.glClearColor(1.0f, 0.0f, 0.0f, 0); // 红色背景
Gl.glColor3f(0.0f, 1.0f, 0.0f); // 用绿色绘制图形 // 建立视图
Gl.glMatrixMode(Gl.GL_PROJECTION);
//Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();
Glu.gluOrtho2D(0.0, 600.0, 0.0, 600.0);
}
static void display()
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glRecti(0, 0, 500, 120);
Gl.glFlush();//glFlush()是OpenGL中的函数,用于强制刷新缓冲,保证绘图命令将被执行,而不是存储在缓冲区中等待其他的OpenGL命令
}
static void Main(string[] args)
{
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGBA | Glut.GLUT_SINGLE);//函数功能为设置初始显示模式
Glut.glutInitWindowPosition(400, 100);
Glut.glutInitWindowSize(600, 600);
Glut.glutCreateWindow(title); myInit();
Glut.glutDisplayFunc(display);
Glut.glutMainLoop(); //Console.ReadKey();//这句我在运行时出现问题,干脆给注释掉了
}
}

  

运行后发现有问题, 缺少 FreeGlut.dll , 怎么回事?不是已经把库导入了吗? Goolge一下, 还需要FreeGlut.dll 文件。

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

下载:freeglut 2.8.0 MSVC Package, 可能要比这个新。

然后将压缩包中 bin 下的 freeglut.dll 复制到 windows目录下。

运行, 一切OK。

OpenGL结合C#进行绘图的更多相关文章

  1. OpenGL中的常用绘图的命令与效果(经验设置)

    1. 剔除多边形表面 在三维空间中,一个多边形虽然有两个面,但我们无法看见背面的那些多边形,而一些多边形虽然是正面的,但被其他多边形所遮挡.如果将无法看见的多边形和可见的多边形同等对待,无疑会降低我们 ...

  2. opengl 实体和网格绘图函数(基础)(转)

    http://blog.csdn.net/he_wen_jian/article/details/8594880 GLUT工具箱提供几种图形3维图形的函数: void glutWireSphere(G ...

  3. [置顶] 使用Android OpenGL ES 2.0绘图之五:添加运动

    传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...

  4. [置顶] 使用Android OpenGL ES 2.0绘图之六:响应触摸事件

    传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...

  5. Qt OpenGL三维绘图

     简介 OpenGL是为三维绘图提供的标准应用编程接口. OpenGL处理的仅仅是三维绘图方面,而很少或是根本不提供图形用户界面编程方面的支持.OpenGL*应用程序的用户界面必须由其它工具包创建,比 ...

  6. iOS 使用Quartz和OpenGL绘图

    http://blog.csdn.net/coder9999/article/details/7641701 第十二章 使用Quartz和OpenGL绘图 有时应用程序需要能够自定义绘图.一个库是Qu ...

  7. Qt的Graphics-View框架和OpenGL结合详解

    Qt的Graphics-View框架和OpenGL结合详解 演示程序下载地址:这里 程序源代码下载地址:这里 这是一篇纯技术文,介绍了这一个月来我抽时间研究的成果. Qt中有一个非常炫的例子:Boxe ...

  8. Android OpenGL库加载过程源码分析

    Android系统采用OpenGL绘制3D图形,使用skia来绘制二维图形:OpenGL源码位于: frameworks/native/opengl frameworks/base/opengl 本文 ...

  9. EGL接口介绍-----Android OpenGL ES底层开发

    引自:http://www.cnitblog.com/zouzheng/archive/2011/05/30/74326.html EGL 是 OpenGL ES 和底层 Native 平台视窗系统之 ...

随机推荐

  1. React入门教程

    做前端的人都知道,目前热门前端的框架是 VAR => Vue,Anglur,React. 而如果说最热门的前端框架是谁,毫无悬念是 React React 是由 Facebook 主导开发的一个 ...

  2. iOS-Runtime的那些事...编辑中....

    Runtime-iOS的黑魔法,还是很好玩的,消息机制.方法替换简单记录了一点,持续更新.... 1.方法替换 在类load方法中,替换系统方法 + (void)load{ Method oldCol ...

  3. log4j源码解析-文件解析

    承接前文log4j源码解析,前文主要介绍了log4j的文件加载方式以及Logger对象创建.本文将在此基础上具体看下log4j是如何解析文件并输出我们所常见的日志格式 附例 文件的加载方式,我们就选举 ...

  4. BZOJ 2734: [HNOI2012]集合选数 [DP 状压 转化]

    传送门 题意:对于任意一个正整数 n≤100000,如何求出{1, 2,..., n} 的满足若 x 在该子集中,则 2x 和 3x 不能在该子集中的子集的个数(只需输出对 1,000,000,001 ...

  5. 使用Scanner获取键盘输入

    使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件.输入流 .字符串中解析出基本类型值和字符串值.Scanner类提供了多个构造器,不同 ...

  6. window MySQL解压缩版部署及配置

    MySQL安装分为解压文件和直接安装.exe文件 我在官网下载的是解压文件 官网下载地址https://dev.mysql.com/downloads/mysql/ 一.MySQL部署 1.将下载下来 ...

  7. LNMP环境下搭建wordpress

    WordPress 下载WordPress安装包,可以直接wget获取也可以ftp上传,解压到/usr/share/nginx/html/blog-wp,访问index.php即进行安装:   wor ...

  8. JaveScript函数(JS知识点归纳六)

    1.函数的基本使用 a)作用:代码的复用,灵活性比较强 b)声明方式:function 名 (形参){函数体} c)调用: 名(实参); d)封装函数--书写一个函数的结构,而且放入一些功能,在需要使 ...

  9. Java经典编程题50道之四十四

    求0~7所能组成的奇数个数.分析:组成1位数是4个,组成2位数是7*4个,组成3位数是7*8*4个,组成4位数是7*8*8*4个…… public class Example44 {    publi ...

  10. 权限认证 cookie VS token

    权限认证 cookie VS token 我前公司的应用都是 token 授权的,现公司都是维护一个 session 确认登录状态的.那么我在这掰扯掰扯这两种权限认证的方方面面. 工作流程 先说 co ...