﻿<?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++博客-滴水穿石</title><link>http://www.cppblog.com/wxm0051/</link><description>宁静致远</description><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:10:11 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:10:11 GMT</pubDate><ttl>60</ttl><item><title>OpenGL简单函数</title><link>http://www.cppblog.com/wxm0051/archive/2009/07/15/90148.html</link><dc:creator>点滴</dc:creator><author>点滴</author><pubDate>Wed, 15 Jul 2009 09:10:00 GMT</pubDate><guid>http://www.cppblog.com/wxm0051/archive/2009/07/15/90148.html</guid><wfw:comment>http://www.cppblog.com/wxm0051/comments/90148.html</wfw:comment><comments>http://www.cppblog.com/wxm0051/archive/2009/07/15/90148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wxm0051/comments/commentRss/90148.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wxm0051/services/trackbacks/90148.html</trackback:ping><description><![CDATA[<p>1、&nbsp;glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei作用<br><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在<span>OpenGL</span>初始化完成之后，我们应该进行一些视图设置。首先是设定视见区域，即告诉<span>OpenGL</span>应把渲染之后的图形绘制在窗体的哪个部位。当视见区域是整个窗体时，<span>OpenGL</span>将把渲染结果绘制到整个窗口。我们调用<span>glViewPort</span>函数来决定视见区域<span>: </span></span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp; procedure glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei);</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>其中，参数<span>X</span>，<span>Y</span>指定了视见区域的左下角在窗口中的位置，一般情况下为（<span>0</span>，<span>0</span>），<span>Width</span>和<span>Height</span>指定了视见区域的宽度和高度。注意<span>OpenGL</span>使用的窗口坐标和<span>WindowsGDI</span>使用的窗口坐标是不一样的。图<span>3.1-1</span>表示了在<span>WindowsGDI</span>中的窗口坐标，而图<span>3.1-2</span>则是<span>OpenGL</span>所定义的窗口坐标。<br>2、&nbsp; <span>OpenGL</span><span>编程的</span><span>glOrtho()</span><span>函数使用</span></p>
<p><span>正射投影，又叫平行投影。这种投影的视景体是一个矩形的平行管道，也就是一个长方体，如图所示。正射投影的最大一个特点是无论物体距离相机多远，投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面，这些行业要求投影后的物体尺寸及相互间的角度不变，以便施工或制造时物体比例大小正确。</span></p>
<p><span><span>&nbsp;&nbsp; </span>&nbsp;glOrtho</span><span>就是一个正射投影函数。它创建一个平行视景体。实际上这个函数的操作是创建一个正射投影矩阵，并且用这个矩阵乘以当前矩阵。其中近裁剪平面是一个矩形，矩形左下角点三维空间坐标是（</span><span>left</span><span>，</span><span>bottom</span><span>，</span><span>-near</span><span>），右上角点是（</span><span>right</span><span>，</span><span>top</span><span>，</span><span>-near</span><span>）；远裁剪平面也是一个矩形，左下角点空间坐标是（</span><span>left</span><span>，</span><span>bottom</span><span>，</span><span>-far</span><span>），右上角点是（</span><span>right</span><span>，</span><span>top</span><span>，</span><span>-far</span><span>）。所有的</span><span>near</span><span>和</span><span>far</span><span>值同时为正或同时为负。如果没有其他变换，正射投影的方向平行于</span><span>Z</span><span>轴，且视点朝向</span><span>Z</span><span>负轴。这意味着物体在视点前面时</span><span>far</span><span>和</span><span>near</span><span>都为负值，物体在视点后面时</span><span>far</span><span>和</span><span>near</span><span>都为正值。<br>3、&nbsp; <span>void glMatrixMode(GLenum mode)</span></p>
<p><span>1).OpenGL中用于指定变换时主要有以下4条命令：&nbsp;&nbsp; <br>&nbsp; glMatrixMode(GLenum&nbsp;&nbsp; mode);&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---用于指定用哪1个矩阵作为当前矩阵，mode用于指定哪一种矩阵栈是其后矩阵操作的目标。mode可取：&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GL_MODELVIEW:把其后的矩阵操作施加于造型视图矩阵栈。（默认）&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GL_PROJECTION:把其后的矩阵操作施加于投影矩阵栈。&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GL_TEXTURE：把其后的矩阵操作施加于纹理矩阵栈。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;2)glLoadIdentity();&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---将当前矩阵赋值为单位矩阵。&nbsp;&nbsp; <br>&nbsp; glLoadMatrix(const&nbsp;&nbsp; TYPE&nbsp;&nbsp; *m);&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---将矩阵m赋值给当前矩阵，m中包含矩阵的16个值，列优先组成4*4矩阵。&nbsp;&nbsp; <br>&nbsp; glMultiMatrix(const&nbsp;&nbsp; TYPE&nbsp;&nbsp; *m);&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---将m乘于当前矩阵。&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;在进行造型和视图变换之前，必须调用：&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; glMatrixMode(GL_MODELVIEW);&nbsp;&nbsp; <br>&nbsp; 在发出投影变换命令之前，需要调用：&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; glMatrixMode(GL_PROJECTION);glLoadIdentity();&nbsp;&nbsp;&nbsp;<br>&nbsp;3).glPushMatrix();---把当前矩阵保存在栈顶上；&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; glPopMatrix();----弹出栈顶上的矩阵，恢复原来的矩阵。&nbsp;&nbsp; <br>&nbsp; 用push和pop的目的是为了保护原来的矩阵在一系列变换操作后被破坏，&nbsp;&nbsp; <br>&nbsp; 这和汇编中保护寄存器的原理一样，push后当前矩阵没有变化，但是一般在push之后都调用glLoadIdentity();将当前矩阵赋值为单位矩阵，然后再操作的&nbsp;&nbsp; </span></p>
<p><span>4、glLoadIdentity():</span><span>该函数的功能是重置当前指定的矩阵为单位矩阵。</span></p>
<p><span>在</span><span>glLoadIdentity()</span><span>之后我们为场景设置了透视图。</span><span>glMatrixMode(GL_MODELVIEW)</span><span>设置当前矩阵为模型视图矩阵，模弄视图矩阵储存了有关物体的信。</span></span></span></p>
<img src ="http://www.cppblog.com/wxm0051/aggbug/90148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wxm0051/" target="_blank">点滴</a> 2009-07-15 17:10 <a href="http://www.cppblog.com/wxm0051/archive/2009/07/15/90148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FFMpeg新手</title><link>http://www.cppblog.com/wxm0051/archive/2009/06/30/88906.html</link><dc:creator>点滴</dc:creator><author>点滴</author><pubDate>Tue, 30 Jun 2009 08:35:00 GMT</pubDate><guid>http://www.cppblog.com/wxm0051/archive/2009/06/30/88906.html</guid><wfw:comment>http://www.cppblog.com/wxm0051/comments/88906.html</wfw:comment><comments>http://www.cppblog.com/wxm0051/archive/2009/06/30/88906.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wxm0051/comments/commentRss/88906.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wxm0051/services/trackbacks/88906.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ffmpeg.c是在Linux下编写用vc的编译器调试通过的，有很多代码规则和vc的编译器不一样，有些库vc下没有。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于VC++并非是一个标准的C编译器，所以ffmpeg使用的C99以及at&amp;t汇编语法在VC下无法编译通过，我曾经从ffmpeg中提取过h263++的<span class=t_tag onclick=tagshow(event) href="tag.php?name=%B1%E0%C2%EB">编码</span>器，在不使用mmx优化选项的情况下，对C代码进行少许的改动还是能够编译通过和正常使用的，但是没有MMX优化的东西使用起来还是不爽的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;采用MINGW在window平台下编译ffmpeg是个不错的选择，当然如果你有兴趣可以把它完全移植到VC环境下，我曾经的老板这么做过，（这是他的命根子，我连看一看的机会都没有，呵呵）据说移植了百万行代码。不过我怎么没发现有那么多呢。不过在VC下编译ffmpeg 会比用Mingw编译小很多，好像是500多K。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面就说说用Mingw如何编译ffmpeg 吧。<br><br>第一步：应该是安装和配置编译环境，我的做法比较简单，首先我去下载了一个DEV-CPP编译器，它包含了最新的Mingw。如果你没有DEV-CPP，你可以直接下载并安装Mingw.下载地址是<a href="http://www.mingw.org/" target=_blank>http://www.mingw.org/</a>。我安装的版本是MinGW-3.1.0-1.exe，请顺手下载一个MSYS-1.0.10.exe它是windows下的一个虚拟linux shell环境，我们需要用它来执行 configure 、make 等命令。首先安装 MinGW到一个指定的目录，假设在c:\MinGW目录下吧。然后设置环境变量，在PATH中加c:\MinGW\BIN。然后安装MSYS ,安装的过程中会提示你进行一些配置，其中需要提示你输入MinGW 的安装目录。这里需要注意一下，请输入 C:/MinGW（搞不懂，我输入C:\MinGW居然告诉我找不到，呵呵，可能是开发者玩惯LINUX了吧）如果是安装了DEV-CPP那就输入C:/dev-cpp即可。哦，差点忘了，您安装MinGW的时候别忘了下载一个WINAPI的源码包，如果安装DEV-CPP就不用了。哎，建议你还是安装个DEV-CPP吧，这个小东西还是很不错的，需要的东西基本上都有了。好了，编译环境配置好了。<br><br>第二步：下载一个最新的ffmpeg源码包，我是通过CVS下载的，具体你可以看看ffmpeg的首页<a href="http://ffmpeg.sourceforge.net/index.php" target=_blank>http://ffmpeg.sourceforge.net/index.php</a>，通过CVS下载至少能保证你能得到最新的代码，ffmpeg的<span class=t_tag onclick=tagshow(event) href="tag.php?name=h264">h264</span>更新好像挺快的，呵呵。将ffmpeg源码解压缩到一个目录里，或者check-out 到一个目录里，在来个假设吧，D:\FFMpeg,运行桌面上的MSYS快捷方式，进入MSYS shell 里（如果安装没有创建快捷方式，晕我就不罗嗦了，安装目录里找MSYS.bat）。如果如下命令：<br><br>1、$ cd /d/ffmpeg 进入ffmpeg工程目录.<br><br>2、$ ./configure --enable-shared --enable-memalign-hack --disable-debug --enable-small<br><br>3、$ make<br><br>可以了，这是编译结束了，你可以在相应的目录里找到编译好的文件。如果不加--disable-debug --enable-small目标文件可能会很大，我的7M多。我下载的ffmpeg最新版本里有一个错误，在libavcodec目录下的snow.c文件的第3460行，pict-&gt;quality= ff_rate_estimate_qscale(&amp;s-&gt;m);错误提示参数不够，我改成pict-&gt;quality= ff_rate_estimate_qscale(&amp;s-&gt;m,0);编译顺利通过。
<img src ="http://www.cppblog.com/wxm0051/aggbug/88906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wxm0051/" target="_blank">点滴</a> 2009-06-30 16:35 <a href="http://www.cppblog.com/wxm0051/archive/2009/06/30/88906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FFMpeg基础</title><link>http://www.cppblog.com/wxm0051/archive/2009/06/30/88895.html</link><dc:creator>点滴</dc:creator><author>点滴</author><pubDate>Tue, 30 Jun 2009 07:17:00 GMT</pubDate><guid>http://www.cppblog.com/wxm0051/archive/2009/06/30/88895.html</guid><wfw:comment>http://www.cppblog.com/wxm0051/comments/88895.html</wfw:comment><comments>http://www.cppblog.com/wxm0051/archive/2009/06/30/88895.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wxm0051/comments/commentRss/88895.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wxm0051/services/trackbacks/88895.html</trackback:ping><description><![CDATA[<p>ffmpeg的SVN仓库更新源代码的用户，ffmpeg工程组特开辟一个专区，定期更新ffmpeg的源代码，并将其快照上传，有需要的朋友可以长期关注本帖。<br>ffmpeg的<span class=t_tag onclick=tagshow(event) href="tag.php?name=%B1%E0%D2%EB">编译</span>指令通常为：<br>1、配置：<br>configuration: --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb --enable-amr_wb --enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-faadbin --enable-dts --enable-pp --enable-faad --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-<span class=t_tag onclick=tagshow(event) href="tag.php?name=ffplay">ffplay</span>&nbsp;&nbsp;--prefix=/usr&nbsp;&nbsp;--extra-cflags=-I/local/include --extra-ldflags=-L/local/lib<br>（注意，其中有很多选项是可选择的，如：--enable-amr_wb，是编译对3GP支持所需要的库，如果你不需要对3GP的支持，或是没有下载amr_wb的库，就不要加该选项了）<br>2、编译：<br>make<br>3、安装：<br>make install&nbsp;&nbsp;（注意，安装通常是指将编译的库拷贝到/local/lib目录下，将所需要的头文件拷贝到/local/include目录下，如果你是通过MSYS+MinGW编译的话，假如你的MSYS是安装在d:\msys\1.0目录下，则make install之后就将生成的库文件拷贝到了d:\msys\1.0\local\lib目录下了）<br><br>其它库（如x264、xvid等）的编译指令通常为：<br>1、配置：<br>configure --prefix=/usr --enable-shared<br>2、编译：<br>make<br>3、安装：<br>make install<br><br>FFDShow源代码，2007年2月10日更新：<a href="http://www.chinavideo.org/downloads/ffdshow_src_20070210.rar" target=_blank><u><font color=#0000ff>http://www.chinavideo.org/downloads/ffdshow_src_20070210.rar</font></u></a> （11.2MB）<br><br>ffmpeg sdk 开发手册（感谢ffmpeg工程组成员：chwyjf）：<a href="http://www.bairuitech.com/html/ruanjianxiazai/index.html" target=_blank><u><font color=#0000ff>http://www.bairuitech.com/html/ruanjianxiazai/index.html</font></u></a><br><br>有关&#8220;<strong>3GP、amrnb和amrwb编译问题。</strong>&#8221;可以参考：<a href="http://bbs.chinavideo.org/viewthread.php?tid=2469&amp;extra=page%3D1" target=_blank><u><font color=#0000ff>http://bbs.chinavideo.org/viewthread.php?tid=2469&amp;extra=page%3D1</font></u></a><br>编译AMR所需要的UnZip工具可在：<a href="http://www.info-zip.org/UnZip.html" target=_blank><u><font color=#0000ff>http://www.info-zip.org/UnZip.html</font></u></a> 上面下载（为了方便大家，后面附件中有Win32的版本）<br>最新的AMR(NB、WB)源代码可以：<a href="http://ftp.penguin.cz/pub/users/utx/amr/" target=_blank><u><font color=#0000ff>http://ftp.penguin.cz/pub/users/utx/amr/</font></u></a> 上面下载<br><br><font color=red>ffmpeg+x264最新源代码（2007-10-07）：</font><a href="http://www.bairuitech.com/html/ruanjianxiazai/20071006/61.html" target=_blank><u><font color=#0000ff>http://www.bairuitech.com/html/ruanjianxiazai/20071006/61.html</font></u></a><br><br>另一篇关于ffmpeg的编程指南（英文版本）：<a href="http://www.dranger.com/ffmpeg/" target=_blank><u><font color=#0000ff>http://www.dranger.com/ffmpeg/</font></u></a></p>
<img src ="http://www.cppblog.com/wxm0051/aggbug/88895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wxm0051/" target="_blank">点滴</a> 2009-06-30 15:17 <a href="http://www.cppblog.com/wxm0051/archive/2009/06/30/88895.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>