c# opengl tao
本文并不是一个Opengl起步教程,本系列教程参考《Opengl 游戏编程》一书
对于OPENGL,C#有多个库可供选择,http://www.opengl.org/resources/bindings/,自己可以去查询,本系列教程使用The Tao Framework+.net 2.0,作为开发平台
使用版本:taoframework-2.1.0
搭建环境有两个方式,一个类似控制台程序 等同于C int main(int argc, char** argv) 。
原书使用win32方式,我们使用winform项目搭建。
启动VS,新建一个C# WindowsFormsApplication,然后新建一个class
引用taoframework 的Tao.OpenGl、Tao.Glfw 、Tao.Platform.Windows
using System;
using System.Collections.Generic;
using System.Text;
using Tao.Glfw;
using Tao.OpenGl;namespace OpenGL
{/// <summary>/// 第二章 Opengl程序框架 C# by 大师♂罗莊/// </summary>class Examplefirst : IDisposable{internal String title = "第二章 Opengl程序框架";///窗口大小internal int windowWidth, windowHeight;//鼠标位置internal int mouseX, mouseY;//是否运行internal bool isRunning;//当前帧internal double currentTime, startTime;public Examplefirst(){// 初始化 GLFWGlfw.glfwInit();// 创建 OpenGL windowif (Glfw.glfwOpenWindow(640, 480, 0, 0, 0, 0, 0, 0, Glfw.GLFW_WINDOW) == Gl.GL_FALSE){//不成功,退出Glfw.glfwTerminate();return;}Glfw.glfwSetWindowTitle(title);// 接受按键输入Glfw.glfwEnable(Glfw.GLFW_STICKY_KEYS);//禁用垂直同步 vertical syncGlfw.glfwSwapInterval(0);// 主循环isRunning = true;}/// <summary>/// 入口点/// </summary>public void Run(){//使用循环,和原书一致while (isRunning){// 获得鼠标位置Glfw.glfwGetMousePos(out mouseX, out mouseY);//获得时间,将来用来做动画currentTime = Glfw.glfwGetTime();// 获得当前窗口大小,因为是窗口模式,用户可以改变大小Glfw.glfwGetWindowSize(out windowWidth, out windowHeight);//防止除零问题windowHeight = windowHeight > 0 ? windowHeight : 1;InitGL(windowWidth, windowHeight);DrawGLScene(mouseX, currentTime);// 显存交换Glfw.glfwSwapBuffers();Update((float)(currentTime - startTime));startTime = currentTime;}// 结束Glfw.glfwCloseWindow();Glfw.glfwTerminate();}/// <summary>/// 更新用/// </summary>public virtual void Update(float milliseconds){//按下ESC结束isRunning = ((Glfw.glfwGetKey(Glfw.GLFW_KEY_ESC) == Glfw.GLFW_RELEASE) &&Glfw.glfwGetWindowParam(Glfw.GLFW_OPENED) == Gl.GL_TRUE);}/// <summary>/// 原书的初始化方法,C# by 大师♂罗莊/// </summary>/// <param name="windowWidth">窗口宽</param>/// <param name="windowHeight">窗口高</param>/// <returns></returns>Boolean InitGL(int windowWidth, int windowHeight){// 设置视口 viewportGl.glViewport(0, 0, windowWidth, windowHeight);//启用阴影平滑Gl.glShadeModel(Gl.GL_SMOOTH);//启用反走样Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST);// 重置黑色背景Gl.glClearColor(0, 0, 0, 0);Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);// 设置投影模式 projection matrixGl.glMatrixMode(Gl.GL_PROJECTION);Gl.glLoadIdentity();iniView(windowWidth, windowHeight);return true;}/// <summary>/// 初始化视口投影,本例子没有采用原书例子,自定义的视口/// </summary>public virtual void iniView(int windowWidth, int windowHeight){Glu.gluPerspective(65, windowWidth / (double)windowHeight, 1, 100);// 选择模型观察矩阵 modelview matrixGl.glMatrixMode(Gl.GL_MODELVIEW);//重置模型观察矩阵Gl.glLoadIdentity();Glu.gluLookAt(0, 1, 0, // 眼睛位置0, 20, 0, // 观察点0, 0, 1); // 怎么看}/// <summary>/// 原书的绘制方法 C# by 大师♂罗莊/// <param name="mouseX">鼠标位置</param>/// <param name="currentTime">当前帧</param>/// </summary>public virtual void DrawGLScene(int mouseX, double currentTime){// 画三角形Gl.glTranslatef(0, 14, 0);Gl.glBegin(Gl.GL_TRIANGLES);Gl.glColor3f(1, 0, 0);Gl.glVertex3f(-5, 0, -4);Gl.glColor3f(0, 1, 0);Gl.glVertex3f(5, 0, -4);Gl.glColor3f(0, 0, 1);Gl.glVertex3f(0, 0, 6);Gl.glEnd();}public void Dispose(){Glfw.glfwCloseWindow();Glfw.glfwTerminate();}}
}
如果没有opengl基础,要看懂上面例子比较困难。这里要求大家学习Opengl基础了。原书用了22-70页讲述框架搭建,你看我们才160行代码。。。
首先我们要理解,我们用win32方式非命令行方式,需要大家学习win32 编程,知道我们使用消息循环,初始化 GLFW就采用这种方式。
接下来我们需要初始化OpenGL变换:
物体坐标-》模型视点矩阵-》投影矩阵-》视口变换-》屏幕
为了以后教程方便,或者说我想节省代码(XXXX)。。
我把上述过程拆分为
InitGL 初始化OpenGL,基本不会变动的
iniView 初始化 投影矩阵和模型视点矩阵
DrawGLScene 绘制场景
Update 数据更新
这几个方法,都是用virtual 函数,将来我们可以通过重载修改里面的方法实现新场景。
然后把winform 启动类Program.cs修改为
using System.Collections.Generic;
using System.Text;
using System;namespace OpenGL
{class Program{[STAThread]static void Main(string[] args){Examplefirst main = new Examplefirst();main.Run();}}
}
也就是我们的Class 就好了。
但上述方法我们是无法启动程序的,会报缺少glfw.dll,这是因为taoframework封装C代码或者说非托管代码,我们还需要把本地代码glfw.dll拷贝到程序目录才可以运行。
大家要注意的是,本机代码分X86和X64,也就是32位和64位,taoframework自带的是32位版本,这里有两个办法:
1、将VS 项目 build- platform target的Any Cpu 修改为x86,然后使用taoframework自带的glfw.dll
或者
去glfw官方下载编译好的X86和X64版本,然后制作两个平台的EXE。
OpenGl参考资料
1. 《 OpenGL Reference Manual 》, OpenGL 参考手册
2. 《 opengl 游戏编程》作者:徐明亮,卢红星,王琬编著,机械工业出版社, 本系列教程代码均参照此书,代码下载http://down.51cto.com/data/201697
3. 《win32 OpenGL编程 》 一个大牛的博客 http://blog.csdn.NET/vagrxie/article/category/628716/3
4. 《OpenGL函数思考 》 里面有很多OpenGL函数的通俗解释 http://blog.csdn.Net/shuaihj
c# opengl tao相关推荐
- C# + opengl + Tao 环境配置
基本配置 下载 Tao库 freeglut.dll 在项目中引用 测试代码 备注 基本配置 参考链接OpenGL C#绘图环境配置 下载 Tao库 下载tao库: https://sourceforg ...
- C#中使用tao.opengl绘制三维模型
一.tao.Opengl技术简介 Opengl是一种C风格的图形库,即opengl中没有类和对象,只有大量的函数.Opengl在内部就是一个状态机,利用不同的函数来修改opengl状态机的状态,以达到 ...
- tao.Opengl
一.tao.Opengl技术简介 Opengl是一种C风格的图形库,即opengl中没有类和对象,只有大量的函数.Opengl在内部就是一个状态机,利用不同的函数来修改opengl状态机的状态,以达到 ...
- tao.opengl + C#
一.tao.Opengl技术简介 Opengl是一种C风格的图形库,即opengl中没有类和对象,只有大量的函数.Opengl在内部就是一个状态机,利用不同的函数来修改opengl状态机的状态,以达到 ...
- 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实用开源代码列表
有了网络的最大好处就是可以资源共享.网络是最大的知识库,也是最好的老师,正所谓"没有你想不到的,只有你找不到的".以下是我收集的以游戏编程,OpenGL 3D编程相关的免费扩展库资 ...
- Tao 1.2.0图形框架发布
Tao 1.2.0图形框架发布 Tao图形框架是方便在Mono和.Net环境下进行游戏相关开发的库绑定和实用工具集.目前,对以下库提供支持: Cg - [Cg website] DevIL - [De ...
- OpenGL C#绘图环境配置
OpenGL C#绘图环境配置 OpenGL简介 OpenGL作为一种图形学编程接口已经非常流行, 虽然在大型游戏方面DirectX有一定的市场占有率, 但由于OpenGL的开放性,可移植性等优点,O ...
最新文章
- Struts和Sitemesh整合,实现多个装饰器
- iPhone11翻车了?发烫严重、信号依旧差...
- 玩转Java8的 Stream 之函数式接口
- 2019湖南职高计算机总分是多少,2019湖南高职单招一般多少分能过
- excel制作窗体查询界面_利用 VBA窗体制作excel登录界面
- JVM指令集(指令码、助记符、功能描述)(转)
- Mac上终端的命令总结
- wget通过代理上网办法
- Springboot物业管理系统
- vs2012 express 密钥
- 北航计算机学院博士开题,【北航毕设开题报告】北航博士开题报告格式.doc
- Xshell v5.0 Build 0983 绿色版本
- 蓝牙音箱方案硬件架构介绍
- 为什么有机棉这么贵,还深受欢迎?
- x570主板怎么样 x570主板支持的cpu
- 彻底搞懂隐式类型转换
- SMTP邮件服务端口
- android来电归属地提醒
- paper reading——《Improving Person Re-identification by Attribute and Identity Learning》
- 健康开怀一辈子(转)