﻿<?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++博客-R.R.-随笔分类-OpenGL</title><link>http://www.cppblog.com/wiisola/category/13407.html</link><description>愿我来世 身如琉璃</description><language>zh-cn</language><lastBuildDate>Wed, 05 May 2010 06:44:02 GMT</lastBuildDate><pubDate>Wed, 05 May 2010 06:44:02 GMT</pubDate><ttl>60</ttl><item><title>SDL取消stdout和stderr的重定向</title><link>http://www.cppblog.com/wiisola/archive/2010/04/28/113905.html</link><dc:creator>R.R.</dc:creator><author>R.R.</author><pubDate>Wed, 28 Apr 2010 14:28:00 GMT</pubDate><guid>http://www.cppblog.com/wiisola/archive/2010/04/28/113905.html</guid><wfw:comment>http://www.cppblog.com/wiisola/comments/113905.html</wfw:comment><comments>http://www.cppblog.com/wiisola/archive/2010/04/28/113905.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wiisola/comments/commentRss/113905.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wiisola/services/trackbacks/113905.html</trackback:ping><description><![CDATA[SDL里将所有stdout和stderr重定向到了stdout.txt和stderr.txt文件中，在学习SDL的过程中，每次要打开一个文本文件看日志很麻烦。之前也遇到这个问题，没有解决，这次特意上网找了下，终于得以解决。<br><br>参考解决方案地址：<a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=371770">http://www.gamedev.net/community/forums/topic.asp?topic_id=371770</a><br><br>下面说下解决办法。<br>SDL源码src\main\win32目录下有个SDL_win32_main.c这个文件，里面处理了输出流的重定向。有这么几句：<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-FAMILY: Monaco; FONT-SIZE: 12px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#ifndef&nbsp;NO_STDIO_REDIRECT<br><img id=Codehighlighter1_35_68_Open_Image onclick="this.style.display='none'; Codehighlighter1_35_68_Open_Text.style.display='none'; Codehighlighter1_35_68_Closed_Image.style.display='inline'; Codehighlighter1_35_68_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_35_68_Closed_Image onclick="this.style.display='none'; Codehighlighter1_35_68_Closed_Text.style.display='none'; Codehighlighter1_35_68_Open_Image.style.display='inline'; Codehighlighter1_35_68_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_35_68_Closed_Text></span><span id=Codehighlighter1_35_68_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redirect_output();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">#endif</span></div>
<br>可以看到NO_STDIO_REDIRECT这么一个条件，因为这是在编译过程中选择的，而SDL代码里并没有关于NO_STDIO_REDIRECT的定义，如果直接通过lib链接的话，肯定是会redirect的。所以我们的做法就是在compile时加入define选项重新编译这段源码，以后如果想要重定向时，去掉define选项即可。参考上面网站的做法（有所不同，他的办法我没有成功）：<br>1、将SDL_win32_main.c加入项目中；<br>2、去掉链接库选项-lSDLmain；<br>3、在编译SDL_win32_main.o的时候加入-DNO_STDIO_REDIRECT选项(或者在SDL_win32_main.c中加入#define NO_STDIO_REDIRECT一句)。<br><br>这样就一切OK了，看吧。<br><img border=0 src="http://www.cppblog.com/images/cppblog_com/wiisola/1.jpg"> 
<img src ="http://www.cppblog.com/wiisola/aggbug/113905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wiisola/" target="_blank">R.R.</a> 2010-04-28 22:28 <a href="http://www.cppblog.com/wiisola/archive/2010/04/28/113905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL学习笔记00：第一个OpenGL程序</title><link>http://www.cppblog.com/wiisola/archive/2010/03/29/110916.html</link><dc:creator>R.R.</dc:creator><author>R.R.</author><pubDate>Mon, 29 Mar 2010 14:05:00 GMT</pubDate><guid>http://www.cppblog.com/wiisola/archive/2010/03/29/110916.html</guid><wfw:comment>http://www.cppblog.com/wiisola/comments/110916.html</wfw:comment><comments>http://www.cppblog.com/wiisola/archive/2010/03/29/110916.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wiisola/comments/commentRss/110916.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wiisola/services/trackbacks/110916.html</trackback:ping><description><![CDATA[环境的搭建不说了，网上很多。我本人是用GCC，没有用VC完全是因为不熟悉微软的东西，以及不想太过依赖微软（就算依赖至少也得知道到底依赖了他哪些东西）。<br><br>其中看到的OpenGL的函数，<br>以gl开头的函数都是OpenGL的标准函数；<br>以glu开头的函数都是GLU实用库所提供的函数；<br>以glut开头的函数都是GLUT工具包所提供的函数；<br>函数库的内容详见<a href="http://benbenkingdom.blog.163.com/blog/static/71816126200951624535527/">OpenGL开发库的详细介绍</a>。&nbsp;<br><br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-FAMILY: Monaco; FONT-SIZE: 12px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include&nbsp;</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 align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">gl</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">glu.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</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 align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">myDisplay(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_83_320_Open_Image onclick="this.style.display='none'; Codehighlighter1_83_320_Open_Text.style.display='none'; Codehighlighter1_83_320_Closed_Image.style.display='inline'; Codehighlighter1_83_320_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_83_320_Closed_Image onclick="this.style.display='none'; Codehighlighter1_83_320_Closed_Text.style.display='none'; Codehighlighter1_83_320_Open_Image.style.display='inline'; Codehighlighter1_83_320_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_83_320_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_83_320_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;清除,&nbsp;GL_COLOR_BUFFER_BIT表示清除颜色</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glClear(GL_COLOR_BUFFER_BIT);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;画一个矩形,&nbsp;四个参数分别为左上角点的x,&nbsp;y坐标,&nbsp;右下角点的x,&nbsp;y坐标</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glRectf(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0.5f</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;保证前面的OpenGL命令立即执行（而不是让它们在缓冲区中等待）,&nbsp;其作用跟fflush(stdout)类似</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glFlush();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;程序入口</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">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_365_954_Open_Image onclick="this.style.display='none'; Codehighlighter1_365_954_Open_Text.style.display='none'; Codehighlighter1_365_954_Closed_Image.style.display='inline'; Codehighlighter1_365_954_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_365_954_Closed_Image onclick="this.style.display='none'; Codehighlighter1_365_954_Closed_Text.style.display='none'; Codehighlighter1_365_954_Open_Image.style.display='inline'; Codehighlighter1_365_954_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_365_954_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_365_954_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;对GLUT进行初始化</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></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 align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;设置显示方式<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;GLUT_RGB表示使用RGB颜色,&nbsp;GLUT_INDEX表示使用索引颜色<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;GLUT_SINGLE表示使用单缓冲,&nbsp;GLUT_DOUBLE表示使用双缓冲</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutInitDisplayMode(&nbsp;GLUT_RGB&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GLUT_SINGLE&nbsp;);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;设置窗口在屏幕中的位置</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutInitWindowPosition(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;设置窗口的大小</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutInitWindowSize(</span><span style="COLOR: #000000">400</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">400</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;根据前面设置的信息创建窗口,&nbsp;参数将被作为窗口的标题<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;此时并不马上显示到屏幕上,&nbsp;等到调用glutMainLoop后才能看到窗口</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutCreateWindow(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">My&nbsp;first&nbsp;OpenGL&nbsp;Program,&nbsp;not&nbsp;\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello&nbsp;World\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;-&nbsp;-</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;设置一个函数,&nbsp;需要进行画图时,&nbsp;这个函数就会被调用</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutDisplayFunc(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">myDisplay);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;进行一个消息循环</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutMainLoop();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<img src ="http://www.cppblog.com/wiisola/aggbug/110916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wiisola/" target="_blank">R.R.</a> 2010-03-29 22:05 <a href="http://www.cppblog.com/wiisola/archive/2010/03/29/110916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>