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 平台视窗系统之 ...
随机推荐
- isFile() exists() isDirectory()的区别
isFile()public boolean isFile()测试此抽象路径名表示的文件是否是一个标准文.如果该文件不是一个目录,并且满足其他与系统有关的标准,那么该文件是标准文件.由Java应用程序 ...
- 史上最全的JFinal源码分析(不间断更新)
打算 开始 写 这么 一个系列,希望 大家 喜欢,学习 本来就是 一个查漏补缺的过程,希望大家能提出建议.本篇 文章 是整个目录的向导,希望 大家 喜欢.本文 将以 包的形式跟大家做向导. Handl ...
- 使用py2exe发布windows平台Python
一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序.py2ex ...
- 【SSH框架】之Spring系列(一)
微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.前言 前面更新过几篇关于 Struts2 框架和 Hibernate 框架的文章,但鉴于这两 ...
- 简单的led驱动程序设计
基于ok6410: led驱动程序: vim led.c #include<linux/kernel.h>#include<linux/module.h>#include< ...
- ThinkPHP的使用
在public目录下使用命令行执行:php -S localhost:8888 route.php 无需使用服务器就可启动
- go get报错unrecognized import path “golang.org/x/net/context”…
今天安装gin框架,首先下载gin,命令如下:go get github.com/mattn/go-sqlite3 结果报错: package golang.org/x/net/context: un ...
- 分布式代码管理系统Git实践
1.1 版本管理工具介绍 什么是版本管理工具 为什么要使用版本管理工具? 老板要求小明写一个可行性报告,当他写完给老板看后,结果-- Git简介 早先linux内核代码托管在B ...
- MyEclipse出现红色感叹号解决办法
今天在做数据库连接练习的时候自己创建的工程突然出现了一个红色的感叹号,然后运行自己写的代码的时候出现找不到主类的错误!!! 我还以为是自己不小心写错了,然后让编译器自动生成代码也出现了一样的问题... ...
- Angular2 ^ 资源链接
Angular2 资源链接 Material Desgin 2 githubhttps://github.com/Promact/md2 DEMOhttp://code.promactinfo.co ...