﻿<?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++博客-xiao_liang的小院-随笔分类-OpenGL</title><link>http://www.cppblog.com/zhzhliang/category/15398.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 13 Nov 2010 12:16:01 GMT</lastBuildDate><pubDate>Sat, 13 Nov 2010 12:16:01 GMT</pubDate><ttl>60</ttl><item><title>OpenGL杂记 - 矩阵操作</title><link>http://www.cppblog.com/zhzhliang/archive/2010/11/11/133010.html</link><dc:creator>xiao_liang</dc:creator><author>xiao_liang</author><pubDate>Thu, 11 Nov 2010 13:21:00 GMT</pubDate><guid>http://www.cppblog.com/zhzhliang/archive/2010/11/11/133010.html</guid><wfw:comment>http://www.cppblog.com/zhzhliang/comments/133010.html</wfw:comment><comments>http://www.cppblog.com/zhzhliang/archive/2010/11/11/133010.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/zhzhliang/comments/commentRss/133010.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhzhliang/services/trackbacks/133010.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenGL里的矩阵包括模视矩阵GL_MODELVIEW、投影矩阵GL_PROJECTION。对于这两个矩阵OpenGL定义了一些函数来操作。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1）模视矩阵 GL_MODELVIEW<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">glMatrixMode(GL_MODELVIEW);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>glLoadIdentity();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;进行变换</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;glTranslatef(GLfloat&nbsp;x,&nbsp;GLfloat&nbsp;y,&nbsp;GLfloat&nbsp;z);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;平移变换</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;glRotatef(GLfloat&nbsp;angle,&nbsp;GLfloat&nbsp;x,&nbsp;GLfloat&nbsp;y,&nbsp;GLfloat&nbsp;z);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;旋转变换</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;glScalef(GLfloat&nbsp;x,&nbsp;GLfloat&nbsp;y,&nbsp;GLfloat&nbsp;y);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;缩放变换</span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2）投影矩阵 GL_PROJECTION<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">glMatrixMode(GL_PROJECTION);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>glLoadIdentity();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;进行变换</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">glMatrixMode(GL_MODELVIEW);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;好像默认的应该是ModelView&nbsp;Matrix<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">一般<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;eye：相机坐标，center：center-eye为照的方向，up：相机向上的向量（这个搞得不太清楚)</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">gluLookAt(GLdouble&nbsp;eyex,GLdouble&nbsp;eyey,&nbsp;GLdouble&nbsp;eyez,&nbsp;GLdouble&nbsp;centerx,GLdouble&nbsp;centery,GLdouble&nbsp;centerz,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLdouble&nbsp;upx,GLdouble&nbsp;upy,&nbsp;GLdouble&nbsp;upz);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;平行投影视见体定义，默认是2*2*2立方体</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;glOrtho(GLdouble&nbsp;left,&nbsp;GLdouble&nbsp;right,&nbsp;GLdouble&nbsp;bottom,&nbsp;GLdouble&nbsp;top,&nbsp;GLdouble&nbsp;near,&nbsp;GLdouble&nbsp;far);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;同glOrtho,near&nbsp;=&nbsp;1.0,far&nbsp;=&nbsp;-1.0f</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;gluOrtho2D((GLdouble&nbsp;left,&nbsp;GLdouble&nbsp;right,&nbsp;GLdouble&nbsp;bottom,&nbsp;GLdouble&nbsp;top);&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;透视投影视见体定义，默认是平行投影，left,right,top,bottom为near裁剪面上的坐标<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;near,far分别为在照相机坐标系下近裁剪面和远裁剪面到相机的距离，所以近裁剪面z0&nbsp;=&nbsp;-near,远z1&nbsp;=&nbsp;-far</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;glFrustum(GLdouble&nbsp;left,&nbsp;GLdouble&nbsp;right,&nbsp;GLdouble&nbsp;bottom,&nbsp;GLdouble&nbsp;top,&nbsp;GLdouble&nbsp;near,&nbsp;GLdouble&nbsp;far);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;透视投影常用的一个方法<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;fovy为纵向视角,aspect为x/y</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;gluPerspective(GLdouble&nbsp;fovy,&nbsp;GLdouble&nbsp;aspect,&nbsp;GLdouble&nbsp;near,&nbsp;GLdouble&nbsp;far);</span></div>
&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3）一般矩阵操作 <br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">glMatrixMode(MatrixType);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>glLoadIdentity();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>glLoadMatrixf(m);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;4*4矩阵</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">glMultMatrixf(m);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;左乘一个矩阵<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;矩阵堆栈操作</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">glPushMatrix();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>glPopMatrix();</span></div>
<br><br><br><br><br><br>
<img src ="http://www.cppblog.com/zhzhliang/aggbug/133010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhzhliang/" target="_blank">xiao_liang</a> 2010-11-11 21:21 <a href="http://www.cppblog.com/zhzhliang/archive/2010/11/11/133010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL学习笔记1 - 建立环境</title><link>http://www.cppblog.com/zhzhliang/archive/2010/11/07/132879.html</link><dc:creator>xiao_liang</dc:creator><author>xiao_liang</author><pubDate>Sun, 07 Nov 2010 12:49:00 GMT</pubDate><guid>http://www.cppblog.com/zhzhliang/archive/2010/11/07/132879.html</guid><wfw:comment>http://www.cppblog.com/zhzhliang/comments/132879.html</wfw:comment><comments>http://www.cppblog.com/zhzhliang/archive/2010/11/07/132879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhzhliang/comments/commentRss/132879.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhzhliang/services/trackbacks/132879.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;机器配置不够高端，开个Visual Studio 2008/2010就卡的不行，Visual C++ 6.0里的C++又不够标准，所以我选择的环境是 MinGW + EditPlus +glut。<br><span style="COLOR: #0000ff">Step 1：安装并配置MinGW</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先从网上下载一个MinGW，可以是在线安装包也可以是本地安装包，我用的是从csdn下载的一个本地包<a href="http://search.download.csdn.net/search/mingw%205.1.6">http://search.download.csdn.net/search/mingw%205.1.6</a>，解压后可以看到<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/zhzhliang/Screen_out.JPG" border=0><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新建目录D:\MinGW，把除了gcc-ada*.gz、gcc-g77*.gz、gcc-java*.gz、gcc-objc*.gz四个包外的其他包解压到该目录，然后配置系统环境变量（我的电脑-属性-高级-环境变量）。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;添加以下系统环境变量<br><span style="COLOR: #000000; BACKGROUND-COLOR: #ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Path = D:\MinGW\bin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INCLUDE_PATH = D:\MinGW\include<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPPINCLUDE_PATH = D:\MinGW\include\c++\<st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">3.4.5</st1:chsdate><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LIBRARY_PATH = D:\MinGW\lib</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在可以试着在cmd里运行g++，应该可以得到"g++:no input files"<br><span style="COLOR: #0000ff">Step 2：安装并配置EditPlus</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下载并安装EditPlus，运行，工具-配置用户工具-添加四个工具<br><span style="COLOR: #000000; BACKGROUND-COLOR: #ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPP生成:命令:g++，参数:-o $(FileNameNoExt) $(FileName)，初始目录:$(FileDir)，捕获输出。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPP运行:命令:$(FileNameNoExt)，初始目录:$(FileDir)。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenGL生成:命令:g++，参数:-o $(FileNameNoExt) $(FileName) -D_STDCALL_SUPPORTED -D_M_IX86 glut32.lib -lopengl32 -lglu32，初始目录:$(FileDir)，捕获输出。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenGL运行:命令:$(FileNameNoExt)，初始目录:$(FileDir)，捕获输出。</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这时可以新建一个cpp文件来测试一下，普通的C++程序用CPP生成、运行处理，OpenGL的用OpenGL生成、运行处理。也可以把工具添加到工具栏上或者配置快捷键以方便使用。<br><span style="COLOR: #0000ff">Step 3：第一个OpenGL程序</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了方便，使用了glut库，当然也可以用SDK或者MFC写，这对OpenGL用法影响不大。<br>首先下载glut包，里面有gltu.h、glut32.lib、glut32.dll，把glut.h放到D:\MinGW\include\GL里，glut32.lib和glut32.dll放到工程文件夹里即可。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK，到此万事俱备。下面来看我们的第一个测试程序：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">GL\glut.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;glut里已经包含了gl.h和glu.h</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">************************************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;函数名：InitGL()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;功能：初始化OpenGL的一些状态<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">************************************************</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;InitGL()<br><img id=Codehighlighter1_242_431_Open_Image onclick="this.style.display='none'; Codehighlighter1_242_431_Open_Text.style.display='none'; Codehighlighter1_242_431_Closed_Image.style.display='inline'; Codehighlighter1_242_431_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_242_431_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_242_431_Closed_Text.style.display='none'; Codehighlighter1_242_431_Open_Image.style.display='inline'; Codehighlighter1_242_431_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_242_431_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_242_431_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glClearColor(</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;清屏颜色设为黑色<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;设置模视转换矩阵</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glMatrixMode(GL_PROJECTION);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;gluOrtho2D(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2.0f</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;(4*4*4)立方体</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glMatrixMode(GL_MODELVIEW);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">************************************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;函数名：OnDraw()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;功能：回调函数，绘制场景<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">************************************************</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;OnDraw()<br><img id=Codehighlighter1_581_791_Open_Image onclick="this.style.display='none'; Codehighlighter1_581_791_Open_Text.style.display='none'; Codehighlighter1_581_791_Closed_Image.style.display='inline'; Codehighlighter1_581_791_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_581_791_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_581_791_Closed_Text.style.display='none'; Codehighlighter1_581_791_Open_Image.style.display='inline'; Codehighlighter1_581_791_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_581_791_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_581_791_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glClear(GL_COLOR_BUFFER_BIT);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_QUADS);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glFlush();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">************************************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;函数名：main()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;功能：初始化窗口和一些回调函数<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">************************************************</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">&nbsp;argv)<br><img id=Codehighlighter1_961_1251_Open_Image onclick="this.style.display='none'; Codehighlighter1_961_1251_Open_Text.style.display='none'; Codehighlighter1_961_1251_Closed_Image.style.display='inline'; Codehighlighter1_961_1251_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_961_1251_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_961_1251_Closed_Text.style.display='none'; Codehighlighter1_961_1251_Open_Image.style.display='inline'; Codehighlighter1_961_1251_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_961_1251_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_961_1251_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutInit(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">argc,argv);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;创建窗口</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutInitDisplayMode(GLUT_SINGLE&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GLUT_RGB);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutInitWindowSize(</span><span style="COLOR: #000000">500</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">500</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutInitWindowPosition(</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutCreateWindow(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">OpenGL&nbsp;Test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;定义一些回调函数</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutDisplayFunc(OnDraw);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;绘图<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;调用初始化</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;InitGL();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;进入消息处理循环</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutMainLoop();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;运行效果如图所示：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img style="WIDTH: 328px; HEIGHT: 347px" height=347 src="http://www.cppblog.com/images/cppblog_com/zhzhliang/2.JPG" width=328 border=0> </p>
<img src ="http://www.cppblog.com/zhzhliang/aggbug/132879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhzhliang/" target="_blank">xiao_liang</a> 2010-11-07 20:49 <a href="http://www.cppblog.com/zhzhliang/archive/2010/11/07/132879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>