面记录一下Windows下配置OpenGL与我的第一个OpenGL程序。


第一步:选择一个编译环境   


现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我选择的是VS 2010作为学习OpenGL的环境。   

第二步:安装GLUT工具包   

GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。

自己可以搜索“OpenGL SDK”下载,或者到官网上下载。

OpenGL官方网站(英文)
http://www.opengl.org   

Windows环境下安装GLUT的步骤:

1.将SDK中的.h文件拷贝到VC的\Include\GL目录中
2.将.lib文件拷贝到Visual C++ 6.0的\lib目录中
3.将.dll文件拷贝到操作系统的system32目录中


第三步,创建工程,其步骤如下:    


(1)创建一个Win32 Console Application。(以我创建的为例,工程名为simpleGL)    

(2)选择空工程即可。

第四步,创建一个最简单的opengl程序

[cpp] view plain copy
/*
* 第一个OpenGL程序.
*/
#define GLUT_DISABLE_ATEXIT_HACK
#include<gl/GLUT.H>
#include<gl/GLU.H>
#include<gl/GL.H>
#include <math.h>
/************************************************************************
* 画一个正弦函数曲线
* @author neng
* @date
************************************************************************/
const GLfloat factor = 0.1f;//让正弦函数比例放大
void myDisplay(void)
{
GLfloat x;
glClear(GL_COLOR_BUFFER_BIT);
//画x,y坐标
glEnable(GL_LINE_STIPPLE);//启动虚线
glLineStipple(2,0x0F0F);//设置虚线样式
glLineWidth(2.0f); //设置线宽
glBegin(GL_LINES);
glVertex2f(-1.0f,0.0f);
glVertex2f(1.0f,0.0f);
glVertex2f(0.0f,-1.0f);
glVertex2f(0.0f,1.0f);
glEnd();
//画正弦函数曲线
glDisable(GL_LINE_STIPPLE);//禁止虚线
glBegin(GL_LINE_STRIP);
for (x=-1.0f/factor;x<1.0f/factor;x+=0.01f)
{
glVertex2f(x*factor,sin(x)*factor);
}
glEnd();
glFlush();
}
int main(int argc,char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(400,400);
glutCreateWindow("我的第一个OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();//进行消息循环
return 0;
}


该程序的作用是在一个黑色的窗口中央画一个正弦函数曲线。

下面对各行语句进行说明。

 
#define GLUT_DISABLE_ATEXIT_HACK
这句必须定义,否则会报错报错“error LNK2001: 无法解析的外部符号 __imp____glutInitWithExit@12......”。
报错原因在GLUT.h文件中有说明。

首先,需要包含头文件#include<GL/glut.h>,这是GLUT的头文件。

本来OpenGL程序一般还要包含<GL/gl.h>和<GL/glu.h>,但GLUT的头文件中已经自动将这两个文件包含了,不必再次包含。

注意main函数中的各语句,除了最后的return之外,其余全部以glut开头。这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍。

1、glutInit,对GLUT进行初始化。其格式比较死板,照抄glutInit(&argc, argv)就可以。

2、glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。

3、glutInitWindowPosition,设置窗口在屏幕中的位置。

4、glutInitWindowSize,设置窗口的大小。

5、glutCreateWindow,创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上,需要调用glutMainLoop才能看到窗口。

6、glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。

7、glutMainLoop,进行一个消息循环。

以gl开头的函数都是OpenGL的标准函数。

1、glClear,清除。

2、glBegin与glEnd是一对,中间写的是要画的内容。

3、glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。其作用与JavaIO中类似。

转载请注明出处:  http://blog.csdn.net/xn4545945

【VS开发】【OpenGL开发】OpenGL---Windows下配置与第一个OpenGL程序的更多相关文章

  1. OpenGL学习-------visual studio 2010配置和第一个OpenGL程序讲解

    OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenG ...

  2. QT + OpenCV + MinGW 在windows下配置开发环境

           由于研究项目需要,最近开始接触C++界面设计,关于“QT + OpenCV + MinGW在windows下配置开发环境”着实让人头疼,单次配置时间相当长,也十分不容易,本人第一次配置成 ...

  3. 在Windows下配置Linux远程开发环境

    在Windows下配置Linux远程开发环境 欢迎光临我的个人博客 https://source.chens.life/Configure-Linux-remote-development-envir ...

  4. OpenGL学习之windows下安装opengl的glut库

    OpenGL学习之windows下安装opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装.  Windows环境下的GLUT下载地址:(大小约为15 ...

  5. Android ROM开发(一)——Windows下Cygwin和Android_Kitchen厨房的安装

    Android ROM开发(一)--Windows下Cygwin和Android_Kitchen厨房的安装 很久没有碰到ROM开发了,在很久很久以前也是从ROM起步的,无奈还是一脚踏上了Android ...

  6. 在windows下配置Eclipse + go环境

    http://blog.csdn.net/hengyunabc/article/details/7371446 本文章地址:http://blog.csdn.net/hengyunabc/articl ...

  7. windows下配置lamp环境(3)---配置PHP5.4

    下面配置php Php文件夹里有两个php.ini-*文件,随便修改一个,去掉后缀,变成php.ini (如图) 打开php.ini ,添加php扩展目录723行左右(其实放哪都无所谓,只不过php. ...

  8. windows下配置ssh访问github

    一.说明 一直使用HTTPS的方式访问github的代码,用的时间长了,发现这是效率很低的一种开发行为,因为每次git push的时候都要输入username和password.今天就介绍如何在win ...

  9. Windows 下配置 Vagrant 环境

    Vagrant是一个基于 Ruby 的工具,用于创建和部署虚拟化开发环境.它使用 Oracle 的开源VirtualBox虚拟化系统. Vagrant 在快速搭建开发环境方面是很赞的,试想一个团队中, ...

随机推荐

  1. mysql 函数表

    Name Description ABS() Return the absolute value ACOS() Return the arc cosine ADDDATE() Add time val ...

  2. EasyUI日期时间框DateTimeBox

    WEB DEMO 日期时间框 DateTimeBox <!DOCTYPE html> <html> <HTML> <head> <HEAD> ...

  3. Day11:Flex布局

    参考: 来源:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 网页布局是css的一个重点. 盒子模型 display属性 positi ...

  4. 贴一段Matlab代码

    % reduce leading zeros with rx ind3= find(rx~=0, 1, 'first'); if (isempty(ind3)) rx= gf(0, m, f0); e ...

  5. vue-d2admin-axios异步请求登录,先对比一下Jquery ajax, Axios, Fetch区别

    先说一下对比吧 Jquery ajax, Axios, Fetch区别之我见 引言 前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们还曾被JQuery 1 ...

  6. Beego没gin配置静态页面方便

    上代码 腾讯这个例子还是很值得学习的,不轻有东西,单也不重到看着都蒙圈的样子. https://github.com/Tencent/bk-cmdb/blob/master/src/web_serve ...

  7. Java枚举类接口实战

    枚举类可以实现一个或多个接口.与普通类实现接口完全一样,枚举类实现接口时,需要实现该接口所包含的方法. 如果需要每个枚举值在调用同一个方法时呈现不同的行为,则可以让每个枚举值在{...}匿名块中实现自 ...

  8. java代码拼写sql

    java后台    String zffwdm=map.get("zffwmc")==null?"":map.get("zffwmc"); ...

  9. js检测手机上是否有此APP,有的话打开应用,没有的话跳转到appstore

    //html代码中 的 a 标签,以微信为例,默认的是调用weixin scheme,去打开本机的微信,如果没有则跳转到相应连接 <a href="weixin://" cl ...

  10. 数据结构Java版之递归与迭代算法(五)

    递归的概念很简单,就是自己调用自己. 而迭代,则是通过修改初始化数据,得到中间结果,然后不断的对中间结果进行修改,而得到最终结果.简单来说迭代就是循环. 在此,我们用一个比较经典的Fibonacci数 ...