Freeglut Windows Programming on NetBeans

在Windows下使用freeglut来开发OpenGL应用过程中,有诸多不便:

  • Windows下Cygwin的OpenGL有两种实现方式. 一是win32api方式,但这种方式并不支持freeglut. 另一种方式虽支持freeglut,但只适用于X Windows系统。
  • Freeglut官方的版本不能直接使用,需先进行相对复杂的编译后方何使用。
  • MinGW下倒有一个直接实现的方式。但不能直接适用于Cygwin.
  • NetBeans有一个JOGL插件,但其只适用于Java语言,反倒丧失了C/C++的高效。

笔者使用Cygwin而非MinGW,且钟情于NetBeans而非Visual Studio,经过一番研究,找出了在基于Cygwin的NetBeans中使用freeglut来开发OpenGL应用的方法。

安装Cygwin的opengl及win32api组件

通过Cygwin安装完opengl及win32api组件后,在 %CygwinRoot%\usr\include\win32api\GL路径下面将出现gl.h, glaux.h, glew.h, glu.h, wglew.h等几个文件,当然,还没有freeglut.h头文件。

下载并配置freeglut

Transmission Zero维护着freeglut的MSVC及MinGW两个版本。MSVC版本专门针对微软的Visual Studio而设计,我们下载其MinGW版本

为避免我们自行下载的freeglut与cygwin的组件混杂,可另外新建一个目录,如C:\freeglut。然后,将freeglut-MinGW.zip压缩文件中的include及lib两个文件夹复制到该目录中。bin文件夹下各有一个32位及64位的freeglut.dll文件。根据操作系统是32位或64位,将其复制到相应位置。对于32位的Windows,将bin\freeglut.dll复制到C:\windows\system32中。对于64位的Windows,将bin\x64\freeglut.dll复制到C:\Windows\SysWOW64中。

然后,确保C:\windows\system32或C:\Windows\SysWOW64已经出现在系统的环境变量中。

在NetBeans中配置freeglut

在NetBeans中新建一个C/C++应用程序,在main.cpp中输入下面的代码:

/*
 * File:   main.cpp
 * Author: Sarkuya
 *
 * Created on 2015年4月13日, 下午23:13
 */

#include <GL/freeglut.h>

void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POLYGON);
        glVertex2f(-0.5, -0.5);
        glVertex2f(-0.5,  0.5);
        glVertex2f( 0.5,  0.5);
        glVertex2f( 0.5, -0.5);
    glEnd();
    glFlush();
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutCreateWindow("Freeglut Demo");
    glutDisplayFunc(display);
    glutMainLoop();
}

在Cygwin的两种OpenGL实现中,我们将使用win32api的方式。

点击NetBeans的菜单工具->选项,在弹出的窗口中选择C/C++,代码帮助->C++编译器的包含目录下,依据下图的最后四行进行设置:

在最后四行中,C:\cygwin64\usr\include\w32api及C:\cygwin64\include\w32api必须先出现在C:\cygwin64\usr\include之前,这样,可确保我们优先使用win32api的实现方式。倒数第2行直接将我们手工设置的freeglut的include目录添加进来,当我们在代码中包含”GL/freeglut.h”时,NetBeans自动在此目录下查找该文件。

将freeglut的包含目录设进NetBeans的环境而非特定项目属性的好处在于,以后在NetBeans中新建每个OpenGL应用,均可直接在代码中编写glut的语句了。

在NetBeans中对项目按右键,点属性,在弹出的窗口中依下图设置链接属性:

上图中,其他库目录选%FreeglutRoot%\lib\x64,告诉NetBeans,freeglut的库所在的目录。在编译行的其他选项中,需要设置四个选项。其中前面三个是与OpenGL相关的,表示链接时需使用freeglut, glu32, opengl32这三个库。第四个选项”-Wl,–subsystem,windows”Windows下独有的选项,表示此应用将以窗口方式而非命令行的方式来运行。

上面的配置,产生了下面的g++在链接时所用的命令行:

g++ -o dist/Debug/Cygwin_4.x-Windows/opengltest build/Debug/Cygwin_4.x-Windows/main.o -L../../../../Tools/Programming/FreeGlut/lib/x64 -lfreeglut -lglu32 -lopengl32 -Wl,--subsystem,windows

两相结合,更易于理解NetBeans的配置原理。

运行应用

运行此应用程序,将出现经典的OpenGL应用窗口:

结语

虽说这已经是OpenGL过时的未使用Shading Language的编程方式了,但本文的目的在于强调在特定环境中进行OpenGL应用开发。明白了这个原理,可帮助我们方便地进一步学习OpenGL编程。

时间: 2024-12-24 19:35:44

Freeglut Windows Programming on NetBeans的相关文章

windows下使用netbeans新建freecms并调试的步聚

1. 使用netbeans新建空的Java Web工程 2. 删除工程中的源码和web页面 3. 把freecms中的web和src分别拷到工程中对应的文件夹下 4. 把lib库导入工程 5. 在mysql中新建数据库freecms,编码用utf8_generic_ci 即可以在netbeans中编辑出相应的war包 6.在工具--服务器中配置tomcat服务器,然后在工程--属性--运行中配置服务器为tomcat 可能出错的地方 1. tomcat/bin下 catalina.bat 文件中

在macOS上不安装JDK的情况下安装Netbeans

标题有些绕,解释起来要从Java在桌面环境上的悲催现状开始. 现在几乎所有的网站都不用Java Applet,用Java编写的桌面应用几乎都是IDE.用Java编写的IDE们为了安装方便,几乎都内嵌了JRE.既然全都自带了JRE,Applet又没用,那还独立安装JRE干什么?那个安装的JRE还自动运行,动不动就要更新. 但是macOS上的Netbeans是个例外,Windows上的Netbeans已经不需要先安装JRE了. macOS已经事实上移除了Java,PhpStorm.Andriod S

Windows MDI(Multiple-Document Interface)

Windows多文档窗口编程中,需要注意的以下几点: 1.主窗口与文档窗口之间还有一个Client Window. 2.创建文档窗口.通常认为创建子窗口就用CreateWindow,但是MDI中创建文档窗口时,用的是发送消息的方式.具体的CreateWindow的工作由Client Window来完成.该消息是WM_MDICREATE. 3.主菜单的变化.切换到不同的文档窗口时,主菜单会随文档窗口的类型.内容等变化.文档子窗口是通过处理WM_MDIACTIVATE消息完成的. 4.主窗口默认的消

[百度空间] [转]将程序移植到64位Windows

from : http://goooder.bokee.com/2000373.html (雷立辉 整理) 简介:本文对如何将32位Windows程序平滑的支持和过渡到64位Windows操作系统做出了一个简单而系统的介绍.包括对于64位操作系统的版本,编程模型,一些移植原则甚至包括对驱动程序的移植原则的介绍. 作者介绍:系统分析员,现在在北京工作.作者的blog:http://goooder.blogchina.com. 前言: 或许大家还对32位的CPU及操作系统使用还是觉得非常的合乎日常需

Windows API参考大全新编

书名:新编Windows API参考大全 作者:本书编写组 页数:981页 开数:16开 字数:2392千字 出版日期:2000年4月第二次印刷 出版社:电子工业出版社 书号:ISBN 7-5053-5777-8 定价:98.00元 内容简介 作为Microsoft 32位平台的应用程序编程接口,Win32 API是从事Windows应用程序开发所必备的.本书首先对Win32 API函数做完整的概述:然后收录五大类函数:窗口管理.图形设备接口.系统服务.国际特性以及网络服务:在附录部分,讲解如何

国际流行开源机器学习和模式识别工具(转)

机器学习和数据挖掘最近几年有很大突破且实用推进很快.在众多数据中,声音和图像就占据绝大部分,以声音和图像为内容源的机器学习和数据挖掘会越来越多,所以声音分析,例如音乐分析等; 图像识别等会越来越重要. 国外很多相关的开源项目是我们好好学习第一手资料,我们在基本算法原理清楚的情况下,可以好好学习这些opensource Machine Learning  M2K - M2K represents the music-specific set of D2K modules designed to c

吐槽一下ubuntu麒麟

我承认,今天太清闲了,以至于我要尝试一下Ubuntu.其实原因很简单,原来我的Linux系统主要当服务器,但我现在想在Linux中写写代码了,虽然有VI这种传说中的神器,但写代码还是在IDE里面舒服啊(说白了就是不会配置,也懒得去折腾),所以我还是需要图形界面,所以,我就遇到了一个问题--关于IDE.我用的是NetBeans--这是一个非常优秀的IDE.在Windows下面,NetBeans基本上没有什么令人不满的地方.但是在Fedora中,NetBeans直接给我一种无力感--太丑了,丑到里面

How To Ask Questions The Smart Way

How To Ask Questions The Smart Way Eric Steven Raymond Thyrsus Enterprises <[email protected]> Rick Moen <[email protected]> Copyright ? 2001,2006,2014 Eric S. Raymond, Rick Moen Revision History Revision 3.10 21 May 2014 esr New section on St

[读书笔记]算法(Sedgewick著)·第一章(1)

到家放松之后就开始学习算法了,手里拿的是拿的是一本Robert Sedgewick的橙皮书<算法(第四版)>的.这本书与导论那本书的不同之处在于轻数学思想.重实现,也就是说这是一本很不错的基础编程书.拿来做书中的练习还是蛮不错的,封面说有50种算法哦.思维导图如下,就且学且更新吧. 1.基本编程模型 第一章开始讲述用程序实现算法的优点:程序是对算法精确.优雅和完全的描述:可以通过运行程序来学习算法的各种性质:可以在应用程序中直接使用这些算法.还有这种学习算法的缺点缺点:分离思想和实现细节的困难