zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    Smart Client Architecture and Design Guide
    Duwamish密码分析篇, Part 3
    庆贺发文100篇
    .Net Distributed Application Design Guide
    New Introduction to ASP.NET 2.0 Web Parts Framework
    SPS toplevel Site Collection Administrators and Owners
    来自Ingo Rammer先生的Email关于《Advanced .Net Remoting》
    The newsletter published by Ingo Rammer
    深度探索.Net Remoting基础架构
    信道、接收器、接收链和信道接受提供程序
  • 原文地址:https://www.cnblogs.com/mothe123/p/3622037.html
Copyright © 2011-2022 走看看