OpenGL结合C#进行绘图
转自: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#进行绘图的更多相关文章
- OpenGL中的常用绘图的命令与效果(经验设置)
1. 剔除多边形表面 在三维空间中,一个多边形虽然有两个面,但我们无法看见背面的那些多边形,而一些多边形虽然是正面的,但被其他多边形所遮挡.如果将无法看见的多边形和可见的多边形同等对待,无疑会降低我们 ...
- opengl 实体和网格绘图函数(基础)(转)
http://blog.csdn.net/he_wen_jian/article/details/8594880 GLUT工具箱提供几种图形3维图形的函数: void glutWireSphere(G ...
- [置顶] 使用Android OpenGL ES 2.0绘图之五:添加运动
传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...
- [置顶] 使用Android OpenGL ES 2.0绘图之六:响应触摸事件
传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...
- Qt OpenGL三维绘图
简介 OpenGL是为三维绘图提供的标准应用编程接口. OpenGL处理的仅仅是三维绘图方面,而很少或是根本不提供图形用户界面编程方面的支持.OpenGL*应用程序的用户界面必须由其它工具包创建,比 ...
- iOS 使用Quartz和OpenGL绘图
http://blog.csdn.net/coder9999/article/details/7641701 第十二章 使用Quartz和OpenGL绘图 有时应用程序需要能够自定义绘图.一个库是Qu ...
- Qt的Graphics-View框架和OpenGL结合详解
Qt的Graphics-View框架和OpenGL结合详解 演示程序下载地址:这里 程序源代码下载地址:这里 这是一篇纯技术文,介绍了这一个月来我抽时间研究的成果. Qt中有一个非常炫的例子:Boxe ...
- Android OpenGL库加载过程源码分析
Android系统采用OpenGL绘制3D图形,使用skia来绘制二维图形:OpenGL源码位于: frameworks/native/opengl frameworks/base/opengl 本文 ...
- EGL接口介绍-----Android OpenGL ES底层开发
引自:http://www.cnitblog.com/zouzheng/archive/2011/05/30/74326.html EGL 是 OpenGL ES 和底层 Native 平台视窗系统之 ...
随机推荐
- C#常见问题总结(二)
1.erp系统可以在具有固定ip的拥有多层服务器的局域网中使用吗?如何使用 解决方法: 把ini.配置文件字符串中的服务器名改成服务器的,把debug文件夹拷到其他机器上就行,服务器上的服务器名是默认 ...
- 最大流模版 dinic
朴素dinic+多路增广 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- 夏令营提高班上午上机测试 Day 1 解题报告
Day 1的题难度上来说不算太高,但是T2和T3还是有一定的思维量的. 一个比较好的开始.虽然AK的人只有几个.. (懒得去翻result了..忘了当时拿了多少分了 (哦,前两天我们机房是没有成绩的, ...
- CF 375C Circling Round Treasures [DP(spfa) 状压 射线法]
C - Circling Round Treasures 题意: 在一个$n*m$的地图上,有一些障碍,还有a个宝箱和b个炸弹.你从(sx,sy)出发,走四连通的格子.你需要走一条闭合的路径,可以自交 ...
- POJ 2079 Triangle [旋转卡壳]
Triangle Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 9525 Accepted: 2845 Descript ...
- 解决asp.net MVC中 当前上下文中不存在名称“model” 的问题
在vs2013下打开同事上传的cshtml视图文件报错,出现当前上下文中不存在名称“model”,ViewBag,Url等等,在视图中也没有智能提示了:但是不影响编译运行,只是开发时候比较麻烦,但在同 ...
- pyhton:图像旋转
最近一个作业中要用到图像旋转,分享一下学习过程.如有讲错的地方,恳请指正! 图像旋转,想想真简单啊,不就是将图像矩阵乘上一个旋转平移矩阵就完了吗?实际上还真没这么简单.首先这个旋转平移矩阵怎么获得?通 ...
- idea Code激活
参考:http://blog.csdn.net/gnail_oug/article/details/70677272 1.将激活包复制到bin安装目录: 2.在安装的idea下面的bin目录下面有2个 ...
- 详解CSS display:inline-block的应用
阅读目录 基础知识 inline-block的问题 inline-block的应用 总结 本文详细描述了display:inline-block的基础知识,产生的问题和解决方法以及其常见的应用场景,加 ...
- [Python Study Notes]psutil模块
系统性能信息模块psutil psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(CPU,内存,磁盘,网络等)信息,主要应用于系统监控,分析和限制系统资源及进程的管理,它实现了同等 ...