﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-ACFirst-随笔分类-图形学</title><link>http://www.cppblog.com/zzfmars/category/16574.html</link><description>智慧是力量的源泉，行动才是生产力</description><language>zh-cn</language><lastBuildDate>Wed, 13 Apr 2011 12:43:36 GMT</lastBuildDate><pubDate>Wed, 13 Apr 2011 12:43:36 GMT</pubDate><ttl>60</ttl><item><title>OpenGL入门学习（一）（转）</title><link>http://www.cppblog.com/zzfmars/archive/2011/04/13/144147.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Wed, 13 Apr 2011 12:40:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/04/13/144147.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/144147.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/04/13/144147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/144147.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/144147.html</trackback:ping><description><![CDATA[<table style="BORDER-COLLAPSE: collapse" border=0 cellSpacing=0 cellPadding=0 width="100%" align=center>
    <tbody>
        <tr>
            <td bgColor=#bbf0ff align=middle><font style="FONT-SIZE: 14pt" color=#000066><strong>OpenGL入门学习（一）（转）</strong></font> </td>
            <tr>
                <td>
                <table style="BORDER-COLLAPSE: collapse" border=1 cellSpacing=1 borderColor=#bbf0ff cellPadding=0 width="100%">
                    <tbody>
                        <tr>
                            <td align=middle>
                            <table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" border=0 cellSpacing=0 cellPadding=0 width=650>
                                <tbody>
                                    <tr>
                                        <td align=middle>
                                        <table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" border=0 cellSpacing=0 cellPadding=0 width="100%">
                                            <tbody>
                                                <tr>
                                                    <td width=650>
                                                    <div style="MARGIN: 15px" id=art>说起编程作图，大概还有很多人想起TC的#include&nbsp;&lt;graphics.h&gt;吧？<br>但是各位是否想过，那些画面绚丽的PC游戏是如何编写出来的？就靠TC那可怜的640*480分辨率、16色来做吗？显然是不行的。<br><br><font color=#0000ff>本帖的目的是让大家放弃TC的老旧图形接口，让大家接触一些新事物。</font><br><br>OpenGL作为当前主流的图形API之一，它在一些场合具有比DirectX更优越的特性。<br><font color=#ff0000>1、与C语言紧密结合</font>。<br>OpenGL命令最初就是用C语言函数来进行描述的，对于学习过C语言的人来讲，OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h，你会发现，<font color=#0000ff>使用OpenGL作图甚至比TC更加简单</font>。<br><font color=#ff0000>2、强大的可移植性</font>。<br>微软的Direct3D虽然也是十分优秀的图形API，但它只用于Windows系统（现在还要加上一个XBOX游戏机）。而OpenGL不仅用于 Windows，还可以用于Unix/Linux等其它系统，它甚至在大型计算机、各种专业计算机（如：医疗用显示设备）上都有应用。并且，OpenGL 的基本命令都做到了硬件无关，甚至是平台无关。<br><font color=#ff0000>3、高性能的图形渲染</font>。<br>OpenGL是一个工业标准，它的技术紧跟时代，现今各个显卡厂家无一不对OpenGL提供强力支持，激烈的竞争中使得OpenGL性能一直领先。<br>总之，OpenGL是一个很NB的图形软件接口。至于究竟有多NB，去看看DOOM3和QUAKE4等专业游戏就知道了。<br>OpenGL官方网站（英文）<br><font color=#0000ff>http://www.opengl.org</font><br><br>下面将对Windows下的OpenGL编程进行简单介绍。<br><br><br>学习OpenGL前的准备工作<br><font color=#ff0000>第一步，选择一个编译环境</font><br>现在Windows系统的主流编译环境有Visual&nbsp;Studio，Broland&nbsp;C++&nbsp;Builder，Dev-C++等，它们都是支持OpenGL的。但这里我们选择Visual&nbsp;Studio&nbsp;2005作为学习OpenGL的环境。<br><font color=#ff0000>第二步，安装GLUT工具包</font><br>GLUT不是OpenGL所必须的，但它会给我们的学习带来一定的方便，推荐安装。<br>Windows环境下的GLUT下载地址：（大小约为150k）<br><font color=#0000ff>http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip</font><br><font color=#0000ff>无法从以上地址下载的话请使用下面的连接:<br>http://upload.programfan.com/upfile/200607311626279.zip</font><br>Windows环境下安装GLUT的步骤：<br>1、将下载的压缩包解开，将得到5个文件<br>2、在&#8220;我的电脑&#8221;中搜索&#8220;gl.h&#8221;，并找到其所在文件夹（如果是VisualStudio2005，则应该是其安装目录下面的&#8220;VC\PlatformSDK\include\gl文件夹&#8221;）。把解压得到的glut.h放到这个文件夹。<br>3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹（如果是VisualStudio2005，则应该是其安装目录下面的&#8220;VC\lib&#8221;文件夹）。<br>4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。（典型的位置为：C:\Windows\System32）<br><font color=#ff0000>第三步，建立一个OpenGL工程</font><br>这里以VisualStudio2005为例。<br>选择File-&gt;New-&gt;Project，然后选择Win32&nbsp;Console&nbsp;Application，选择一个名字，然后按OK。<br>在谈出的对话框左边点Application&nbsp;Settings，找到Empty&nbsp;project并勾上，选择Finish。<br>然后向该工程添加一个代码文件，取名为&#8220;OpenGL.c&#8221;，注意用.c来作为文件结尾。<br>搞定了，就跟平时的工程没什么两样的。<br><br><font color=#ff0000><br><br><br>第一个OpenGL程序</font><br><br>一个简单的OpenGL程序如下：<font color=#0000ff>（注意，如果需要编译并运行，需要正确安装GLUT，安装方法如上所述）</font><br><br>#include&nbsp;&lt;GL/glut.h&gt;<br><br>void&nbsp;myDisplay(void)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;glClear(GL_COLOR_BUFFER_BIT);<br>&nbsp;&nbsp;&nbsp;&nbsp;glRectf(-0.5f,&nbsp;-0.5f,&nbsp;0.5f,&nbsp;0.5f);<br>&nbsp;&nbsp;&nbsp;&nbsp;glFlush();<br>}<br><br>int&nbsp;main(int&nbsp;argc,&nbsp;char&nbsp;*argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;glutInit(&amp;argc,&nbsp;argv);<br>&nbsp;&nbsp;&nbsp;&nbsp;glutInitDisplayMode(GLUT_RGB&nbsp;|&nbsp;GLUT_SINGLE);<br>&nbsp;&nbsp;&nbsp;&nbsp;glutInitWindowPosition(100,&nbsp;100);<br>&nbsp;&nbsp;&nbsp;&nbsp;glutInitWindowSize(400,&nbsp;400);<br>&nbsp;&nbsp;&nbsp;&nbsp;glutCreateWindow("第一个OpenGL程序");<br>&nbsp;&nbsp;&nbsp;&nbsp;glutDisplayFunc(&amp;myDisplay);<br>&nbsp;&nbsp;&nbsp;&nbsp;glutMainLoop();<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br>}<br><br>该程序的作用是在一个黑色的窗口中央画一个白色的矩形。下面对各行语句进行说明。<br><br><br>首先，需要包含头文件#include&nbsp;&lt;GL/glut.h&gt;，这是GLUT的头文件。<br>本来OpenGL程序一般还要包含&lt;GL/gl.h&gt;和&lt;GL/glu.h&gt;，但GLUT的头文件中已经自动将这两个文件包含了，不必再次包含。<br><br>然后看main函数。<br>int&nbsp;main(int&nbsp;argc,&nbsp;char&nbsp;*argv[])，这个是带命令行参数的main函数，各位应该见过吧？没见过的同志们请多翻翻书，等弄明白了再往下看。<br>注意main函数中的各语句，除了最后的return之外，其余全部以glut开头。<font color=#0000ff>这种以glut开头的函数都是GLUT工具包所提供的函数</font>，下面对用到的几个函数进行介绍。<br>1、glutInit，对GLUT进行初始化，这个函数必须在其它的GLUT使用之前调用一次。其格式比较死板，一般照抄这句glutInit(&amp;argc,&nbsp;argv)就可以了。<br>2、 glutInitDisplayMode，设置显示方式，其中GLUT_RGB表示使用RGB颜色，与之对应的还有GLUT_INDEX（表示使用索引颜色）。GLUT_SINGLE表示使用单缓冲，与之对应的还有GLUT_DOUBLE（使用双缓冲）。更多信息，请自己Google。当然以后的教程也会有一些讲解。<br>3、glutInitWindowPosition，这个简单，设置窗口在屏幕中的位置。<br>4、glutInitWindowSize，这个也简单，设置窗口的大小。<br>5、glutCreateWindow，根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意：窗口被创建后，并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。<br>6、glutDisplayFunc，设置一个函数，当需要进行画图时，这个函数就会被调用。（这个说法不够准确，但准确的说法可能初学者不太好理解，暂时这样说吧）。<br>7、glutMainLoop，进行一个消息循环。（这个可能初学者也不太明白，现在只需要知道这个函数可以显示窗口，并且等待窗口关闭后才会返回，这就足够了。）<br><br>在glutDisplayFunc函数中，我们设置了&#8220;当需要画图时，请调用myDisplay函数&#8221;。于是myDisplay函数就用来画图。观察myDisplay中的三个函数调用，发现它们都以gl开头。<font color=#0000ff>这种以gl开头的函数都是OpenGL的标准函数</font>，下面对用到的函数进行介绍。<br>1、glClear，清除。GL_COLOR_BUFFER_BIT表示清除颜色，glClear函数还可以清除其它的东西，但这里不作介绍。<br>2、glRectf，画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。<br>3、glFlush，保证前面的OpenGL命令立即执行（而不是让它们在缓冲区中等待）。其作用跟fflush(stdout)类似。<br><br><br></div>
                                                    </td>
                                                </tr>
                                            </tbody>
                                        </table>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>
                            </td>
                        </tr>
                    </tbody>
                </table>
                </td>
            </tr>
        </tbody>
    </table>
<img src ="http://www.cppblog.com/zzfmars/aggbug/144147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-04-13 20:40 <a href="http://www.cppblog.com/zzfmars/archive/2011/04/13/144147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>