zoukankan      html  css  js  c++  java
  • OpenGL C#绘图环境配置

    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库: http://www.taoframework.com

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

    2. 如何导入所需的库:

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

    然后在 .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, 1.0f, 1.0f, 1.0f); // 白色背景
    Gl.glColor3f(1.0f, 0.0f, 0.0f); // 用红色绘制图形

    // 建立视图
    Gl.glMatrixMode(Gl.GL_PROJECTION);
    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, 100, 120);
    Gl.glFlush();
    }
    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();
    }
    }

    复制代码
     1 using System.Collections.Generic;
     2 using System.Linq;
     3 using System.Text;
     4 
     5 using Tao.OpenGl;
     6 using Tao.FreeGlut;
     7 using Tao.Platform.Windows;
     8 
     9 class Program
    10 {
    11     static string title = "用 glRecti() 画矩形";
    12     static void myInit( )
    13     {
    14         // 设置属性
    15         Gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // 白色背景
    16         Gl.glColor3f(1.0f, 0.0f, 0.0f); // 用红色绘制图形
    17         
    18         // 建立视图
    19         Gl.glMatrixMode(Gl.GL_PROJECTION);
    20         Gl.glLoadIdentity();
    21         Glu.gluOrtho2D(0.0, 600.0, 0.0, 600.0);
    22     }
    23     static void display()
    24     {
    25         Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
    26         Gl.glRecti(0, 0, 100, 120);
    27         Gl.glFlush();
    28     }
    29     static void Main(string[] args)
    30     {
    31         Glut.glutInit();
    32         Glut.glutInitDisplayMode(Glut.GLUT_RGBA | Glut.GLUT_SINGLE);
    33         Glut.glutInitWindowPosition(400, 100);
    34         Glut.glutInitWindowSize(600, 600);
    35         Glut.glutCreateWindow(title);
    36 
    37         myInit();
    38         Glut.glutDisplayFunc(display);
    39         Glut.glutMainLoop();
    40 
    41         Console.ReadKey();
    42     }
    43 }
    复制代码

    运行后发现有问题, 缺少 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。

  • 相关阅读:
    线程TLAB区域的深入剖析
    ivotal-tc-Server与Tomcat区别
    Java线程面试题 Top 50 (转载)
    Java并发编程:Timer和TimerTask(转载)
    Java并发编程:Callable、Future和FutureTask
    Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
    Java并发编程:线程池的使用
    Java多线程与并发库高级应用-可阻塞的队列
    java多线程与并发库高级应用-工具类介绍
    Google guava工具类的介绍和使用
  • 原文地址:https://www.cnblogs.com/guanshan/p/guan2015-6-16_1.html
Copyright © 2011-2022 走看看