﻿<?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++博客-风一样消逝的青春-随笔分类-OpenGL/OSG</title><link>http://www.cppblog.com/acmiyou/category/10707.html</link><description>Acmiyou/Sulingr</description><language>zh-cn</language><lastBuildDate>Fri, 28 Aug 2009 09:39:21 GMT</lastBuildDate><pubDate>Fri, 28 Aug 2009 09:39:21 GMT</pubDate><ttl>60</ttl><item><title>OSG 学习&lt;4&gt;  MatrixTransform 与 PosiotionAttitudeTransform</title><link>http://www.cppblog.com/acmiyou/archive/2009/08/24/94292.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Mon, 24 Aug 2009 09:29:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/08/24/94292.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/94292.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/08/24/94292.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/94292.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/94292.html</trackback:ping><description><![CDATA[<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一颗场景树,远不止只有叶子节点Geode 因此.在osg中有着一些各种各样的组节点.osg::Group.还有许多从osg::Group 继承的其他各种各样的组节点.类太多了.<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00291.html">附类继承图地址</a><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我目前只是尝试使用了MatrixTransform PositionAttitudeTransform Group Projection Switch 等各种功能的组节点.&nbsp; 在介绍MatrixTransform 和 PositionAttitudeTransform 节点前.我想先介绍下osg当中矩阵的一些相关知识.&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其实,无需关心osg矩阵是如何实现的.但是要记住的是osg中采用的左乘操作,我们平时里讨论的操作如旋转平移等.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenGL的:&nbsp;&nbsp;&nbsp; newpos = R* T * oldpos&nbsp;&nbsp;&nbsp; //先执行平移 后执行 旋转 (全局坐标系)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osg当中:&nbsp; newpos&nbsp; =oldpos * T *R&nbsp;&nbsp;&nbsp; //先执行平移 后执行旋转&nbsp;&nbsp;&nbsp; (全局坐标系)<br>因为在osg当中矩阵执行的操作则是行矩阵操作.因此为了跟OpenGL的列矩阵做同步 而不在定义的时候就相当于做了一个转置操作.即<br>&nbsp;<img height=128 alt="" src="http://www.cppblog.com/images/cppblog_com/acmiyou/osg/matrix.jpg" width=256 align=middle border=0><br><br>因此在osg/State 中 在使用applyModelViewMatrix()&nbsp;&nbsp; osg/State 是OpenGL状态机的封装.是与OpenGL交互的类<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 id=Code_Closed_Image_160703 onclick="this.style.display='none'; Code_Closed_Text_160703.style.display='none'; Code_Open_Image_160703.style.display='inline'; Code_Open_Text_160703.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_160703 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_160703.style.display='none'; Code_Closed_Image_160703.style.display='inline'; Code_Closed_Text_160703.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_160703 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Matrix</span><span id=Code_Open_Text_160703 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;applyModelViewMatrix(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;osg::RefMatrix</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;matrix)<br><img id=Codehighlighter1_79_442_Open_Image onclick="this.style.display='none'; Codehighlighter1_79_442_Open_Text.style.display='none'; Codehighlighter1_79_442_Closed_Image.style.display='inline'; Codehighlighter1_79_442_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_79_442_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_79_442_Closed_Text.style.display='none'; Codehighlighter1_79_442_Open_Image.style.display='inline'; Codehighlighter1_79_442_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_79_442_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_79_442_Open_Text><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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(_modelView</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">matrix)<br><img id=Codehighlighter1_129_432_Open_Image onclick="this.style.display='none'; Codehighlighter1_129_432_Open_Text.style.display='none'; Codehighlighter1_129_432_Closed_Image.style.display='inline'; Codehighlighter1_129_432_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_129_432_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_129_432_Closed_Text.style.display='none'; Codehighlighter1_129_432_Open_Image.style.display='inline'; Codehighlighter1_129_432_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_129_432_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_129_432_Open_Text><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(matrix)<br><img id=Codehighlighter1_175_281_Open_Image onclick="this.style.display='none'; Codehighlighter1_175_281_Open_Text.style.display='none'; Codehighlighter1_175_281_Closed_Image.style.display='inline'; Codehighlighter1_175_281_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_175_281_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_175_281_Closed_Text.style.display='none'; Codehighlighter1_175_281_Open_Image.style.display='inline'; Codehighlighter1_175_281_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_175_281_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_175_281_Open_Text><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_modelView</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">matrix;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLoadMatrix(matrix</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">ptr());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_320_418_Open_Image onclick="this.style.display='none'; Codehighlighter1_320_418_Open_Text.style.display='none'; Codehighlighter1_320_418_Closed_Image.style.display='inline'; Codehighlighter1_320_418_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_320_418_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_320_418_Closed_Text.style.display='none'; Codehighlighter1_320_418_Open_Image.style.display='inline'; Codehighlighter1_320_418_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_320_418_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_320_418_Open_Text><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_modelView</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">_identity;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<br>它是直接使用glLoadMatrix(matrix)进行载入矩阵的.因此它的转置刚好适应了OpenGL列优先的模式.<br><br>你只需牢记 在OSG当中变换的步骤则是左乘操作(全局坐标系)..即左边的是先执行变换的.<br><br>谈完如上的那些之后.我们现在来看MatrixTransform 和PositionAttitudeTransform.<br><br>参考坐标系有三种<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RELATIVE_RF,&nbsp;&nbsp;&nbsp; //全局 相对&nbsp;()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ABSOLUTE_RF,&nbsp; //局部&nbsp; 绝对 ()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ABSOLUTE_RF_INHERIT_VIEWPOINT&nbsp;&nbsp; //基于视点一个局部坐标系.很少用到.<br><br>MatrixTransform 故名 矩阵变换节点.在位于它的节点之下的节点都将按照这它的矩阵变换来进行模型变换操作.因此 MatrixTransform的主要功能之一就是提供模型变换操作..你只要根据你所需要的设置其模型矩阵就行.<br>即执行 setMatrix() 因此.查看计算当前World矩阵的方法就可以很清晰的明白其最后结果就是:<br><br>如果是相对的.那么 先执行自身的变换,在执行父节点的变换操作.这类似OpenGL中后写的变换是先执行的一样(全局坐标系考虑)<br>否则是绝对的,那么当前矩阵就是自身矩阵<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 id=Code_Closed_Image_162408 onclick="this.style.display='none'; Code_Closed_Text_162408.style.display='none'; Code_Open_Image_162408.style.display='inline'; Code_Open_Text_162408.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_162408 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_162408.style.display='none'; Code_Closed_Image_162408.style.display='inline'; Code_Closed_Text_162408.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_162408 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">MatrixTransform</span><span id=Code_Open_Text_162408 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;MatrixTransform::computeLocalToWorldMatrix(Matrix</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;matrix,NodeVisitor</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_83_244_Open_Image onclick="this.style.display='none'; Codehighlighter1_83_244_Open_Text.style.display='none'; Codehighlighter1_83_244_Closed_Image.style.display='inline'; Codehighlighter1_83_244_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_83_244_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_83_244_Closed_Text.style.display='none'; Codehighlighter1_83_244_Open_Image.style.display='inline'; Codehighlighter1_83_244_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_83_244_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_83_244_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(_referenceFrame</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">RELATIVE_RF)<br><img id=Codehighlighter1_127_166_Open_Image onclick="this.style.display='none'; Codehighlighter1_127_166_Open_Text.style.display='none'; Codehighlighter1_127_166_Closed_Image.style.display='inline'; Codehighlighter1_127_166_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_127_166_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_127_166_Closed_Text.style.display='none'; Codehighlighter1_127_166_Open_Image.style.display='inline'; Codehighlighter1_127_166_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_127_166_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_127_166_Open_Text><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;matrix.preMult(_matrix);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;absolute</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_193_225_Open_Image onclick="this.style.display='none'; Codehighlighter1_193_225_Open_Text.style.display='none'; Codehighlighter1_193_225_Closed_Image.style.display='inline'; Codehighlighter1_193_225_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_193_225_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_193_225_Closed_Text.style.display='none'; Codehighlighter1_193_225_Open_Image.style.display='inline'; Codehighlighter1_193_225_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_193_225_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_193_225_Open_Text><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;matrix&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_matrix;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><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;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></span></div>
<br>PositionAttibuteTransform 就是位置姿态节点..即我们只可以调整该节点的所有孩子的位置以及姿态.,我们也先来看一下它的矩阵变换:<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 id=Code_Closed_Image_170840 onclick="this.style.display='none'; Code_Closed_Text_170840.style.display='none'; Code_Open_Image_170840.style.display='inline'; Code_Open_Text_170840.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_170840 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_170840.style.display='none'; Code_Closed_Image_170840.style.display='inline'; Code_Closed_Text_170840.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_170840 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Positon</span><span id=Code_Open_Text_170840 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;PositionAttitudeTransform::computeLocalToWorldMatrix(Matrix</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;matrix,NodeVisitor</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_93_531_Open_Image onclick="this.style.display='none'; Codehighlighter1_93_531_Open_Text.style.display='none'; Codehighlighter1_93_531_Closed_Image.style.display='inline'; Codehighlighter1_93_531_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_93_531_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_93_531_Closed_Text.style.display='none'; Codehighlighter1_93_531_Open_Image.style.display='inline'; Codehighlighter1_93_531_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_93_531_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_93_531_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(_referenceFrame</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">RELATIVE_RF)<br><img id=Codehighlighter1_137_312_Open_Image onclick="this.style.display='none'; Codehighlighter1_137_312_Open_Text.style.display='none'; Codehighlighter1_137_312_Closed_Image.style.display='inline'; Codehighlighter1_137_312_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_137_312_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_137_312_Closed_Text.style.display='none'; Codehighlighter1_137_312_Open_Image.style.display='inline'; Codehighlighter1_137_312_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_137_312_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_137_312_Open_Text><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;matrix.preMultTranslate(_position);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix.preMultRotate(_attitude);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix.preMultScale(_scale);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix.preMultTranslate(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">_pivotPoint);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;absolute</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_339_512_Open_Image onclick="this.style.display='none'; Codehighlighter1_339_512_Open_Text.style.display='none'; Codehighlighter1_339_512_Closed_Image.style.display='inline'; Codehighlighter1_339_512_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_339_512_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_339_512_Closed_Text.style.display='none'; Codehighlighter1_339_512_Open_Image.style.display='inline'; Codehighlighter1_339_512_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_339_512_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_339_512_Open_Text><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;matrix.makeRotate(_attitude);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix.postMultTranslate(_position);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix.preMultScale(_scale);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix.preMultTranslate(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">_pivotPoint);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><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;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></span></div>
<br>PositionAttibuteTransform 的矩阵变换顺序的固定的.可以说是MatrixTransform的一个特例.,操作顺序我就不在详谈了.因为它的功能就是为了实现姿态和位置.还有缩放等.<br>因此 setPivotPoint 将使得之后的变换将会基于此平移操作执行.&nbsp;&nbsp;<br><br>那么实现一个例子来观察他们的效果: 下面的例子则是<br>&lt;1&gt; 使用PositionAttitudeTransform 设置左边的牛. 位置位于(-10,0,0) 姿态为绕z轴旋转90度.<br>&lt;2&gt; 使用MatrixTransform 设置右边的牛,&nbsp; 先执行平移操作(10,0,0) 在绕z轴旋转60度 因此使得这只牛偏屏幕内部一点.(你画个坐标轴 按全局思路演示 则就知道牛在上面位置了.!)<br><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 id=Code_Closed_Image_172614 onclick="this.style.display='none'; Code_Closed_Text_172614.style.display='none'; Code_Open_Image_172614.style.display='inline'; Code_Open_Text_172614.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_172614 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_172614.style.display='none'; Code_Closed_Image_172614.style.display='inline'; Code_Closed_Text_172614.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_172614 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">例子</span><span id=Code_Open_Text_172614 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">osg::Node</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;createTrans()<br><img id=Codehighlighter1_25_1118_Open_Image onclick="this.style.display='none'; Codehighlighter1_25_1118_Open_Text.style.display='none'; Codehighlighter1_25_1118_Closed_Image.style.display='inline'; Codehighlighter1_25_1118_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_25_1118_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_25_1118_Closed_Text.style.display='none'; Codehighlighter1_25_1118_Open_Image.style.display='inline'; Codehighlighter1_25_1118_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_25_1118_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_25_1118_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_28_52_Open_Image onclick="this.style.display='none'; Codehighlighter1_28_52_Open_Text.style.display='none'; Codehighlighter1_28_52_Closed_Image.style.display='inline'; Codehighlighter1_28_52_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_28_52_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_28_52_Closed_Text.style.display='none'; Codehighlighter1_28_52_Open_Image.style.display='inline'; Codehighlighter1_28_52_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_28_52_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">/**/</span><span id=Codehighlighter1_28_52_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;declare&nbsp;a&nbsp;root&nbsp;node</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::Group</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;root&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;osg::Group;<br><img id=Codehighlighter1_91_119_Open_Image onclick="this.style.display='none'; Codehighlighter1_91_119_Open_Text.style.display='none'; Codehighlighter1_91_119_Closed_Image.style.display='inline'; Codehighlighter1_91_119_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_91_119_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_91_119_Closed_Text.style.display='none'; Codehighlighter1_91_119_Open_Image.style.display='inline'; Codehighlighter1_91_119_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_91_119_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">/**/</span><span id=Codehighlighter1_91_119_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;declare&nbsp;a&nbsp;Position&nbsp;Node</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::PositionAttitudeTransform</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;posCow&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;osg::PositionAttitudeTransform;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;root</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">addChild(posCow);<br><img id=Codehighlighter1_225_251_Open_Image onclick="this.style.display='none'; Codehighlighter1_225_251_Open_Text.style.display='none'; Codehighlighter1_225_251_Closed_Image.style.display='inline'; Codehighlighter1_225_251_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_225_251_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_225_251_Closed_Text.style.display='none'; Codehighlighter1_225_251_Open_Image.style.display='inline'; Codehighlighter1_225_251_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_225_251_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">/**/</span><span id=Codehighlighter1_225_251_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;declare&nbsp;a&nbsp;Matrix&nbsp;Node</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::MatrixTransform</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;matrixCow&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;osg::MatrixTransform;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;root</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">addChild(matrixCow);<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;osg::Node</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;cow&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;osgDB::readNodeFile(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">cow.osg</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 id=Codehighlighter1_396_611_Open_Image onclick="this.style.display='none'; Codehighlighter1_396_611_Open_Text.style.display='none'; Codehighlighter1_396_611_Closed_Image.style.display='inline'; Codehighlighter1_396_611_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_396_611_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_396_611_Closed_Text.style.display='none'; Codehighlighter1_396_611_Open_Image.style.display='inline'; Codehighlighter1_396_611_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_396_611_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">/**/</span><span id=Codehighlighter1_396_611_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When&nbsp;use&nbsp;Position&nbsp;Node&nbsp;and&nbsp;the&nbsp;ReferenceFrame&nbsp;is&nbsp;RELATIVE_RF<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;matrix&nbsp;is&nbsp;Compute&nbsp;&nbsp;Trans(-pivot)&nbsp;*&nbsp;scale&nbsp;*&nbsp;Rotate&nbsp;*&nbsp;Trans(Pos)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;here&nbsp;the&nbsp;pivot&nbsp;and&nbsp;scale&nbsp;is&nbsp;default,so&nbsp;it&nbsp;means&nbsp;that&nbsp;make&nbsp;rotate&nbsp;firstly.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;posCow</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">addChild(cow);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::Quat&nbsp;quat;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;quat.makeRotate(osg::PI_2,osg::Vec3(</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">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;posCow</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">setAttitude(quat);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;posCow</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">setPosition(osg::Vec3(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">10</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">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_782_904_Open_Image onclick="this.style.display='none'; Codehighlighter1_782_904_Open_Text.style.display='none'; Codehighlighter1_782_904_Closed_Image.style.display='inline'; Codehighlighter1_782_904_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_782_904_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_782_904_Closed_Text.style.display='none'; Codehighlighter1_782_904_Open_Image.style.display='inline'; Codehighlighter1_782_904_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_782_904_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">/**/</span><span id=Codehighlighter1_782_904_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;use&nbsp;Matrix&nbsp;Node&nbsp;&nbsp;you&nbsp;can&nbsp;set&nbsp;the&nbsp;matrix&nbsp;what&nbsp;you&nbsp;want.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;here&nbsp;,&nbsp;it&nbsp;&nbsp;make&nbsp;trans&nbsp;firstly&nbsp;and&nbsp;then&nbsp;make&nbsp;rotate.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;matrixCow</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">addChild(cow);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;quat.makeRotate(osg::DegreesToRadians(</span><span style="COLOR: #000000">60.0</span><span style="COLOR: #000000">),osg::Vec3(</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">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;matrixCow</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">setMatrix(osg::Matrixd::translate(osg::Vec3(</span><span style="COLOR: #000000">10.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">*</span><span style="COLOR: #000000">osg::Matrixd::rotate(quat));<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: #0000ff">return</span><span style="COLOR: #000000">&nbsp;root;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></span></div>
<br>例子下载地址&nbsp; :&nbsp; <a href="http://www.rayfile.com/files/ce1950cf-9090-11de-8553-0014221b798a/">源代码下载</a><br>
<img src ="http://www.cppblog.com/acmiyou/aggbug/94292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-08-24 17:29 <a href="http://www.cppblog.com/acmiyou/archive/2009/08/24/94292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL 渲染管线理论</title><link>http://www.cppblog.com/acmiyou/archive/2009/08/23/94191.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Sun, 23 Aug 2009 12:23:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/08/23/94191.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/94191.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/08/23/94191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/94191.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/94191.html</trackback:ping><description><![CDATA[<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这几天稍微看了一些关于GLSL的顶点着色以及片元着色的一些相关知识.目前来讲还有一个着色器则是Geometry_shader..我的显卡用不了这个功能..当然有点遗憾&gt;_&lt;..<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在看了一些之后,大概了解了一些关于OpenGL渲染管线的知识.看了这个之后对于OpenGL的学习我想应当是很有帮助.关于这么一篇的原文则是GLSL-LIGHTSOURCE 教程一个开篇部分.<a href="http://www.lighthouse3d.com/opengl/glsl/index.php?pipeline">原文地址:</a><br>是英文的..我在osgchina教程论坛上也见到过FreeSouth大牛的中文翻译..<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关于渲染管线将什么呢?无非就是在OpenGL的管道当中各个部分的功能以及如何在管道当中形成了我们想要的最终的一幅图.(像素).而管线当中的操作可分为以下几个部分:<br><br>&nbsp;<span style="COLOR: red">阶段1. 指定几何对象.<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如:点&nbsp;线 三角形.等一些几何图元..OpenGL绘制几何图元的方法有以下三种:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;1&gt;&nbsp;一次一个顶点.即使用glBegin()&nbsp; glVertex() glEnd() 指定几何对象.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;2&gt;&nbsp;使用顶点数组..如glDrawArrays.glDrawElements.等.一次性的绘制大量图元.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面这两种模式则是立即模式.即指定完图元之后会被立即渲染.即将所有数据发往渲染管线后立即被渲染.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;3&gt;显示列表模式.它存储于OpenGL服务端 (接收OpenGL命令的一端.) glNewList glEndList glCallList .<br><span style="COLOR: red">&nbsp;&nbsp;&nbsp;&nbsp;<br>阶段2&nbsp;&nbsp; 顶点处理操作:</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不管以上的几何对象是如何指定的,所有的几何数据都将会经过这个阶段,这个阶段负责的则是逐个顶点的操作.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这个阶段能做的工作则是:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 顶点变换...根据模型视图和投影矩阵变换<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. 光照计算 法线变换(法线矩阵 是模型矩阵的左上角3*3的逆矩阵)和法线规格化 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. 纹理坐标变换.(纹理矩阵)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.材质状态 纹理坐标生成?<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而最重要的则是变换以及光照. 每个顶点在这个阶段分别是单独处理的.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个阶段所接收到的数据则是每个顶点的属性特征..输出则是变换后的顶点数据.<br><br><span style="COLOR: red">阶段3&nbsp; 图元组装</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在顶点处理之后,顶点的全部属性都已经被确定 在这个阶段顶点将会根据应用程序送往的图元规则.<br>GL_POINTS GL_TRIANGLES 等 将会被组装成图元<br><br><span style="COLOR: red">阶段4 图元处理(裁剪 消隐)</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;1&gt;这个步骤第一个所做的应当是裁剪操作..会将图元与用户定义的裁剪平面 即glClipPlane 和模型投影矩阵所建立的视景比较. 这将会裁剪且丢弃位于视景和裁剪平面外部的图元.不在予以处理.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;2&gt;&nbsp;其次.若是采用透视投影 那么.将会对每个顶点的x,y z坐标分别除以w. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;3&gt;紧接着 则是由视口变换将顶点坐标变换至窗口坐标.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;4&gt; 执行消隐操作 <br><br><span style="COLOR: red">阶段5&nbsp; 栅格化操作</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;1&gt;由图元处理传递过来的图元数据.在此将会被分解成更小的单元并对应帧缓冲区的各个像素.这些单元被称之为 片元. 一个片元可能包含窗口左边 深度 颜色 纹理坐标等属性.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;2&gt;&nbsp;片元的属性则是图元上顶点数据等<span style="COLOR: red">经过插值</span>而确定的..这里生成的片元将会包含主颜色和次颜色.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glShadeMode() 函数的作用将会这里体现.即使用插值(平滑着色) 或者使用最后一个顶点颜色(平面着色)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;3&gt;&nbsp;点宽 线宽.多边形模式,正面背面等一些特征也将是这阶段发生作用.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;4&gt;&nbsp;反走样也是这个阶段起作用.<br><br><span style="COLOR: red">&nbsp;阶段6 片元处理</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;1&gt;上纹理 通过纹理坐标取得纹理内存中相对应的颜色<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;2&gt; 雾化 通过片元距离当前视点位置修改颜色.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;3&gt; 颜色汇总..(这个与混合完全不同概念.将(纹理,主定义的颜色,雾化的颜色,次颜色光照阶段计算的颜色)汇总一起.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>阶段7 &nbsp;逐个片元的操作<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;1&gt; 所有的一些测试 像素所有权 剪切(glScissor) Alpha测试(glAlphaFunc)&nbsp;模版测试(glStencilFunc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 深度测试 (glDephtFunc) 混合(glBlendFunc)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这些操作将会最后影响其在帧缓冲区的颜色值.<br><br><span style="COLOR: red">阶段8&nbsp; 帧缓冲操作</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;1&gt;这个阶段执行帧缓冲的写入等操作等..最后产生了显示出来的像素.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; glColorMask glStrncilMask glDepthMask glClearDepht glClearStencil glClearColor 等.将在这个阶段影响写入的值.<br><br><br>以上只是讨论OpenGL 图元绘制的基本过程 那么基于像素图像绘制.几乎形同之上..只是在光栅化处理前的操作不一样.即经过像素解码 像素传输.栅格化 最后形成片元...片元之后的处理完全一样..<br><br>因此 在着色器编程领域..你将可实现<br><span style="COLOR: red">&nbsp;&nbsp;&nbsp; Vertex Shader 替换 顶点处理阶段<br>&nbsp;&nbsp;&nbsp;&nbsp;Fragment Shader 替换 片元处理阶段<br>&nbsp;&nbsp;&nbsp; Geometry Shader 替换 图元组装阶段..</span><br><br>因为这三个阶段所决定都是最重要效果的阶段..对于这些的可编程将带来非常大的好处以及可控制的渲染!!<br>
<img src ="http://www.cppblog.com/acmiyou/aggbug/94191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-08-23 20:23 <a href="http://www.cppblog.com/acmiyou/archive/2009/08/23/94191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSG学习&lt;3&gt;  Drawable  与 几何体创建</title><link>http://www.cppblog.com/acmiyou/archive/2009/08/23/94182.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Sun, 23 Aug 2009 10:34:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/08/23/94182.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/94182.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/08/23/94182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/94182.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/94182.html</trackback:ping><description><![CDATA[<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在知道如何使用Viewer视景器来进行仿真循环之后.总不会一直尝试着显示一头有着球面映射的牛进行观赏着.总会想着如何搭建自己的模型.如何实现自己所要绘制的一切.如你一样.我也拥有着这种冲动.如同我一开始学OpenGL的时候.我绘制出第一个三角形便觉得十分的兴奋.但当我尝试用它们建立各种奇怪的图形的时候.就像是搭积木一样.觉得怪异却....<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Drawable 故名 可绘制的.. 那么什么才是可绘制的.我们可以想象.常使用的点.线.三角形.四边形.等.这些就是可绘制的.OpenGL大可只能实现绘制最终也只是这些..<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;经常使用的场景图是一般都是一颗树. 那么在OSG也不例外.它是一颗节点树.其最末梢的节点是Geode.即叶子节点. 一个Geode可以包含多个Drawable.因此在OSG中我们想要绘制诸如三角形等.最终需要使用的肯定也是Geode叶子节点.然后将Drawable加入Geode下...<br><br>&nbsp;&nbsp;&nbsp;&nbsp; osg/Drawable 只是一个抽象类.那么实现它的类有多少呢? 还是比较多的.<br><img height=495 alt="" src="http://www.cppblog.com/images/cppblog_com/acmiyou/osg/drawable.jpg" width=517 border=0><br><br>而这中间最常用的莫属Geometry.几何体绘制..而说到几何体.需要的无非是点..颜色.以及如何组成图元&lt;Primitive&gt;..<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因此一个Geometry需要拥有的数据大可有点.法线坐标 纹理坐标.索引值...以及PrimitiveSet.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;点,法线,颜色等 需要用到矢量 即 osg::Vec2 osg::Vec3 osg::Vec4<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrimitiveSet.则包含了组成如何组成一个图元的规则..如GL_POINT GL_TRIANGLES.等.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用实例说明吧.如使用下面这段代码将会创建一个多彩的三角形.和一个白色的立方体.<br>&nbsp;&nbsp;&nbsp;&nbsp;
<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 id=Code_Closed_Image_182415 onclick="this.style.display='none'; Code_Closed_Text_182415.style.display='none'; Code_Open_Image_182415.style.display='inline'; Code_Open_Text_182415.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_182415 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_182415.style.display='none'; Code_Closed_Image_182415.style.display='inline'; Code_Closed_Text_182415.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_182415 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Geode</span><span id=Code_Open_Text_182415 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">osg::Node</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;create()<br><img id=Codehighlighter1_20_1396_Open_Image onclick="this.style.display='none'; Codehighlighter1_20_1396_Open_Text.style.display='none'; Codehighlighter1_20_1396_Closed_Image.style.display='inline'; Codehighlighter1_20_1396_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_20_1396_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_20_1396_Closed_Text.style.display='none'; Codehighlighter1_20_1396_Open_Image.style.display='inline'; Codehighlighter1_20_1396_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_20_1396_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_20_1396_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_23_86_Open_Image onclick="this.style.display='none'; Codehighlighter1_23_86_Open_Text.style.display='none'; Codehighlighter1_23_86_Closed_Image.style.display='inline'; Codehighlighter1_23_86_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_23_86_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_23_86_Closed_Text.style.display='none'; Codehighlighter1_23_86_Open_Image.style.display='inline'; Codehighlighter1_23_86_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_23_86_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">/**/</span><span id=Codehighlighter1_23_86_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;geode&nbsp;is&nbsp;a&nbsp;leaf&nbsp;node,It&nbsp;must&nbsp;contain&nbsp;some&nbsp;drawables..<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::Geode</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;geode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;osg::Geode;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_127_170_Open_Image onclick="this.style.display='none'; Codehighlighter1_127_170_Open_Text.style.display='none'; Codehighlighter1_127_170_Closed_Image.style.display='inline'; Codehighlighter1_127_170_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_127_170_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_127_170_Closed_Text.style.display='none'; Codehighlighter1_127_170_Open_Image.style.display='inline'; Codehighlighter1_127_170_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_127_170_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">/**/</span><span id=Codehighlighter1_127_170_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;define&nbsp;a&nbsp;Geometry&nbsp;for&nbsp;draw&nbsp;a&nbsp;triangle.</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::Geometry</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;triangle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;osg::Geometry;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;geode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">addDrawable(triangle);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_251_273_Open_Image onclick="this.style.display='none'; Codehighlighter1_251_273_Open_Text.style.display='none'; Codehighlighter1_251_273_Closed_Image.style.display='inline'; Codehighlighter1_251_273_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_251_273_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_251_273_Closed_Text.style.display='none'; Codehighlighter1_251_273_Open_Image.style.display='inline'; Codehighlighter1_251_273_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_251_273_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">/**/</span><span id=Codehighlighter1_251_273_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;triangle&nbsp;Vertexs&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::Vec3Array</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Tvertex&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;osg::Vec3Array;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;triangle</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">setVertexArray(Tvertex);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Tvertex</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">push_back(osg::Vec3(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Tvertex</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">push_back(osg::Vec3(&nbsp;</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">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Tvertex</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">push_back(osg::Vec3(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_502_521_Open_Image onclick="this.style.display='none'; Codehighlighter1_502_521_Open_Text.style.display='none'; Codehighlighter1_502_521_Closed_Image.style.display='inline'; Codehighlighter1_502_521_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_502_521_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_502_521_Closed_Text.style.display='none'; Codehighlighter1_502_521_Open_Image.style.display='inline'; Codehighlighter1_502_521_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_502_521_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">/**/</span><span id=Codehighlighter1_502_521_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;set&nbsp;the&nbsp;color&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::Vec3Array</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Tcolor&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;osg::Vec3Array;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;triangle</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">setColorArray(Tcolor);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;triangle</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">setColorBinding(osg::Geometry::BIND_PER_VERTEX);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Tcolor</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">push_back(osg::Vec3(</span><span style="COLOR: #000000">1.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">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Tcolor</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">push_back(osg::Vec3(</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Tcolor</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">push_back(osg::Vec3(</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">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_798_817_Open_Image onclick="this.style.display='none'; Codehighlighter1_798_817_Open_Text.style.display='none'; Codehighlighter1_798_817_Closed_Image.style.display='inline'; Codehighlighter1_798_817_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_798_817_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_798_817_Closed_Text.style.display='none'; Codehighlighter1_798_817_Open_Image.style.display='inline'; Codehighlighter1_798_817_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_798_817_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">/**/</span><span id=Codehighlighter1_798_817_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;set&nbsp;the&nbsp;normal</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::Vec3Array</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Tnormal&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;osg::Vec3Array;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Tnormal</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">push_back(osg::Vec3(</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;triangle</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">setNormalArray(Tnormal);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;triangle</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">setNormalBinding(osg::Geometry::BIND_OVERALL);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_1008_1047_Open_Image onclick="this.style.display='none'; Codehighlighter1_1008_1047_Open_Text.style.display='none'; Codehighlighter1_1008_1047_Closed_Image.style.display='inline'; Codehighlighter1_1008_1047_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1008_1047_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1008_1047_Closed_Text.style.display='none'; Codehighlighter1_1008_1047_Open_Image.style.display='inline'; Codehighlighter1_1008_1047_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1008_1047_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">/**/</span><span id=Codehighlighter1_1008_1047_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;set&nbsp;the&nbsp;Primitive&nbsp;use&nbsp;GL_TRIANGLES</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::PrimitiveSet</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Tprimitive&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;osg::DrawArrays(GL_TRIANGLES,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;triangle</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">addPrimitiveSet(Tprimitive);<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><br><img id=Codehighlighter1_1164_1200_Open_Image onclick="this.style.display='none'; Codehighlighter1_1164_1200_Open_Text.style.display='none'; Codehighlighter1_1164_1200_Closed_Image.style.display='inline'; Codehighlighter1_1164_1200_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1164_1200_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1164_1200_Closed_Text.style.display='none'; Codehighlighter1_1164_1200_Open_Image.style.display='inline'; Codehighlighter1_1164_1200_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1164_1200_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">/**/</span><span id=Codehighlighter1_1164_1200_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;now&nbsp;&nbsp;define&nbsp;a&nbsp;box(center,width)</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::Box</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;boxtest&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;osg::Box(osg::Vec3(</span><span style="COLOR: #000000">1.5</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">);<br><img id=Codehighlighter1_1266_1292_Open_Image onclick="this.style.display='none'; Codehighlighter1_1266_1292_Open_Text.style.display='none'; Codehighlighter1_1266_1292_Closed_Image.style.display='inline'; Codehighlighter1_1266_1292_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1266_1292_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1266_1292_Closed_Text.style.display='none'; Codehighlighter1_1266_1292_Open_Image.style.display='inline'; Codehighlighter1_1266_1292_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1266_1292_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">/**/</span><span id=Codehighlighter1_1266_1292_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;use&nbsp;the&nbsp;ShapeDrawable</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;osg::ShapeDrawable</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;box&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;osg::ShapeDrawable(boxtest);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;geode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">addDrawable(box);<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: #0000ff">return</span><span style="COLOR: #000000">&nbsp;geode;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里我将解释一些东西.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.Geometry默认是使用显示列表来绘制图元的.你大可观看源码或文档去了解.你可以设置<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setUseDisplayList(false) 禁用它.或者若在绑定数据的时候使用了BING_PER_PRIMITIVE也将会禁用显示列表<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.ShapeDrawable 则是内置一些形状的图元.诸如 圆柱.球体.圆锥等.自己实现尝试一下.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.BING_PER_VERTEX 则指的每个顶点对应于一种属性(如例子中的颜色).<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.BING_OVERALL 则是全部顶点使用一样的属性(如例子中的法线)<br><br>实例源代码下载:&nbsp; ..<a href="http://www.rayfile.com/files/a37a8eb8-8fd0-11de-b45c-0014221b798a/">下载地址<br></a><br><font color=#002c99>忘了说明一点.在OSG当中的坐标系是 z朝上.y朝里.x朝右..与OpenGL中刚好绕x轴旋转了90度..<br>还有一点则是.我们通常情况下默认使用视景器其中的一个关于摄像机漫游器其实默认是使用TrackballManipulator 因此.它会将视点中心指向整个场景的包围球中心...<br></font><br>最终结果图:如下:<br><img height=401 alt="" src="http://www.cppblog.com/images/cppblog_com/acmiyou/osg/geometry.jpg" width=564 border=0><br><br>
<img src ="http://www.cppblog.com/acmiyou/aggbug/94182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-08-23 18:34 <a href="http://www.cppblog.com/acmiyou/archive/2009/08/23/94182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSG学习&lt;2&gt; GraphicsContext与窗口建立</title><link>http://www.cppblog.com/acmiyou/archive/2009/08/22/94108.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Sat, 22 Aug 2009 13:21:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/08/22/94108.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/94108.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/08/22/94108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/94108.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/94108.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所谓的GraphicsContext&nbsp; 我这么翻译它吧:图形设备上下文?..就像在使用OpenGL在win32的窗口里绘制的时候.曾使用的hrc = wglCreateContext(hdc)一样.创建一个图形设备上下文 ,然后使用wglMakeCurrent(hdc,hrc)设置当前使用的图形设备一样....&nbsp;&nbsp;<a href='http://www.cppblog.com/acmiyou/archive/2009/08/22/94108.html'>阅读全文</a><img src ="http://www.cppblog.com/acmiyou/aggbug/94108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-08-22 21:21 <a href="http://www.cppblog.com/acmiyou/archive/2009/08/22/94108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSG学习&lt;1&gt; osg概述以及学习方法等</title><link>http://www.cppblog.com/acmiyou/archive/2009/08/22/94107.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Sat, 22 Aug 2009 11:01:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/08/22/94107.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/94107.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/08/22/94107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/94107.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/94107.html</trackback:ping><description><![CDATA[<br>一.概述.<br>&nbsp;&nbsp;&nbsp;&nbsp; Osg 即OpenSceneGraph的简称.是一款开源的场景图形库.同时它也是跨平台的..Osg它基于场景图的概念.利用了软件开发当中的设计模式的理念,设计并提供了一个基于OpenGL底层的面向对象的图形开发框架..<br>&nbsp;&nbsp;&nbsp;&nbsp; Osg是完全由标准C++和OpenGL而写的.充分利用STL和设计模式的特性,可以说是具有高性能,可扩展,可移植的特性.就目前来讲似乎是越来越流行起来的一款非常棒的场景图形库.仍需要更详细的解释方可去官方网站等查看&gt;_&lt;..<br><br>二.关于OSG的学习.<br>&nbsp;&nbsp;&nbsp;&nbsp; 1.由于OSG是开源的,现在已经发展到了2.9版本了.代码量也日趋递增的趋势.而缺少完善的文档.所以说通读代码已经是件非常痛苦的学习过程.但是这依然是个最主要的方式之一.任何的解释你都可能在代码中得到解答.<br>&nbsp;&nbsp;&nbsp;&nbsp; 2.其次 英文版的官方网站 和中文的官方论坛也是一个学习的地方.在osgchina论坛常会得到array和flysky两位版主的详细解答和建议..<a title=osg英文官方网站 href="http://www.openscenegraph.org/">osg英文官方网站</a>&nbsp;&nbsp;&nbsp;&nbsp;<a title=osg中国官方网站 href="http://www.osgchina.org/">osg中国官方网站</a><br>&nbsp;&nbsp;&nbsp;&nbsp; 3.邮件列表..列表当中都是一些很经典的问题.你可以通过邮箱订阅来获得.说真的,我也没怎么细看....英文水平不高&gt;_&lt;.所以呢还在恶补着英语... <a title=邮件列表地址 href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org">邮件列表地址</a><br>&nbsp;&nbsp;&nbsp;&nbsp; 4.有个非常著名的教程..美国海军关于OSG的教程..NPS...<a title=教程地址 href="https://www.movesinstitute.org/Sullivan/OSGTutorials/">教程地址</a>&nbsp;.<br>没想到居然换了个地址害我找了半天&gt;_&lt;..ofcourse English. 中文版的译文你可以在osgchina的论坛里找的到.但好像不全面.<br>&nbsp;&nbsp;&nbsp;&nbsp; 5. osg源代码中的所有例子 examples...<br>&nbsp;&nbsp;&nbsp;&nbsp; 6. 其次呢,掌握一定的OpenGL基础也是非常好的学习前提.我就是这两个同时一起学的&gt;_&lt;,<br>三.关于OSG的一些内容.<br>&nbsp;&nbsp;&nbsp; 1.第一个重点则是场景管理的能力.可以理解成是一颗场景树.<br>&nbsp;&nbsp;&nbsp; 2.osg的场景图形单线程/多线程 渲染 (渲染过程分为:状态树和渲染树)<br>&nbsp;&nbsp;&nbsp; 3.osg中实现很多非常实用的工具呀,模型读取等.并不需要我们自己写很多代码去实现这方面的内容.<br>&nbsp;&nbsp;&nbsp; 4.osg集成所有的OpenGL的状态和Shader的一些内容..还有矩阵运算等.<br>&nbsp;&nbsp;&nbsp;还有许多内容我并没有说的到&gt;_&lt; 因为我只是看了一个月的代码和资料..也没有完整的写过很多程序.所以我依然还在学习当中.&gt;_&lt;<br>基于以上我们可以认为.OSG是一个非常实用的高层图形应用.<br><br>关于1.2两部分内容你可参考.Array版主的某篇大作:&lt;最长的一帧&gt; 详述了OSG当中一帧当中发生的所有事情..<br><br>关于第三.部分 主要的集中 osgDB和osgUtil 这两个库当中.<br>关于第四部分&nbsp;&nbsp; OpenGL状态集合主要是 osg/StateSet 和 osg/StateAttribute&nbsp; osg/Shader&nbsp; osg/Matrix等许多类当中集成了.<br><br>这是我目前所能说明的一些&gt;_&lt; 毕竟我也只是初学者..<br>我会将这些天以来的学习以及代码的阅读过程中一些总结甚至体会写下来...<br>
<img src ="http://www.cppblog.com/acmiyou/aggbug/94107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-08-22 19:01 <a href="http://www.cppblog.com/acmiyou/archive/2009/08/22/94107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl nehe lesson 1-24课 glut版本代码</title><link>http://www.cppblog.com/acmiyou/archive/2009/08/21/94019.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Fri, 21 Aug 2009 06:09:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/08/21/94019.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/94019.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/08/21/94019.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/94019.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/94019.html</trackback:ping><description><![CDATA[<br>我发现我自己都没空一篇一篇的写着发着总结了.最近可能有点忙..我是一边学opengl,一边学着一个开源的图形渲染引擎osg.&nbsp; 老师另外还叫我看看GLSL ..我发现都快忙不过来了&gt;_&lt; 还有安排时间学习英语,以及设计模式之外的一些知识等..事情真多.学无止境呐..<br><br>附上最近学NEHE 写的1-24的代码&gt;_&lt;&nbsp;&nbsp;&nbsp;&nbsp;内部注有详细注释,如有些函数功能可详看opengl文档吧&nbsp; :<a href="http://osgsmallcity.googlecode.com/files/OpenGL.rar">下载地址&nbsp; <br><br><br></a>
<img src ="http://www.cppblog.com/acmiyou/aggbug/94019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-08-21 14:09 <a href="http://www.cppblog.com/acmiyou/archive/2009/08/21/94019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl学习 nehe opengl lesson_9</title><link>http://www.cppblog.com/acmiyou/archive/2009/08/08/92629.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Sat, 08 Aug 2009 09:48:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/08/08/92629.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/92629.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/08/08/92629.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/92629.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/92629.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 当看完这一课之后,我开始感觉我对OpenlGL有了一定基础了.我不知道为什么.我能够很好理解它.lesson_9当中并没有多大新的知识.全是我们之前所学的.却需要完整的组织起来.希望它产生一个漂亮的图形.初看小星星的德数据结构,我并为能够得出全部的东西.typedef struct {&nbsp;GLint r,g,b;&nbsp;GLfloat dist;&nbsp;GLfloat angle;...&nbsp;&nbsp;<a href='http://www.cppblog.com/acmiyou/archive/2009/08/08/92629.html'>阅读全文</a><img src ="http://www.cppblog.com/acmiyou/aggbug/92629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-08-08 17:48 <a href="http://www.cppblog.com/acmiyou/archive/2009/08/08/92629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl学习 nehe lesson 8</title><link>http://www.cppblog.com/acmiyou/archive/2009/08/08/92627.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Sat, 08 Aug 2009 09:14:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/08/08/92627.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/92627.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/08/08/92627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/92627.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/92627.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 趁着在安装东西的时候,想起来好久没把这些东西总结出来.于是凑合着写着吧..在循序渐进的学习过程中.NEHE的教程我已经看到20课多了 而我发上来的却才是第7课.也不知道自己在忙些什么.总想着能快速的学完.然后学完之后却忘了很多了. 今天趁着这个空闲时候看看能写出多少吧..nehe lesson_8的内容是有关于颜色混合 Apha混合.我们曾在使用glClearColor(1.0,1.0,1.0,1...&nbsp;&nbsp;<a href='http://www.cppblog.com/acmiyou/archive/2009/08/08/92627.html'>阅读全文</a><img src ="http://www.cppblog.com/acmiyou/aggbug/92627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-08-08 17:14 <a href="http://www.cppblog.com/acmiyou/archive/2009/08/08/92627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSG 碰撞检测之多面体求交器代码解读(PloytopeIntersector)</title><link>http://www.cppblog.com/acmiyou/archive/2009/08/02/91942.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Sun, 02 Aug 2009 07:03:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/08/02/91942.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/91942.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/08/02/91942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/91942.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/91942.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关于碰撞检测,始终是物理系统在图形学运用上的一个比较复杂的问题.碰撞检测做的好不好.完全决定一个场景漫游的逼真性.&nbsp;&nbsp;&nbsp;&nbsp; 这几天,在坐城市汽车仿真处理上,对于驱动汽车运动时候,对于汽车的碰撞检测问题困扰了我相当的久.始终没能做到很好.这当中我现在使用的汽车包围体对场景进行求交测试时候,用到了OS...&nbsp;&nbsp;<a href='http://www.cppblog.com/acmiyou/archive/2009/08/02/91942.html'>阅读全文</a><img src ="http://www.cppblog.com/acmiyou/aggbug/91942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-08-02 15:03 <a href="http://www.cppblog.com/acmiyou/archive/2009/08/02/91942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl 使用bmp位图纹理(8-bit  24bit)</title><link>http://www.cppblog.com/acmiyou/archive/2009/07/31/91811.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Fri, 31 Jul 2009 07:30:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/07/31/91811.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/91811.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/07/31/91811.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/91811.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/91811.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp; 前两天,在使用位图当纹理时候,遇到了问题.就是关于8-bit位图不能派上用场时候,于是就萌生了想法,希望能将它完善下整理出来.于是查了一些关于bitmap的文件结构.关于位图结构等,我就不在此详细叙述了.因为网上已经相当的多 而且很多人也实现了很多读取的方法.可参考此篇博文:位图综述&nbsp;&nbsp;&nbsp;&nbsp; 其实呢.我原先并不知道原来已经有了很强大...&nbsp;&nbsp;<a href='http://www.cppblog.com/acmiyou/archive/2009/07/31/91811.html'>阅读全文</a><img src ="http://www.cppblog.com/acmiyou/aggbug/91811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-07-31 15:30 <a href="http://www.cppblog.com/acmiyou/archive/2009/07/31/91811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl学习 nehe opengl lesson_7</title><link>http://www.cppblog.com/acmiyou/archive/2009/07/26/91242.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Sun, 26 Jul 2009 06:21:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/07/26/91242.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/91242.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/07/26/91242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/91242.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/91242.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在这一课当中,我将会学到如何使用光照,如何使用键盘控制,其次还增加两种纹理映射的滤波方式.而主要内容将会放在光照上.为了在场景中增加光照,需要执行下面的这些步骤:1.&nbsp; 定义每个物体的每个顶点的法线向量.这些法线决定了物体相对于光源的方向&nbsp;&nbsp;&nbsp;&nbsp; glNormal3f()&nbsp;&nbsp; //这是这节课当中必须用得到的 指定方向方向2.&n...&nbsp;&nbsp;<a href='http://www.cppblog.com/acmiyou/archive/2009/07/26/91242.html'>阅读全文</a><img src ="http://www.cppblog.com/acmiyou/aggbug/91242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-07-26 14:21 <a href="http://www.cppblog.com/acmiyou/archive/2009/07/26/91242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl学习 nehe opengl lesson_6</title><link>http://www.cppblog.com/acmiyou/archive/2009/07/17/90386.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Fri, 17 Jul 2009 12:46:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/07/17/90386.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/90386.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/07/17/90386.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/90386.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/90386.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 学习如何使用纹理贴图,纹理贴图的一般步骤,纹理坐标的初体验.,设定步骤如下glGenTextures(1,&amp;texnum);&nbsp;&nbsp; //创建一个纹理glBindTexture(GL_TEXTURE_2D,texnum); //指定一个纹理//设置纹理的一些数据等...........glEnable(GL_TEXTURE_2D); //启用纹理功能选择一个纹理,提供纹理坐...&nbsp;&nbsp;<a href='http://www.cppblog.com/acmiyou/archive/2009/07/17/90386.html'>阅读全文</a><img src ="http://www.cppblog.com/acmiyou/aggbug/90386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-07-17 20:46 <a href="http://www.cppblog.com/acmiyou/archive/2009/07/17/90386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl学习 nehe opengl lesson_5</title><link>http://www.cppblog.com/acmiyou/archive/2009/07/17/90376.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Fri, 17 Jul 2009 10:24:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/07/17/90376.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/90376.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/07/17/90376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/90376.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/90376.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: nehe教程里头,该课的内容是利用多边形来组成三维图形.我只实现了一个利用三角形绘制四面体,而其中的正方体则是采用glut工具库自带的函数绘制的#include&nbsp;"openglglut.h"/**//**&nbsp;**&nbsp;&nbsp;使用四个三角形绘制成一个四面体,绕Y轴旋转**&nbsp;&nbsp;使用glut工具库绘制一个灰色正方体,绕XYZ轴旋转**&nbsp;&n...&nbsp;&nbsp;<a href='http://www.cppblog.com/acmiyou/archive/2009/07/17/90376.html'>阅读全文</a><img src ="http://www.cppblog.com/acmiyou/aggbug/90376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-07-17 18:24 <a href="http://www.cppblog.com/acmiyou/archive/2009/07/17/90376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl 学习 nehe opengl lesson_4</title><link>http://www.cppblog.com/acmiyou/archive/2009/07/17/90353.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Fri, 17 Jul 2009 08:33:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/07/17/90353.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/90353.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/07/17/90353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/90353.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/90353.html</trackback:ping><description><![CDATA[<br>所有的lesson 都将基于lesson_1中的头文件而写.<br><br>lesson_4的内容在lesson_3的基础上添加了部分内容而写成的.这课当中,将会使用到模型变换的旋转变换.<br>前几次,曾使用了glTranslatef(d)来移动模型.这次将使用glRotatef 来旋转模型.而为了看到一个动画的效果,将注册一个空闲回调函数,使得角度不断自增.<br><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">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">openglglut.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_25_147_Open_Image onclick="this.style.display='none'; Codehighlighter1_25_147_Open_Text.style.display='none'; Codehighlighter1_25_147_Closed_Image.style.display='inline'; Codehighlighter1_25_147_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_25_147_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_25_147_Closed_Text.style.display='none'; Codehighlighter1_25_147_Open_Image.style.display='inline'; Codehighlighter1_25_147_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_25_147_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">/**/</span><span id=Codehighlighter1_25_147_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;opengl&nbsp;教程第四课内容<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;在窗口的左边部分绘制一个多彩的三角形,它将使用平滑着色<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;在窗口的右边部分绘制一个蓝色的正方形,它将使用单调着色<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;使得左边的三角形绕Y轴不停旋转<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;使得右边的正方形绕x轴不停旋转<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;yRot</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">三角形绕y轴旋转的角度</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;xRot</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">三角形绕x轴旋转的角度</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">**</span><span style="COLOR: #000000">&nbsp;argv)<br><img id=Codehighlighter1_249_640_Open_Image onclick="this.style.display='none'; Codehighlighter1_249_640_Open_Text.style.display='none'; Codehighlighter1_249_640_Closed_Image.style.display='inline'; Codehighlighter1_249_640_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_249_640_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_249_640_Closed_Text.style.display='none'; Codehighlighter1_249_640_Open_Image.style.display='inline'; Codehighlighter1_249_640_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_249_640_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_249_640_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_252_268_Open_Image onclick="this.style.display='none'; Codehighlighter1_252_268_Open_Text.style.display='none'; Codehighlighter1_252_268_Closed_Image.style.display='inline'; Codehighlighter1_252_268_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_252_268_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_252_268_Closed_Text.style.display='none'; Codehighlighter1_252_268_Open_Image.style.display='inline'; Codehighlighter1_252_268_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_252_268_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">/**/</span><span id=Codehighlighter1_252_268_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;初始化窗口&nbsp;并创建窗口</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;createWindow(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">opengl&nbsp;lesson_4</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</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 id=Codehighlighter1_320_337_Open_Image onclick="this.style.display='none'; Codehighlighter1_320_337_Open_Text.style.display='none'; Codehighlighter1_320_337_Closed_Image.style.display='inline'; Codehighlighter1_320_337_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_320_337_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_320_337_Closed_Text.style.display='none'; Codehighlighter1_320_337_Open_Image.style.display='inline'; Codehighlighter1_320_337_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_320_337_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">/**/</span><span id=Codehighlighter1_320_337_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;注册glut的一些函数&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutReshapeFunc(glutResize);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutIdleFunc(glutIdle);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutDisplayFunc(glutDisplay);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">重绘函数&nbsp;&nbsp;&nbsp;&nbsp;&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;glutSpecialFunc(glutSpecial);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">特殊按键函数&nbsp;使得实现全屏/窗口切换</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_572_591_Open_Image onclick="this.style.display='none'; Codehighlighter1_572_591_Open_Text.style.display='none'; Codehighlighter1_572_591_Closed_Image.style.display='inline'; Codehighlighter1_572_591_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_572_591_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_572_591_Closed_Text.style.display='none'; Codehighlighter1_572_591_Open_Image.style.display='inline'; Codehighlighter1_572_591_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_572_591_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">/**/</span><span id=Codehighlighter1_572_591_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;初始化opengl的一些操作</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;InitOpenGL();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_610_621_Open_Image onclick="this.style.display='none'; Codehighlighter1_610_621_Open_Text.style.display='none'; Codehighlighter1_610_621_Closed_Image.style.display='inline'; Codehighlighter1_610_621_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_610_621_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_610_621_Closed_Text.style.display='none'; Codehighlighter1_610_621_Open_Image.style.display='inline'; Codehighlighter1_610_621_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_610_621_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">/**/</span><span id=Codehighlighter1_610_621_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;进入仿真循环</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutMainLoop();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_642_673_Open_Image onclick="this.style.display='none'; Codehighlighter1_642_673_Open_Text.style.display='none'; Codehighlighter1_642_673_Closed_Image.style.display='inline'; Codehighlighter1_642_673_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_642_673_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_642_673_Closed_Text.style.display='none'; Codehighlighter1_642_673_Open_Image.style.display='inline'; Codehighlighter1_642_673_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_642_673_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">/**/</span><span id=Codehighlighter1_642_673_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;实现头文件当中定义的绘制函数&nbsp;绘制三角形和正方形&nbsp;*</span><span style="COLOR: #008000">*/</span></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;glutDisplay(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_698_1771_Open_Image onclick="this.style.display='none'; Codehighlighter1_698_1771_Open_Text.style.display='none'; Codehighlighter1_698_1771_Closed_Image.style.display='inline'; Codehighlighter1_698_1771_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_698_1771_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_698_1771_Closed_Text.style.display='none'; Codehighlighter1_698_1771_Open_Image.style.display='inline'; Codehighlighter1_698_1771_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_698_1771_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_698_1771_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&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GL_DEPTH_BUFFER_BIT);<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;glLoadIdentity();&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">将先初始化单位矩阵</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;glPushMatrix();&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">将当前矩阵复制一个压入栈顶,并保持当前矩阵不变</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;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">6.0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(yRot,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使得三角形绕y轴旋转yRot角度<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">决定三角形三个顶点的颜色值,三角形内部各个点的颜色将会是线性插值的</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;glBegin(GL_TRIANGLES);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用红色绘制上顶点</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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,&nbsp;</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: #008000">//</span><span style="COLOR: #008000">上顶点</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;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用绿色绘制左下顶点</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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">左下</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;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用蓝色绘制右下顶点</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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">右下</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;glEnd();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();&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">恢复当前矩阵为上一次push时的矩阵</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #000000">1.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">6.0f</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(xRot,</span><span style="COLOR: #000000">1.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">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使得正方形绕x轴旋转xRot角度</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;glColor3f(</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_QUADS);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,&nbsp;</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: #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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,&nbsp;</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: #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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&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;glEnd();<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;glutSwapBuffers();&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">强制绘图命令执行绘制在缓冲区交换出来</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1773_1794_Open_Image onclick="this.style.display='none'; Codehighlighter1_1773_1794_Open_Text.style.display='none'; Codehighlighter1_1773_1794_Closed_Image.style.display='inline'; Codehighlighter1_1773_1794_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1773_1794_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1773_1794_Closed_Text.style.display='none'; Codehighlighter1_1773_1794_Open_Image.style.display='inline'; Codehighlighter1_1773_1794_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1773_1794_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">/**/</span><span id=Codehighlighter1_1773_1794_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;实现头文件当中声明的空闲回调函数</span><span style="COLOR: #008000">*/</span></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;glutIdle(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1816_1938_Open_Image onclick="this.style.display='none'; Codehighlighter1_1816_1938_Open_Text.style.display='none'; Codehighlighter1_1816_1938_Closed_Image.style.display='inline'; Codehighlighter1_1816_1938_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1816_1938_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1816_1938_Closed_Text.style.display='none'; Codehighlighter1_1816_1938_Open_Image.style.display='inline'; Codehighlighter1_1816_1938_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1816_1938_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_1816_1938_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;yRot</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">0.2f</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">增加三角形旋转角度</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;xRot</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">0.15f</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">减少正方形减少角度</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;glutPostRedisplay();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使得执行完该函数后调用重绘函数</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span></div>
<br>最终的结果是:<br><img height=512 alt="" src="http://www.cppblog.com/images/cppblog_com/acmiyou/lesson_4.jpg" width=646 border=0><br><br>末尾总结:<br>glRotatef(angle,x,y,z) 将为使得模型绕任意轴旋转angle角度.它将会产生一个旋转矩阵右乘当前矩阵.所以改变了当前矩阵.而为了使得绘制的时候左边的三角形不影响到右边正方形的变换矩阵故在绘制三角形之前使用glPushMatrix()保存当前矩阵,绘制完成之后使用glPopMatrix() 恢复之前的矩阵.当然也可以使用glLoadIdentity()设置当前矩阵为单位矩阵的方法来实现它..<br><br>其次,这次多了以个glIdleFunc() 注册空闲回调函数.即在系统没有其他事件处理的时候将处理这个函数,使得旋转的角度不断改变.<br><br>glPostRedisplay() 使得当前窗口将会进行重绘..根据角度的改变,从而使得我们看到的是一个旋转当中的动画效果<br><br>最后将说明一点的是:我曾在红宝书看到一段内容:有时候为了实现连续的旋转,我们可能会想到重复应用一个值很小的旋转矩阵,这个会存在一个问题.就是误差,使得变换累积结果.我们应该摒弃这种做法.即使用一个新的角度来变换.就将使用如下的方法:<br>glLoadIdentity();<br>glRotatef(new_angle,x,y,z);<br><br>只要new_angle=old_angle+offset<br>
<img src ="http://www.cppblog.com/acmiyou/aggbug/90353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-07-17 16:33 <a href="http://www.cppblog.com/acmiyou/archive/2009/07/17/90353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl学习 nehe opengl lesson_3</title><link>http://www.cppblog.com/acmiyou/archive/2009/07/15/90138.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Wed, 15 Jul 2009 06:48:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/07/15/90138.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/90138.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/07/15/90138.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/90138.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/90138.html</trackback:ping><description><![CDATA[<p>所有lesson都将基于lesson_1中头文件而写<br><br>lesson_2中,知道了如何简单的绘制基本图形的后,这次将要学习如何使用glColor3d(f)来设置opengl状态机中的颜色.使得绘制时候将采用自定义的颜色值.<br></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">"</span><span style="COLOR: #000000">openglglut.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_25_109_Open_Image onclick="this.style.display='none'; Codehighlighter1_25_109_Open_Text.style.display='none'; Codehighlighter1_25_109_Closed_Image.style.display='inline'; Codehighlighter1_25_109_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_25_109_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_25_109_Closed_Text.style.display='none'; Codehighlighter1_25_109_Open_Image.style.display='inline'; Codehighlighter1_25_109_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_25_109_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">/**/</span><span id=Codehighlighter1_25_109_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;opengl&nbsp;教程第三课内容<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;在窗口的左边部分绘制一个多彩的三角形,它将使用平滑着色<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;在窗口的右边部分绘制一个蓝色的正方形,它将使用单调着色<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><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">**</span><span style="COLOR: #000000">&nbsp;argv)<br><img id=Codehighlighter1_143_478_Open_Image onclick="this.style.display='none'; Codehighlighter1_143_478_Open_Text.style.display='none'; Codehighlighter1_143_478_Closed_Image.style.display='inline'; Codehighlighter1_143_478_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_143_478_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_478_Closed_Text.style.display='none'; Codehighlighter1_143_478_Open_Image.style.display='inline'; Codehighlighter1_143_478_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_143_478_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_143_478_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_146_162_Open_Image onclick="this.style.display='none'; Codehighlighter1_146_162_Open_Text.style.display='none'; Codehighlighter1_146_162_Closed_Image.style.display='inline'; Codehighlighter1_146_162_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_146_162_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_146_162_Closed_Text.style.display='none'; Codehighlighter1_146_162_Open_Image.style.display='inline'; Codehighlighter1_146_162_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_146_162_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">/**/</span><span id=Codehighlighter1_146_162_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;初始化窗口&nbsp;并创建窗口</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;createWindow(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">opengl&nbsp;lesson_3</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</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 id=Codehighlighter1_214_231_Open_Image onclick="this.style.display='none'; Codehighlighter1_214_231_Open_Text.style.display='none'; Codehighlighter1_214_231_Closed_Image.style.display='inline'; Codehighlighter1_214_231_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_214_231_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_214_231_Closed_Text.style.display='none'; Codehighlighter1_214_231_Open_Image.style.display='inline'; Codehighlighter1_214_231_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_214_231_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">/**/</span><span id=Codehighlighter1_214_231_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;注册glut的一些函数&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutReshapeFunc(glutResize);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutDisplayFunc(glutDisplay);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">重绘函数&nbsp;&nbsp;&nbsp;&nbsp;&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;glutSpecialFunc(glutSpecial);&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;<br><img id=Codehighlighter1_410_429_Open_Image onclick="this.style.display='none'; Codehighlighter1_410_429_Open_Text.style.display='none'; Codehighlighter1_410_429_Closed_Image.style.display='inline'; Codehighlighter1_410_429_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_410_429_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_410_429_Closed_Text.style.display='none'; Codehighlighter1_410_429_Open_Image.style.display='inline'; Codehighlighter1_410_429_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_410_429_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">/**/</span><span id=Codehighlighter1_410_429_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;初始化opengl的一些操作</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;InitOpenGL();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_448_459_Open_Image onclick="this.style.display='none'; Codehighlighter1_448_459_Open_Text.style.display='none'; Codehighlighter1_448_459_Closed_Image.style.display='inline'; Codehighlighter1_448_459_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_448_459_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_448_459_Closed_Text.style.display='none'; Codehighlighter1_448_459_Open_Image.style.display='inline'; Codehighlighter1_448_459_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_448_459_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">/**/</span><span id=Codehighlighter1_448_459_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;进入仿真循环</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutMainLoop();<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><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;glutDisplay(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_504_1465_Open_Image onclick="this.style.display='none'; Codehighlighter1_504_1465_Open_Text.style.display='none'; Codehighlighter1_504_1465_Closed_Image.style.display='inline'; Codehighlighter1_504_1465_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_504_1465_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_504_1465_Closed_Text.style.display='none'; Codehighlighter1_504_1465_Open_Image.style.display='inline'; Codehighlighter1_504_1465_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_504_1465_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_504_1465_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&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GL_DEPTH_BUFFER_BIT);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();&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">将先初始化单位矩阵</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;glPushMatrix();&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">将当前矩阵复制一个压入栈顶,并保持当前矩阵不变</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;glTranslatef(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">6.0</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">决定三角形三个顶点的颜色值,三角形内部各个点的颜色将会是线性差值的</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;glBegin(GL_TRIANGLES);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用红色绘制上顶点</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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,&nbsp;</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: #008000">//</span><span style="COLOR: #008000">上顶点</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;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用绿色绘制左下顶点</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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&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;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用蓝色绘制右下顶点</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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&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;glEnd();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();&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">恢复当前矩阵为上一次push时的矩阵</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #000000">1.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">6.0f</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_QUADS);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,&nbsp;</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: #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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,&nbsp;</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: #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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&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;glEnd();<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;glutSwapBuffers();&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">强制绘图命令执行绘制在缓冲区交换出来</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span></div>
<br>最后的效果图:<br><img height=395 alt="" src="http://www.cppblog.com/images/cppblog_com/acmiyou/lesson_3.jpg" width=543 border=0><br>末尾总结:<br><br>glColor3f(d)将指定openggl状态中颜色值,使得绘制的时候都将使用这个颜色值 直到再次修改这个值,在绘制正方形的可以得到这个解释.<br>其次, 绘制三角形的时候,只是指定三个顶点的用三种不同颜色绘制,为什么结果会使得三角形变成彩色的呢?<br>其原理在于它使用任意两点绘制一条线段的时候,<br>线段内的其他任一点都将会是这两点颜色值的一个线性插值.<br>
<img src ="http://www.cppblog.com/acmiyou/aggbug/90138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-07-15 14:48 <a href="http://www.cppblog.com/acmiyou/archive/2009/07/15/90138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl学习&lt;四&gt; nehe opengl lesson_2</title><link>http://www.cppblog.com/acmiyou/archive/2009/07/15/90118.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Wed, 15 Jul 2009 03:09:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/07/15/90118.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/90118.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/07/15/90118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/90118.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/90118.html</trackback:ping><description><![CDATA[<br>lesson_2的代码将基于lesson_1中所创建的头文件而实现..<br>其次我想说下 我为什么没有将glut注册函数那块也定义成共用的.因为有些函数我尚未实现或者尚未考虑到该如何实现,总在变化的.故而我将它分离出来了.可以很肯定的事我需要什么就注册什么函数,这样也是应该来说比较清晰的.<br><br>nehe lesson_2中的是实现了在窗口左边绘制一个三角形,在窗口右边绘制了一个正方形.<br><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">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">openglglut.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_25_91_Open_Image onclick="this.style.display='none'; Codehighlighter1_25_91_Open_Text.style.display='none'; Codehighlighter1_25_91_Closed_Image.style.display='inline'; Codehighlighter1_25_91_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_25_91_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_25_91_Closed_Text.style.display='none'; Codehighlighter1_25_91_Open_Image.style.display='inline'; Codehighlighter1_25_91_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_25_91_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">/**/</span><span id=Codehighlighter1_25_91_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;opengl&nbsp;教程第二课内容<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;在窗口的左边部分绘制一个白色的三角形<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;在窗口的右边部分绘制一个白色的正方形<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><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">**</span><span style="COLOR: #000000">&nbsp;argv)<br><img id=Codehighlighter1_125_467_Open_Image onclick="this.style.display='none'; Codehighlighter1_125_467_Open_Text.style.display='none'; Codehighlighter1_125_467_Closed_Image.style.display='inline'; Codehighlighter1_125_467_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_125_467_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_125_467_Closed_Text.style.display='none'; Codehighlighter1_125_467_Open_Image.style.display='inline'; Codehighlighter1_125_467_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_125_467_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_125_467_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_128_144_Open_Image onclick="this.style.display='none'; Codehighlighter1_128_144_Open_Text.style.display='none'; Codehighlighter1_128_144_Closed_Image.style.display='inline'; Codehighlighter1_128_144_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_128_144_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_128_144_Closed_Text.style.display='none'; Codehighlighter1_128_144_Open_Image.style.display='inline'; Codehighlighter1_128_144_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_128_144_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">/**/</span><span id=Codehighlighter1_128_144_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;初始化窗口&nbsp;并创建窗口</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;createWindow(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">opengl&nbsp;lesson_2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</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 id=Codehighlighter1_196_213_Open_Image onclick="this.style.display='none'; Codehighlighter1_196_213_Open_Text.style.display='none'; Codehighlighter1_196_213_Closed_Image.style.display='inline'; Codehighlighter1_196_213_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_196_213_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_196_213_Closed_Text.style.display='none'; Codehighlighter1_196_213_Open_Image.style.display='inline'; Codehighlighter1_196_213_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_196_213_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">/**/</span><span id=Codehighlighter1_196_213_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;注册glut的一些函数&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutReshapeFunc(glutResize);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutDisplayFunc(glutDisplay);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">重绘函数&nbsp;&nbsp;&nbsp;&nbsp;&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;glutSpecialFunc(glutSpecial);&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"><br><img id=Codehighlighter1_399_418_Open_Image onclick="this.style.display='none'; Codehighlighter1_399_418_Open_Text.style.display='none'; Codehighlighter1_399_418_Closed_Image.style.display='inline'; Codehighlighter1_399_418_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_399_418_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_399_418_Closed_Text.style.display='none'; Codehighlighter1_399_418_Open_Image.style.display='inline'; Codehighlighter1_399_418_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_399_418_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">/**/</span><span id=Codehighlighter1_399_418_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;初始化opengl的一些操作</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;InitOpenGL();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_437_448_Open_Image onclick="this.style.display='none'; Codehighlighter1_437_448_Open_Text.style.display='none'; Codehighlighter1_437_448_Closed_Image.style.display='inline'; Codehighlighter1_437_448_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_437_448_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_437_448_Closed_Text.style.display='none'; Codehighlighter1_437_448_Open_Image.style.display='inline'; Codehighlighter1_437_448_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_437_448_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">/**/</span><span id=Codehighlighter1_437_448_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;进入仿真循环</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutMainLoop();<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><br><img id=Codehighlighter1_470_501_Open_Image onclick="this.style.display='none'; Codehighlighter1_470_501_Open_Text.style.display='none'; Codehighlighter1_470_501_Closed_Image.style.display='inline'; Codehighlighter1_470_501_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_470_501_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_470_501_Closed_Text.style.display='none'; Codehighlighter1_470_501_Open_Image.style.display='inline'; Codehighlighter1_470_501_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_470_501_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">/**/</span><span id=Codehighlighter1_470_501_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;实现头文件当中定义的绘制函数&nbsp;绘制三角形和正方形&nbsp;*</span><span style="COLOR: #008000">*/</span></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;glutDisplay(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_526_1325_Open_Image onclick="this.style.display='none'; Codehighlighter1_526_1325_Open_Text.style.display='none'; Codehighlighter1_526_1325_Closed_Image.style.display='inline'; Codehighlighter1_526_1325_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_526_1325_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_526_1325_Closed_Text.style.display='none'; Codehighlighter1_526_1325_Open_Image.style.display='inline'; Codehighlighter1_526_1325_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_526_1325_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_526_1325_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&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GL_DEPTH_BUFFER_BIT);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();&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">将先初始化单位矩阵</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;glPushMatrix();&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">将当前矩阵复制一个压入栈顶,并保持当前矩阵不变</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;glTranslatef(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">6.0</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">左移动1.5并向屏幕内部移动6.0&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;glBegin(GL_TRIANGLES);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,&nbsp;</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: #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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&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;glEnd();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();&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">恢复当前矩阵为上一次push时的矩阵</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #000000">1.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">6.0f</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">右移动1.5并向屏幕内部移动6.0&nbsp;在那区域画三角形</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_QUADS);&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/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,&nbsp;</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: #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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">,&nbsp;</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: #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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&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;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</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">,&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">);&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;glEnd();<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;glutSwapBuffers();&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">强制绘图命令执行绘制在缓冲区交换出来</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span></div>
<br>最终显示结果为:<br><img style="WIDTH: 609px; HEIGHT: 486px" height=486 alt="" src="http://www.cppblog.com/images/cppblog_com/acmiyou/lesson_2.jpg" width=609 border=0><br><br>末尾总结:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从中我学到如何绘制opengl的基本图元 三角形,四边形,甚至多边形.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其次还理解了glpushMatrix() glpopMatrix()的含义即使用规则等.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glpushMatrix() 保存了当前矩阵 使得其后可以恢复原来的位置进行绘制<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; glpopMatrix() 恢复当前矩阵为栈顶矩阵.. 
<img src ="http://www.cppblog.com/acmiyou/aggbug/90118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-07-15 11:09 <a href="http://www.cppblog.com/acmiyou/archive/2009/07/15/90118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl 学习&lt;三&gt; nehe opengl lesson_1</title><link>http://www.cppblog.com/acmiyou/archive/2009/07/15/90106.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Wed, 15 Jul 2009 01:28:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/07/15/90106.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/90106.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/07/15/90106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/90106.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/90106.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: nehe opengl 教程的使用的框架是基于win32的编程.虽然教程的作者已经搭好框架了,但是相对于来讲win32窗口的编程是比较麻烦的,鉴于此,身为opengl初学者的我,在使用编程的习惯还是倾向于使用简单的glut实用库来重写自己想学的所有lession.为此所有的lession 我将集中于一个大工程里.通过同一个头文件定义所有的声明等.我为什么这么做呢?因为若我想用oop实现它 这将会是...&nbsp;&nbsp;<a href='http://www.cppblog.com/acmiyou/archive/2009/07/15/90106.html'>阅读全文</a><img src ="http://www.cppblog.com/acmiyou/aggbug/90106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-07-15 09:28 <a href="http://www.cppblog.com/acmiyou/archive/2009/07/15/90106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl 学习&lt;二&gt;</title><link>http://www.cppblog.com/acmiyou/archive/2009/07/14/90075.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Tue, 14 Jul 2009 13:38:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/07/14/90075.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/90075.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/07/14/90075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/90075.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/90075.html</trackback:ping><description><![CDATA[在学习opengl过程中。我是用了《交互式的计算机图形学 自顶向下的分析》 这本书着实不错。是一本理论兼opengl实践的图形学教程。
<p>&nbsp;&nbsp;&nbsp;&nbsp; 在学习上，我总会是杂乱无章的学。为什么呢。我一般是在需要某个理论的时候才会去深究理论内部的各种详细机制，当然前提必须是你对这方面知识必须有一点的了解，不需要了解的足够深入。其实我想这也是读书的一种方法吧。对于看书我向来先很粗糙的浏览整书一遍，大概就只看一些概念，了解这书的主要内容 方向等。第二遍则是详细的理解内容，某些时候有些内容都是很有之后才有心去看的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 其实今天在总结这个的时候，并不是在用opengl而是在使用osg设计一个项目人物汽车车等漫游类《可能应用在手机，汽车导航上》的时候，想起总结这的。我其实是想画些图来写这份总结可能会更容易理解的.然而实在懒...</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 在图形学的显示流程：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #ff0000">三维图形-&gt;模型视图变换-&gt;投影变换-&gt;三维裁剪-&gt;视口-&gt;屏幕图形显示</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 三维-&gt;二维的变换，总的来理解只是三维的物体在一系列的变换之后决定了屏幕上某些像素位置的颜色值。最后这些颜色组成了一幅图画。就是我们所看到得最终屏幕二维图形了。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 在大概了解这种流程之后，模型视图变换 无疑将成为决定我们所将看到的图像的轮廓。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 模型视图变换 应该来讲是包含两个变换的:模型变换,视图变换。为什么将他们合在一起呢？ 在照相机成像系统中 若固定相机不动移动模型会 <span style="COLOR: #ff0000">等价于</span> 固定模型不动移动相机。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 考究如下内容：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; glMatrixMode(GL_MODELVIEW);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //当前矩阵设置为单位矩阵</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; glRotatef(45.0f,0.0,0.0,1.0); //按[0.0,0.0,1.0]为轴旋转45度</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; glTranslatef(2.0,2.0,2.0);&nbsp;&nbsp;&nbsp;&nbsp; // 平移至 [2.0,2.0,2.0]</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; glBegin(...);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 画某些东西<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>&nbsp;&nbsp;&nbsp;&nbsp; glEnd();</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有两种方式理解：一种是局部坐标系的理解，一种是全局坐标系的理解。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 如果按照上面那些内容从上到下的理解的方式就是<span style="COLOR: #ff0000">局部坐标系的理解</span>。opengl变换上的实现其实是个矩阵的乘法。按照局部坐标系的理解 上面代码的变换是按照这样的顺序执行的:</p>
<p>先将局部坐标系绕z轴旋转45度，在将局部坐标系的原点平移至[2.0,2.0,2.0]，然后在局部坐标系内画物体。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 假设&nbsp;旋转步骤的矩阵为R，平移部分的矩阵为T 当前矩阵为C。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new_C=old_C*R*T 这是一个矩阵右乘操作</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp; 理论上来讲 这就是一个坐标系的变换过程，R*T 这个矩阵其实就是将原先的坐标系变换到现在的坐标系，这个时候原先坐标系的点p将变换成p1,p1=(R*T)*p。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #ff0000">而按照全局坐标系的理解</span>，它的变换过程则是相反的，这也是相当的好理解的.在当前世界坐标系中画好该物体之后，我必须将它移动到正确的位置。那必须得先平移物体到[2.0,2.0,2.0],然后将物体绕z轴旋转45度。这是一个相反的变换过程，然而这个与前面的是等价的 为什么？</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 考虑世界坐标系下点p，经过平移操作后 p11=T*p; 在经过旋转操作后 p1=R*P11=R*(T*p)&nbsp; 这是矩阵的一个左乘操作 先变换的在后面. 所以说new_C=(old_c*(R*(T))) 左乘 所以说这是一个等价的过程.</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般来将，我们考虑的时候总是世界坐标系考虑旋转平移等操作的.所以在写变换的时候最好的方式就是将 变换步骤一直左乘，而代码中则按左乘后结果矩阵的顺序写代码。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其次在理解以上的变换过程中模型变换的原理，我们可以很好的理解<span style="COLOR: #ff0000">gluLookAt(eye,center,up)的视图变换的过程，现在只考虑模型不动，照相机移动的过程，且是在全局坐标系下的移动过程.</span></p>
<p><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; opengl默认照相机框架 是视点在原点 y轴为向上方向 z轴负方向为视线方向</span></p>
<p>&nbsp;</p>
<p><span style="COLOR: #ff0000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp; gluLookAt的目的在于使得视点移动到eye位置 并看向center。</span></p>
<p><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp; 则gluLookAt的过程先平移至eye,而center-&gt;eye(center指向eye)则为z方向设为z(Zx,Zy,Zz),Up方向为y轴方向，y,z的叉积则为x轴方向.则只需将它们都旋转到位就行了</span></p>
<p>&nbsp;</p>
<p><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp; 所以这个时候模型变换矩阵就为《相对于模型来讲 相机移动到eye等价于模型移动到-eye.</span></p>
<p><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp; |Xx Xy Xz&nbsp; 0|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|1&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; -eyex|</span></p>
<p><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp; |Yx Yy Yz&nbsp;&nbsp;0|&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; |0&nbsp;&nbsp; 1&nbsp; 0&nbsp;&nbsp;&nbsp; -eyey|</span></p>
<p><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;|Zx&nbsp;&nbsp;Zy Zz&nbsp; 0|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |0&nbsp;&nbsp;&nbsp;0&nbsp; 1&nbsp;&nbsp;&nbsp; -eyez|</span></p>
<p><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp; |0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 1|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |0&nbsp;&nbsp;&nbsp;0&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp; |</span></p>
<img src ="http://www.cppblog.com/acmiyou/aggbug/90075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-07-14 21:38 <a href="http://www.cppblog.com/acmiyou/archive/2009/07/14/90075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl 学习&lt;1&gt;</title><link>http://www.cppblog.com/acmiyou/archive/2009/07/04/89249.html</link><dc:creator>米游</dc:creator><author>米游</author><pubDate>Sat, 04 Jul 2009 10:36:00 GMT</pubDate><guid>http://www.cppblog.com/acmiyou/archive/2009/07/04/89249.html</guid><wfw:comment>http://www.cppblog.com/acmiyou/comments/89249.html</wfw:comment><comments>http://www.cppblog.com/acmiyou/archive/2009/07/04/89249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/acmiyou/comments/commentRss/89249.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmiyou/services/trackbacks/89249.html</trackback:ping><description><![CDATA[<br>glut是opengl辅助库.<br><br>现通过它实现一个位于z=0平面的正方形 并绕z轴旋转.<br><br>
<div style="BORDER-RIGHT: #cccccc; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_605_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_605_Open_Text.style.display='none'; Codehighlighter1_0_605_Closed_Image.style.display='inline'; Codehighlighter1_0_605_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_605_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_605_Closed_Text.style.display='none'; Codehighlighter1_0_605_Open_Image.style.display='inline'; Codehighlighter1_0_605_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_605_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">/**/</span><span id=Codehighlighter1_0_605_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;&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;One&nbsp;workaround&nbsp;to&nbsp;this&nbsp;issue&nbsp;is&nbsp;requiring&nbsp;users&nbsp;to&nbsp;always&nbsp;link&nbsp;with<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;the&nbsp;same&nbsp;CRT&nbsp;as&nbsp;GLUT&nbsp;is&nbsp;compiled&nbsp;with.&nbsp;&nbsp;That&nbsp;requires&nbsp;users&nbsp;supply&nbsp;a<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;non-standard&nbsp;option.&nbsp;&nbsp;GLUT&nbsp;3.7&nbsp;has&nbsp;its&nbsp;own&nbsp;built-in&nbsp;workaround&nbsp;where<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;the&nbsp;executable's&nbsp;"exit"&nbsp;function&nbsp;pointer&nbsp;is&nbsp;covertly&nbsp;passed&nbsp;to&nbsp;GLUT.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;GLUT&nbsp;then&nbsp;calls&nbsp;the&nbsp;executable's&nbsp;exit&nbsp;function&nbsp;pointer&nbsp;to&nbsp;ensure&nbsp;that<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;any&nbsp;"atexit"&nbsp;calls&nbsp;registered&nbsp;by&nbsp;the&nbsp;application&nbsp;are&nbsp;called&nbsp;if&nbsp;GLUT<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;needs&nbsp;to&nbsp;exit.<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;Note&nbsp;that&nbsp;the&nbsp;__glut*WithExit&nbsp;routines&nbsp;should&nbsp;NEVER&nbsp;be&nbsp;called&nbsp;directly.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;To&nbsp;avoid&nbsp;the&nbsp;atexit&nbsp;workaround,&nbsp;#define&nbsp;GLUT_DISABLE_ATEXIT_HACK.<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 style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_607_642_Open_Image onclick="this.style.display='none'; Codehighlighter1_607_642_Open_Text.style.display='none'; Codehighlighter1_607_642_Closed_Image.style.display='inline'; Codehighlighter1_607_642_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_607_642_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_607_642_Closed_Text.style.display='none'; Codehighlighter1_607_642_Open_Image.style.display='inline'; Codehighlighter1_607_642_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_607_642_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">/**/</span><span id=Codehighlighter1_607_642_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>**&nbsp;That&nbsp;for&nbsp;why&nbsp;define&nbsp;below<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>*</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;GLUT_DISABLE_ATEXIT_HACK&nbsp;</span><span style="COLOR: #000000"><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><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#ifdef&nbsp;WIN32<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"><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>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">gl</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">gl.h</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</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">GL</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">glut.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><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>GLfloat&nbsp;angle</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_783_795_Open_Image onclick="this.style.display='none'; Codehighlighter1_783_795_Open_Text.style.display='none'; Codehighlighter1_783_795_Closed_Image.style.display='inline'; Codehighlighter1_783_795_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_783_795_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_783_795_Closed_Text.style.display='none'; Codehighlighter1_783_795_Open_Image.style.display='inline'; Codehighlighter1_783_795_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_783_795_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">/**/</span><span id=Codehighlighter1_783_795_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><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 style="COLOR: #008000">*/</span></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;display()<br><img id=Codehighlighter1_812_1249_Open_Image onclick="this.style.display='none'; Codehighlighter1_812_1249_Open_Text.style.display='none'; Codehighlighter1_812_1249_Closed_Image.style.display='inline'; Codehighlighter1_812_1249_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_812_1249_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_812_1249_Closed_Text.style.display='none'; Codehighlighter1_812_1249_Open_Image.style.display='inline'; Codehighlighter1_812_1249_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_812_1249_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_812_1249_Open_Text><span style="COLOR: #000000">{<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">clear&nbsp;the&nbsp;color&nbsp;buffer&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;glClear(GL_COLOR_BUFFER_BIT);<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">设置模型视图矩阵</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置当前矩阵为单位矩阵</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;glLoadIdentity();<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">将正方形按z轴旋转&nbsp;angle角度</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;glRotatef(angle,</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">);<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">画一个正方形</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;glBegin(GL_QUADS);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</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;glVertex3f(</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</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;glVertex3f(</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</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;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</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;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">glFlush();<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;显示一帧，下一帧已经在缓冲区画好,交换出来就好<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">本身带有一个强制的glFlush();</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;glutSwapBuffers();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1251_1265_Open_Image onclick="this.style.display='none'; Codehighlighter1_1251_1265_Open_Text.style.display='none'; Codehighlighter1_1251_1265_Closed_Image.style.display='inline'; Codehighlighter1_1251_1265_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1251_1265_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1251_1265_Closed_Text.style.display='none'; Codehighlighter1_1251_1265_Open_Image.style.display='inline'; Codehighlighter1_1251_1265_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1251_1265_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">/**/</span><span id=Codehighlighter1_1251_1265_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><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 style="COLOR: #008000">*/</span></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;idlefunc()<br><img id=Codehighlighter1_1283_1390_Open_Image onclick="this.style.display='none'; Codehighlighter1_1283_1390_Open_Text.style.display='none'; Codehighlighter1_1283_1390_Closed_Image.style.display='inline'; Codehighlighter1_1283_1390_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1283_1390_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1283_1390_Closed_Text.style.display='none'; Codehighlighter1_1283_1390_Open_Image.style.display='inline'; Codehighlighter1_1283_1390_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1283_1390_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_1283_1390_Open_Text><span style="COLOR: #000000">{<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;angle</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(angle</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">360.0f</span><span style="COLOR: #000000">)&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;angle</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">;<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">使得函数执行完成后，调用重绘函数</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;glutPostRedisplay();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1392_1410_Open_Image onclick="this.style.display='none'; Codehighlighter1_1392_1410_Open_Text.style.display='none'; Codehighlighter1_1392_1410_Closed_Image.style.display='inline'; Codehighlighter1_1392_1410_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1392_1410_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1392_1410_Closed_Text.style.display='none'; Codehighlighter1_1392_1410_Open_Image.style.display='inline'; Codehighlighter1_1392_1410_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1392_1410_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">/**/</span><span id=Codehighlighter1_1392_1410_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>*win32&nbsp;main函数<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #008000">*/</span></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;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">argv)<br><img id=Codehighlighter1_1445_1866_Open_Image onclick="this.style.display='none'; Codehighlighter1_1445_1866_Open_Text.style.display='none'; Codehighlighter1_1445_1866_Closed_Image.style.display='inline'; Codehighlighter1_1445_1866_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1445_1866_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1445_1866_Closed_Text.style.display='none'; Codehighlighter1_1445_1866_Open_Image.style.display='inline'; Codehighlighter1_1445_1866_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1445_1866_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_1445_1866_Open_Text><span style="COLOR: #000000">{<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;glut</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;glutInit(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">argc,&nbsp;argv);<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;RGB&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_RGB&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GLUT_DOUBLE);<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">设置窗口左上角位置</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;glutInitWindowPosition(</span><span style="COLOR: #000000">100</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;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置窗口的初始化大小</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;glutInitWindowSize(</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">);<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;&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;glutCreateWindow(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">3D&nbsp;Tech-&nbsp;GLUT&nbsp;Tutorial</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<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">注册显示回调函数</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(display);<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">注册空闲时间函数</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;glutIdleFunc(idlefunc);<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">设置多边形绘制模式为正面，线框式</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;glPolygonMode(GL_FRONT,GL_LINE);<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">进入仿真循环</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/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><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><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><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br><br><br>
<img src ="http://www.cppblog.com/acmiyou/aggbug/89249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmiyou/" target="_blank">米游</a> 2009-07-04 18:36 <a href="http://www.cppblog.com/acmiyou/archive/2009/07/04/89249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>