﻿<?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/orlando/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 09 Apr 2026 05:38:00 GMT</lastBuildDate><pubDate>Thu, 09 Apr 2026 05:38:00 GMT</pubDate><ttl>60</ttl><item><title>error X3025</title><link>http://www.cppblog.com/orlando/archive/2008/10/11/63759.html</link><dc:creator>orlando</dc:creator><author>orlando</author><pubDate>Sat, 11 Oct 2008 11:50:00 GMT</pubDate><guid>http://www.cppblog.com/orlando/archive/2008/10/11/63759.html</guid><wfw:comment>http://www.cppblog.com/orlando/comments/63759.html</wfw:comment><comments>http://www.cppblog.com/orlando/archive/2008/10/11/63759.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/orlando/comments/commentRss/63759.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/orlando/services/trackbacks/63759.html</trackback:ping><description><![CDATA[<br>error&nbsp;X3025:&nbsp;global&nbsp;variables&nbsp;are&nbsp;implicitly&nbsp;constant,&nbsp;enable&nbsp;compatibility&nbsp;mode&nbsp;to&nbsp;allow&nbsp;modification&nbsp;<br>全局变量是extern也是常量，在shader里面不能修改，但可以从宿主程序里改。<br>以前的编译器没有强制这一点，现在新的强化了这一要求。<br><br>把extern 改成static运行成功 
<img src ="http://www.cppblog.com/orlando/aggbug/63759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/orlando/" target="_blank">orlando</a> 2008-10-11 19:50 <a href="http://www.cppblog.com/orlando/archive/2008/10/11/63759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BLASSREITER </title><link>http://www.cppblog.com/orlando/archive/2008/10/06/63336.html</link><dc:creator>orlando</dc:creator><author>orlando</author><pubDate>Mon, 06 Oct 2008 13:41:00 GMT</pubDate><guid>http://www.cppblog.com/orlando/archive/2008/10/06/63336.html</guid><wfw:comment>http://www.cppblog.com/orlando/comments/63336.html</wfw:comment><comments>http://www.cppblog.com/orlando/archive/2008/10/06/63336.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/orlando/comments/commentRss/63336.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/orlando/services/trackbacks/63336.html</trackback:ping><description><![CDATA[<p>歌词：</p>
<p>《DD》<br>いとうかなこ<br>words:渡边カズヒロ　music&nbsp;<wbr>&amp;&nbsp;<wbr>arrange:村上正芳<br><br><br>Une&nbsp;<wbr>autre&nbsp;<wbr>victoire<br>Quelque&nbsp;<wbr>chose&nbsp;<wbr>perdu<br>Ton&nbsp;<wbr>monde&nbsp;<wbr>s'effondre<br>Mon&nbsp;<wbr>coeur&nbsp;<wbr>s'engourdit<br>C'est&nbsp;<wbr>quoi,la&nbsp;<wbr>victoire?<br>Pas&nbsp;<wbr>d'espoir,rien<br>Tu&nbsp;<wbr>sais&nbsp;<wbr>pas&nbsp;<wbr>comment<br>Je&nbsp;<wbr>peux&nbsp;<wbr>sortir?<br>Tu&nbsp;<wbr>cherches&nbsp;<wbr>l'amour<br>Tu&nbsp;<wbr>appelles&nbsp;<wbr>ce&nbsp;<wbr>nom<br>Mais,c'est&nbsp;<wbr>o&#249;,alors?<br>Tant&nbsp;<wbr>pis,c'est&nbsp;<wbr>trop&nbsp;<wbr>tard<br>La&nbsp;<wbr>justice&nbsp;<wbr>pour&nbsp;<wbr>chacun<br>Est&nbsp;<wbr>trop&nbsp;<wbr>diff&#233;rente<br>Y&nbsp;<wbr>a-t-il&nbsp;<wbr>la&nbsp;<wbr>raison&nbsp;<wbr>pour&nbsp;<wbr>se&nbsp;<wbr>battre?<br><br>Je&nbsp;<wbr>me&nbsp;<wbr>souviens&nbsp;<wbr>pas<br>J'ai&nbsp;<wbr>tout&nbsp;<wbr>oubli&#233;<br>Je&nbsp;<wbr>me&nbsp;<wbr>rappelle&nbsp;<wbr>pas<br>Mais&nbsp;<wbr>je&nbsp;<wbr>sais&nbsp;<wbr>que&nbsp;<wbr>je&nbsp;<wbr>le&nbsp;<wbr>veux<br><br>Les&nbsp;<wbr>lumi&#232;re&nbsp;<wbr>sont&nbsp;<wbr>&#233;teintes<br>J'appelle&nbsp;<wbr>ton&nbsp;<wbr>nom<br>Crier&nbsp;<wbr>vers&nbsp;<wbr>la&nbsp;<wbr>nuit<br>Encore&nbsp;<wbr>toi&nbsp;<wbr>que&nbsp;<wbr>je&nbsp;<wbr>veux<br><br>Le&nbsp;<wbr>syst&#232;me&nbsp;<wbr>en&nbsp;<wbr>panne<br>On&nbsp;<wbr>est&nbsp;<wbr>tous&nbsp;<wbr>&#233;vanouis<br>Si&nbsp;<wbr>on&nbsp;<wbr>se&nbsp;<wbr>r&#233;veillait<br>Autre&nbsp;<wbr>part<br>Nos&nbsp;<wbr>āmes&nbsp;<wbr>d&#233;sesp&#233;r&#233;es<br>L'amour&nbsp;<wbr>qu'on&nbsp;<wbr>connaissait<br>Dis-moi,<br>Tu&nbsp;<wbr>l'as&nbsp;<wbr>pas&nbsp;<wbr>perdu<br>Je&nbsp;<wbr>perds&nbsp;<wbr>la&nbsp;<wbr>force<br>La&nbsp;<wbr>raison,c'&#233;tait&nbsp;<wbr>quoi?<br>Tiens&nbsp;<wbr>ton&nbsp;<wbr>espoir,<br>si&nbsp;<wbr>tu&nbsp;<wbr>en&nbsp;<wbr>as&nbsp;<wbr>un<br><br>Je&nbsp;<wbr>me&nbsp;<wbr>souviens&nbsp;<wbr>pas<br>J'ai&nbsp;<wbr>tout&nbsp;<wbr>oubli&#233;<br>Je&nbsp;<wbr>me&nbsp;<wbr>rappelle&nbsp;<wbr>pas<br>Mais&nbsp;<wbr>je&nbsp;<wbr>sais&nbsp;<wbr>que&nbsp;<wbr>je&nbsp;<wbr>le&nbsp;<wbr>veux<br><br>La&nbsp;<wbr>conviction,celle&nbsp;<wbr>dont&nbsp;<wbr>on&nbsp;<wbr>a&nbsp;<wbr>besoin<br>La&nbsp;<wbr>lumi&#232;re,celle&nbsp;<wbr>qui&nbsp;<wbr>va&nbsp;<wbr>nous&nbsp;<wbr>conduire<br>L'espoir&nbsp;<wbr>&#233;tait&nbsp;<wbr>si&nbsp;<wbr>pr&#232;s&nbsp;<wbr>de&nbsp;<wbr>nous<br>O&#249;&nbsp;<wbr>on&nbsp;<wbr>s'est&nbsp;<wbr>tromp&#233;?<br><br>Je&nbsp;<wbr>me&nbsp;<wbr>souviens&nbsp;<wbr>pas<br>J'ai&nbsp;<wbr>tout&nbsp;<wbr>oubli&#233;<br>Je&nbsp;<wbr>me&nbsp;<wbr>rappelle&nbsp;<wbr>pas<br>Mais&nbsp;<wbr>je&nbsp;<wbr>sais&nbsp;<wbr>que&nbsp;<wbr>je&nbsp;<wbr>le&nbsp;<wbr>veux<br><br>Je&nbsp;<wbr>me&nbsp;<wbr>souviens&nbsp;<wbr>pas<br>J'ai&nbsp;<wbr>tout&nbsp;<wbr>oubli&#233;<br>Je&nbsp;<wbr>me&nbsp;<wbr>rappelle&nbsp;<wbr>pas<br>Mais&nbsp;<wbr>je&nbsp;<wbr>sais&nbsp;<wbr>que&nbsp;<wbr>je&nbsp;<wbr>le&nbsp;<wbr>veux</p>
<p>&nbsp;<wbr></p>
<p>靠英文版翻译出的大致歌词：</p>
<p>Another&nbsp;<wbr>trophy&nbsp;<wbr>won<br>又得到一个冠军奖杯<br><br>But&nbsp;<wbr>something's&nbsp;<wbr>lost<br>但却失去了一些东西<br><br>Your&nbsp;<wbr>world&nbsp;<wbr>collapses<br>你的世界崩溃了<br><br>My&nbsp;<wbr>heart&nbsp;<wbr>turn&nbsp;<wbr>numb<br>我的心变得麻木不任<br><br>Triumph&nbsp;<wbr>for&nbsp;<wbr>what?<br>为了什么去取得胜利?<br><br>Zero&nbsp;<wbr>hope,none<br>毫无希望,不<br><br>Tell&nbsp;<wbr>me&nbsp;<wbr>the&nbsp;<wbr>way&nbsp;<wbr>to&nbsp;<wbr>get&nbsp;<wbr>out<br>告诉我脱离困境的办法<br><br>If&nbsp;<wbr>you&nbsp;<wbr>find&nbsp;<wbr>one<br>如果你找到的话<br><br>I&nbsp;<wbr>call&nbsp;<wbr>your&nbsp;<wbr>name<br>我呼唤着你的名字<br><br>You&nbsp;<wbr>seek&nbsp;<wbr>for&nbsp;<wbr>love<br>你渴求着爱<br><br>Know&nbsp;<wbr>where&nbsp;<wbr>it&nbsp;<wbr>is?<br>知道在哪里吗?<br><br>I&nbsp;<wbr>got&nbsp;<wbr>news&nbsp;<wbr>for&nbsp;<wbr>you<br>我有消息给你<br><br>Roads&nbsp;<wbr>too&nbsp;<wbr>far&nbsp;<wbr>apart<br>路途遥远<br><br>Answer&nbsp;<wbr>the&nbsp;<wbr>question<br>回答我的问题<br><br>Is&nbsp;<wbr>there&nbsp;<wbr>anything&nbsp;<wbr>to&nbsp;<wbr>fight&nbsp;<wbr>for?<br>有什么值得奋斗的目标吗?<br><br><br>I&nbsp;<wbr>don't&nbsp;<wbr>remember<br>我不记得了<br><br>No,I&nbsp;<wbr>don't&nbsp;<wbr>recall<br>不,是我不愿记起<br><br>Yeah,I&nbsp;<wbr>don't&nbsp;<wbr>remember<br>耶,我不记得了<br><br>But&nbsp;<wbr>I&nbsp;<wbr>know&nbsp;<wbr>I&nbsp;<wbr>need&nbsp;<wbr>it<br>但是我知道我需要它<br><br><br>One&nbsp;<wbr>Faith<br>一个信仰<br><br>That's&nbsp;<wbr>is&nbsp;<wbr>all&nbsp;<wbr>we&nbsp;<wbr>need<br>那就是我们所需要的<br><br>One&nbsp;<wbr>Light<br>一道明光<br><br>That&nbsp;<wbr>will&nbsp;<wbr>show&nbsp;<wbr>the&nbsp;<wbr>way<br>将会照亮我们的道路<br><br>What&nbsp;<wbr>went&nbsp;<wbr>wrong<br>有什么东西出错了<br><br>Hope&nbsp;<wbr>was&nbsp;<wbr>so&nbsp;<wbr>close&nbsp;<wbr>to&nbsp;<wbr>our&nbsp;<wbr>heads<br>希望已经离我们很近<br><br>Won't&nbsp;<wbr>someone&nbsp;<wbr>tell&nbsp;<wbr>me&nbsp;<wbr>please?<br>有人可以告诉我吗?<br><br><br>I&nbsp;<wbr>don't&nbsp;<wbr>remember<br>我不记得了<br><br>No,I&nbsp;<wbr>don't&nbsp;<wbr>recall<br>不,是我不愿记起<br><br>Yeah,I&nbsp;<wbr>don't&nbsp;<wbr>remember<br>耶,我不记得了<br><br>But&nbsp;<wbr>I&nbsp;<wbr>know&nbsp;<wbr>I&nbsp;<wbr>need&nbsp;<wbr>it<br>但是我知道我需要它<br><br>I&nbsp;<wbr>don't&nbsp;<wbr>remember<br>我不记得了<br><br>But&nbsp;<wbr>I&nbsp;<wbr>know&nbsp;<wbr>I&nbsp;<wbr>need&nbsp;<wbr>it<br>但是我知道我需要它</p>
<img src ="http://www.cppblog.com/orlando/aggbug/63336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/orlando/" target="_blank">orlando</a> 2008-10-06 21:41 <a href="http://www.cppblog.com/orlando/archive/2008/10/06/63336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用矩阵堆栈</title><link>http://www.cppblog.com/orlando/archive/2008/08/10/58473.html</link><dc:creator>orlando</dc:creator><author>orlando</author><pubDate>Sun, 10 Aug 2008 14:36:00 GMT</pubDate><guid>http://www.cppblog.com/orlando/archive/2008/08/10/58473.html</guid><wfw:comment>http://www.cppblog.com/orlando/comments/58473.html</wfw:comment><comments>http://www.cppblog.com/orlando/archive/2008/08/10/58473.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/orlando/comments/commentRss/58473.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/orlando/services/trackbacks/58473.html</trackback:ping><description><![CDATA[<p>OpenGL程序员们习惯于管理变换矩阵的堆栈的概念。虽然DirectX并没有一个像OpenGL所采用的关于堆栈的内置概念，但是D3DX库确实包括一个叫ID3DXMatrixStack的帮助接口。这个接口包含基本的堆栈操作，例如通过Push与Pop以及一些函数方法，来帮助构建变换。然而与OpenGL不同，你必须明确的将堆栈的内容传递给SetTransform,因为设备本身并不维护一个堆栈。当渲染一个复杂物体的时候，堆栈可以被用来跟踪和管理变换状态。<br><img height=188 alt="" src="http://www.cppblog.com/images/cppblog_com/orlando/boat.jpg" width=547 border=0><br>假设知道船只在海中的位置和取向，也知道炮塔相对于船的位置以及炮管相对于炮塔的位置。与为每个物体计算多个矩阵然后存储每个矩阵相反，可以使用一个堆栈并按下列的步骤来渲染整个船只：<br>1、使用D3DXCreateMatrixStack创建一个堆栈接口。<br>2、为船只的位置计算矩阵并将该矩阵压入堆栈。<br>3、将栈顶设置为当前世界变换并渲染船体。<br>4、对栈做Push操作并连接炮塔的相对变换。<br>5、将栈顶设置为当前世界变换并渲染炮塔。<br>6、对栈做Push操作并连接第一根炮管的相对变换。<br>7、将栈顶设置为当前世界变换并渲染第一根炮管。<br>8、对栈做Pop操作，这就将炮塔变换置于栈顶。<br>9、对栈叫做Push操作并连接第二根炮管的相对变换。<br>10、将栈顶设置为当前世界变换并渲染第二根炮管。<br>11、对栈做Pop操作，这就将炮塔变换置于栈顶。<br>12、对栈做Pop操作，这就将船只变换置于栈顶。<br>13、以同样的方式渲染船只的其他部分。</p>
<img src ="http://www.cppblog.com/orlando/aggbug/58473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/orlando/" target="_blank">orlando</a> 2008-08-10 22:36 <a href="http://www.cppblog.com/orlando/archive/2008/08/10/58473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>顶点法线</title><link>http://www.cppblog.com/orlando/archive/2008/08/10/58472.html</link><dc:creator>orlando</dc:creator><author>orlando</author><pubDate>Sun, 10 Aug 2008 14:20:00 GMT</pubDate><guid>http://www.cppblog.com/orlando/archive/2008/08/10/58472.html</guid><wfw:comment>http://www.cppblog.com/orlando/comments/58472.html</wfw:comment><comments>http://www.cppblog.com/orlando/archive/2008/08/10/58472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/orlando/comments/commentRss/58472.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/orlando/services/trackbacks/58472.html</trackback:ping><description><![CDATA[<strong>&nbsp;&nbsp;&nbsp;每个顶点的顶点的法线向量是共享那个顶点的所有三角形的法线向量的平均值。</strong>
<img src ="http://www.cppblog.com/orlando/aggbug/58472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/orlando/" target="_blank">orlando</a> 2008-08-10 22:20 <a href="http://www.cppblog.com/orlando/archive/2008/08/10/58472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习顶点缓存与索引缓存(三)</title><link>http://www.cppblog.com/orlando/archive/2008/08/10/58471.html</link><dc:creator>orlando</dc:creator><author>orlando</author><pubDate>Sun, 10 Aug 2008 14:19:00 GMT</pubDate><guid>http://www.cppblog.com/orlando/archive/2008/08/10/58471.html</guid><wfw:comment>http://www.cppblog.com/orlando/comments/58471.html</wfw:comment><comments>http://www.cppblog.com/orlando/archive/2008/08/10/58471.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/orlando/comments/commentRss/58471.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/orlando/services/trackbacks/58471.html</trackback:ping><description><![CDATA[<p>在学习顶点缓存与索引缓存(一)的代码中<br>改成下面这样就达到目的<br>&nbsp;//顶点数据<br>&nbsp;CUSTOMVERTEX g_Vertices[10];<br>&nbsp;g_Vertices[0].x = 300;<br>&nbsp;g_Vertices[0].y = 250;<br>&nbsp;g_Vertices[0].z = 0.5f;<br>&nbsp;g_Vertices[0].rhw = 1.0f;<br>&nbsp;g_Vertices[0].color = 0xffff0000;</p>
<p>&nbsp;//g_Vertices[9]=g_Vertices[0];<br>&nbsp;for(int i=0; i&lt;8; i++)<br>&nbsp;{<br>&nbsp;&nbsp;g_Vertices[i+1].x =&nbsp; (float)(200*sin(i*3.14159/4.0)) + 300;<br>&nbsp;&nbsp;g_Vertices[i+1].y = -(float)(200*cos(i*3.14159/4.0)) + 250;<br>&nbsp;&nbsp;g_Vertices[i+1].z = 0.5f;<br>&nbsp;&nbsp;g_Vertices[i+1].rhw = 1.0f;<br>&nbsp;&nbsp;g_Vertices[i+1].color = 0xff00ff00;<br>&nbsp;}<br>&nbsp;g_Vertices[9]=g_Vertices[1];</p>
<br>g_pd3dDevice-&gt;DrawPrimitive( D3DPT_TRIANGLEFAN, 0,8 );<br><br><br><strong>索引缓存可以不止一次的引用同一顶点，这提供了超过三角形列表的性能优势，因为可以多次重复使用一个顶点，也提供了超过三角形带的创造优势，因为创造过程不那么复杂。</strong><br>
<img src ="http://www.cppblog.com/orlando/aggbug/58471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/orlando/" target="_blank">orlando</a> 2008-08-10 22:19 <a href="http://www.cppblog.com/orlando/archive/2008/08/10/58471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>纹理映射基础</title><link>http://www.cppblog.com/orlando/archive/2008/08/10/58431.html</link><dc:creator>orlando</dc:creator><author>orlando</author><pubDate>Sun, 10 Aug 2008 03:19:00 GMT</pubDate><guid>http://www.cppblog.com/orlando/archive/2008/08/10/58431.html</guid><wfw:comment>http://www.cppblog.com/orlando/comments/58431.html</wfw:comment><comments>http://www.cppblog.com/orlando/archive/2008/08/10/58431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/orlando/comments/commentRss/58431.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/orlando/services/trackbacks/58431.html</trackback:ping><description><![CDATA[<p>纹理坐标<br>&nbsp;&nbsp;&nbsp;实际纹理坐标&amp;相对纹理坐标<br><img height=438 alt="" src="http://www.cppblog.com/images/cppblog_com/orlando/texture.JPG" width=480 align=left border=0><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>struct CUSTOMVERTEX<br>{<br>&nbsp;FLOAT x, y, z;&nbsp;&nbsp;&nbsp; //顶点位置&nbsp; <br>&nbsp;FLOAT u,v ;&nbsp;&nbsp;&nbsp; //顶点纹理坐标<br>};<br>#define D3DFVF_CUSTOMVERTEX&nbsp;&nbsp; (D3DFVF_XYZ|D3DFVF_TEX1)<br><br>&nbsp;//顶点数据<br>&nbsp;&nbsp;&nbsp; CUSTOMVERTEX g_Vertices[] =<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;{ -3,&nbsp;&nbsp; -3,&nbsp; 0.0f,&nbsp; 0.0f, 1.0f},&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; { -3,&nbsp;&nbsp;&nbsp; 3,&nbsp; 0.0f,&nbsp; 0.0f, 0.0f},&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; 3,&nbsp;&nbsp; -3,&nbsp; 0.0f,&nbsp; 1.0f, 1.0f},&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; 3,&nbsp;&nbsp;&nbsp; 3,&nbsp; 0.0f,&nbsp; 1.0f, 0.0f }</p>
<p>&nbsp;&nbsp;&nbsp; };<br>设置为<br>//顶点数据<br>&nbsp;&nbsp;&nbsp; CUSTOMVERTEX g_Vertices[] =<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;{ -3,&nbsp;&nbsp; -3,&nbsp; 0.0f,&nbsp; 0.0f, 1.0f},&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; { -3,&nbsp;&nbsp;&nbsp; 0,&nbsp; 0.0f,&nbsp; 0.0f, 0.5f},&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; 3,&nbsp;&nbsp; -3,&nbsp; 0.0f,&nbsp; 1.0f, 1.0f},&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; 3,&nbsp;&nbsp;&nbsp; 0,&nbsp; 0.0f,&nbsp; 1.0f, 0.5f }</p>
<p>&nbsp;&nbsp;&nbsp; };</p>
<p>只将一半纹理映射到图元上<br></p>
<img src ="http://www.cppblog.com/orlando/aggbug/58431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/orlando/" target="_blank">orlando</a> 2008-08-10 11:19 <a href="http://www.cppblog.com/orlando/archive/2008/08/10/58431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设置资源流</title><link>http://www.cppblog.com/orlando/archive/2008/08/05/58058.html</link><dc:creator>orlando</dc:creator><author>orlando</author><pubDate>Tue, 05 Aug 2008 07:07:00 GMT</pubDate><guid>http://www.cppblog.com/orlando/archive/2008/08/05/58058.html</guid><wfw:comment>http://www.cppblog.com/orlando/comments/58058.html</wfw:comment><comments>http://www.cppblog.com/orlando/archive/2008/08/05/58058.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/orlando/comments/commentRss/58058.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/orlando/services/trackbacks/58058.html</trackback:ping><description><![CDATA[设置资源流与一个顶点缓存挂钩，此流就是一个流入渲染管线的几何信息的流。
<p>下面的方法是用于设置一个资源流：
<p>HRESULT IDirect3DDevice9::SetStreamSource(
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UINT StreamNumber,
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IDirect3DVertexBuffer9* pStreamData,
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UINT OffsetInBytes,
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UINT Stride
<p>);
<p>StreamNumber——确定我们的顶点缓存与哪一个资源流挂钩。我们不使用多重流；因此我们总是使用0号流。
<p>pStreamData——一个指向我们想与流挂钩的那个顶点缓存的指针。
<p>OffsetInBytes——相对流开始处的偏移量。以字节为单位，它指定被填入渲染管线的顶点数据的开始位置。通过检查D3DCAPS9结构中的D3DDEVCAPS2_STREAMOFFSET标志，假如你的设备支持，那么这个参数就有一些非0值。
<p>Stride——我们在顶点缓存中操作的每个部分的流的字节大小。
<p>例如，假设vb是一个已经填充了顶点信息的顶点缓存：
<p>_device-&gt;SetStreamSource( 0, vb, 0, sizeof( Vertex ) ); </p>
<img src ="http://www.cppblog.com/orlando/aggbug/58058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/orlando/" target="_blank">orlando</a> 2008-08-05 15:07 <a href="http://www.cppblog.com/orlando/archive/2008/08/05/58058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>D3DXVec3Normalize 函数</title><link>http://www.cppblog.com/orlando/archive/2008/08/05/58047.html</link><dc:creator>orlando</dc:creator><author>orlando</author><pubDate>Tue, 05 Aug 2008 04:05:00 GMT</pubDate><guid>http://www.cppblog.com/orlando/archive/2008/08/05/58047.html</guid><wfw:comment>http://www.cppblog.com/orlando/comments/58047.html</wfw:comment><comments>http://www.cppblog.com/orlando/archive/2008/08/05/58047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/orlando/comments/commentRss/58047.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/orlando/services/trackbacks/58047.html</trackback:ping><description><![CDATA[<p><font face=宋体><font size=4>返回<span>3D向量的规格化向量。</span></font></font></p>
<p><font face=宋体 size=4>定义：</font></p>
<pre><span><font face=宋体 size=4>D3DXVECTOR3&nbsp;*WINAPI&nbsp;D3DXVec3Normalize(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;D3DXVECTOR3&nbsp;*<em>pOut</em>,</font></span></pre>
<pre><span><font face=宋体><font size=4>&nbsp;&nbsp;&nbsp;&nbsp;CONST D3DXVECTOR3&nbsp;*<em>pV</em></font></font></span></pre>
<pre><span><font face=宋体 size=4>);</font></span></pre>
<p><font face=宋体 size=4>参数：</font></p>
<p><font size=4><em><span>pOut</span></em><span> </span></font></p>
<p><font size=4><span>[in, out]&nbsp;</span><span>指向</span><span> D3DXVECTOR3 </span><span>结构的操作结果。</span></font></p>
<p><font size=4><em><span>pV</span></em><span> </span></font></p>
<p><font size=4><span>[in]&nbsp;</span><span>指向</span><strong><span>D3DXVECTOR3</span></strong><span> </span><span>结构的源向量。</span><span> </span></font></p>
<p><font face=宋体 size=4>返回值：</font></p>
<p><font face=宋体><font size=4>指向<strong><span>D3DXVECTOR3</span></strong><span> 结构的规格化后的向量。</span></font></font></p>
<p><span><font size=4>&nbsp;</font></span></p>
<p><font face=宋体 size=4>说明：</font></p>
<p><font face=宋体><font size=4>函数返回值跟<span>pOut 参数返回值是一样的。这样可以让函数<strong>D3DXVec3Normalize</strong>作为其它函数的参数使用。</span></font></font></p>
<p><font face=宋体 size=4>函数信息：</font></p>
<table cellPadding=0 border=0>
    <tbody>
        <tr>
            <td>
            <p align=center><font size=4><strong><span>Header</span></strong><strong></strong></font></p>
            </td>
            <td>
            <p><font size=4><span><span>d3dx9math.h</span></span></font></p>
            </td>
        </tr>
        <tr>
            <td>
            <p align=center><font size=4><strong><span>Import library</span></strong><strong></strong></font></p>
            </td>
            <td>
            <p><font size=4><span><span>d3dx9.lib</span></span></font></p>
            </td>
        </tr>
        <tr>
            <td>
            <p align=center><font size=4><strong><span>Minimum operating systems</span></strong><strong></strong></font></p>
            </td>
            <td>
            <p><font size=4><span>Windows&nbsp;98</span></font></p>
            </td>
        </tr>
    </tbody>
</table>
<br>&nbsp;D3DXVec3Normalize( (D3DXVECTOR3*)&amp;light1.Direction, &amp;vecDir );<br>
<img src ="http://www.cppblog.com/orlando/aggbug/58047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/orlando/" target="_blank">orlando</a> 2008-08-05 12:05 <a href="http://www.cppblog.com/orlando/archive/2008/08/05/58047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习顶点缓存与索引缓存(二)</title><link>http://www.cppblog.com/orlando/archive/2008/08/04/57998.html</link><dc:creator>orlando</dc:creator><author>orlando</author><pubDate>Mon, 04 Aug 2008 12:36:00 GMT</pubDate><guid>http://www.cppblog.com/orlando/archive/2008/08/04/57998.html</guid><wfw:comment>http://www.cppblog.com/orlando/comments/57998.html</wfw:comment><comments>http://www.cppblog.com/orlando/archive/2008/08/04/57998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/orlando/comments/commentRss/57998.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/orlando/services/trackbacks/57998.html</trackback:ping><description><![CDATA[<p>//=============================================================================<br>// Desc: 坐标变换<br>//=============================================================================</p>
<p>#include &lt;d3dx9.h&gt;&nbsp; //D3DX实用库函数, 该头文件中又包含了d3d9.h头文件</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 全局变量<br>//-----------------------------------------------------------------------------<br>LPDIRECT3D9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pD3D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = NULL;&nbsp;&nbsp;&nbsp; //Direct3D对象<br>LPDIRECT3DDEVICE9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice = NULL;&nbsp;&nbsp;&nbsp; //Direct3D设备对象<br>LPDIRECT3DVERTEXBUFFER9&nbsp;&nbsp;&nbsp; g_pVB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = NULL;&nbsp;&nbsp;&nbsp; //顶点缓冲区对象<br>HWND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_Wnd&nbsp;&nbsp;&nbsp;&nbsp; = NULL;&nbsp;&nbsp;&nbsp; //窗口句柄<br>D3DRECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_ClentRect;<br>LPDIRECT3DINDEXBUFFER9&nbsp;&nbsp;g_pIB&nbsp;&nbsp;= NULL;</p>
<p>//-----------------------------------------------------------------------------<br>// Desc: 顶点结构<br>//-----------------------------------------------------------------------------<br>struct CUSTOMVERTEX<br>{<br>&nbsp;&nbsp;&nbsp; D3DXVECTOR3 position;<br>&nbsp;&nbsp;&nbsp; DWORD color;<br>};<br>#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 设置世界矩阵<br>//-----------------------------------------------------------------------------<br>VOID SetupWorldMatrice()<br>{<br>&nbsp;//建立一个绕X轴动态旋转的世界矩阵<br>&nbsp;&nbsp;&nbsp; D3DXMATRIX matWorld;<br>&nbsp;&nbsp;&nbsp; UINT&nbsp; iTime&nbsp; = timeGetTime() % 1000;<br>&nbsp;&nbsp;&nbsp; FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;<br>&nbsp;D3DXMatrixIdentity( &amp;matWorld );<br>&nbsp;&nbsp;&nbsp; D3DXMatrixRotationX( &amp;matWorld, fAngle );</p>
<p>&nbsp;//设置世界矩阵<br>&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetTransform( D3DTS_WORLD, &amp;matWorld );<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 设置观察矩阵和投影矩阵<br>//-----------------------------------------------------------------------------<br>VOID SetupViewandProjMatrices()<br>{<br>&nbsp;&nbsp;&nbsp; //建立并设置观察矩阵<br>&nbsp;&nbsp;&nbsp; D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );<br>&nbsp;&nbsp;&nbsp; D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );<br>&nbsp;&nbsp;&nbsp; D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );<br>&nbsp;&nbsp;&nbsp; D3DXMATRIX matView;<br>&nbsp;&nbsp;&nbsp; D3DXMatrixLookAtLH( &amp;matView, &amp;vEyePt, &amp;vLookatPt, &amp;vUpVec );<br>&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetTransform( D3DTS_VIEW, &amp;matView );</p>
<p>&nbsp;&nbsp;&nbsp; //建立并设置投影矩阵<br>&nbsp;&nbsp;&nbsp; D3DXMATRIX matProj;<br>&nbsp;&nbsp;&nbsp; D3DXMatrixPerspectiveFovLH( &amp;matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );<br>&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetTransform( D3DTS_PROJECTION, &amp;matProj );<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 设置视区<br>//-----------------------------------------------------------------------------<br>VOID SetupViewPort()<br>{<br>&nbsp;RECT rect;<br>&nbsp;GetClientRect(g_Wnd,&amp;rect);<br>&nbsp;D3DVIEWPORT9 vp;<br>&nbsp;vp.X&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0;<br>&nbsp;vp.Y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0;<br>&nbsp;vp.Width&nbsp; = rect.right;<br>&nbsp;vp.Height = rect.bottom;<br>&nbsp;vp.MinZ&nbsp;&nbsp; = 0.0f;<br>&nbsp;vp.MaxZ&nbsp;&nbsp; = 1.0f;<br>&nbsp;g_pd3dDevice-&gt;SetViewport(&amp;vp);<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 初始化Direct3D<br>//-----------------------------------------------------------------------------<br>HRESULT InitD3D( HWND hWnd )<br>{<br>&nbsp;//创建Direct3D对象, 该对象用于创建Direct3D设备对象<br>&nbsp;&nbsp;&nbsp; if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;</p>
<p>&nbsp;//设置D3DPRESENT_PARAMETERS结构, 准备创建Direct3D设备对象<br>&nbsp;&nbsp;&nbsp; D3DPRESENT_PARAMETERS d3dpp;<br>&nbsp;&nbsp;&nbsp; ZeroMemory( &amp;d3dpp, sizeof(d3dpp) );<br>&nbsp;&nbsp;&nbsp; d3dpp.Windowed = TRUE;<br>&nbsp;&nbsp;&nbsp; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;<br>&nbsp;&nbsp;&nbsp; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;</p>
<p>&nbsp;//创建Direct3D设备对象<br>&nbsp;&nbsp;&nbsp; if( FAILED( g_pD3D-&gt;CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D3DCREATE_SOFTWARE_VERTEXPROCESSING,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;d3dpp, &amp;g_pd3dDevice ) ) )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; //设置剔出模式为不剔出任何面(正面和反面)<br>&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );</p>
<p>&nbsp;//关闭光照处理, 默认情况下启用光照处理<br>&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetRenderState( D3DRS_LIGHTING, FALSE );</p>
<p>&nbsp;//设置观察和投影矩阵<br>&nbsp;SetupViewandProjMatrices();</p>
<p>&nbsp;//设置视区<br>&nbsp;SetupViewPort();</p>
<p>&nbsp;return S_OK;<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 创建场景图形<br>//-----------------------------------------------------------------------------<br>HRESULT InitGeometry()<br>{<br>&nbsp;//创顶点缓冲区<br>&nbsp;&nbsp;&nbsp; if( FAILED( g_pd3dDevice-&gt;CreateVertexBuffer( 50*2*sizeof(CUSTOMVERTEX),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, D3DFVF_CUSTOMVERTEX,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D3DPOOL_DEFAULT, &amp;g_pVB, NULL ) ) )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;//填充顶点缓冲区<br>&nbsp;&nbsp;&nbsp; CUSTOMVERTEX* pVertices;<br>&nbsp;&nbsp;&nbsp; if( FAILED( g_pVB-&gt;Lock( 0, 0, (void**)&amp;pVertices, 0 ) ) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; for( DWORD i=0; i&lt;50; i++ )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FLOAT theta = (2*D3DX_PI*i)/(50-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),-1.0f, cosf(theta) );<br>&nbsp;&nbsp;pVertices[2*i+0].color&nbsp;&nbsp; =0xffffff00;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 1.0f, cosf(theta) );<br>&nbsp;&nbsp;pVertices[2*i+1].color&nbsp;&nbsp; =0xffffff00;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; g_pVB-&gt;Unlock();</p>
<p>&nbsp;WORD g_Indices[100] ;<br>&nbsp;int index;<br>&nbsp;for (index=0;index&lt;100;index++)<br>&nbsp;{<br>&nbsp;&nbsp;g_Indices[index]=index;<br>&nbsp;}<br>&nbsp;&nbsp;//创建索引缓冲区<br>&nbsp;if( FAILED( g_pd3dDevice-&gt;CreateIndexBuffer( 100*sizeof(WORD),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, D3DFMT_INDEX16,&nbsp; //索引类型<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D3DPOOL_DEFAULT, &amp;g_pIB,NULL ) ) )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;//填充索引缓冲区<br>&nbsp;&nbsp;&nbsp; VOID* pIndices;<br>&nbsp;&nbsp;&nbsp; if( FAILED( g_pIB-&gt;Lock( 0, sizeof(g_Indices), (void**)&amp;pIndices, 0 ) ) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; memcpy( pIndices, g_Indices, sizeof(g_Indices) );<br>&nbsp;&nbsp;&nbsp; g_pIB-&gt;Unlock();</p>
<p><br>&nbsp;&nbsp;&nbsp; return S_OK;<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 释放创建的对象<br>//-----------------------------------------------------------------------------<br>VOID Cleanup()<br>{<br>&nbsp;//释放顶点缓冲区对象<br>&nbsp;&nbsp;&nbsp; if( g_pVB != NULL )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pVB-&gt;Release();</p>
<p>&nbsp;//释放Direct3D设备对象<br>&nbsp;&nbsp;&nbsp; if( g_pd3dDevice != NULL )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;Release();</p>
<p>&nbsp;//释放Direct3D对象<br>&nbsp;&nbsp;&nbsp; if( g_pD3D != NULL )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pD3D-&gt;Release();<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 渲染图形 <br>//-----------------------------------------------------------------------------<br>VOID Render()<br>{<br>&nbsp;//清空后台缓冲区<br>&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0 );</p>
<p>&nbsp;//开始在后台缓冲区绘制图形<br>&nbsp;&nbsp;&nbsp; if( SUCCEEDED( g_pd3dDevice-&gt;BeginScene() ) )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;//设置世界矩阵<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetupWorldMatrice();</p>
<p>&nbsp;&nbsp;//在后台缓冲区绘制图形</p>
<p>&nbsp;&nbsp;g_pd3dDevice-&gt;SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetFVF( D3DFVF_CUSTOMVERTEX );<br>&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetIndices( g_pIB );&nbsp; //设置索引缓冲区<br>&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;DrawIndexedPrimitive ( D3DPT_LINELIST, 0,0,100,0,50 );</p>
<p><br>&nbsp;&nbsp;//结束在后台缓冲区渲染图形<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;EndScene();<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;//将在后台缓冲区绘制的图形提交到前台缓冲区显示<br>&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;Present( NULL, NULL, NULL, NULL );<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 消息处理<br>//-----------------------------------------------------------------------------<br>LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )<br>{<br>&nbsp;switch( msg )<br>&nbsp;{<br>&nbsp;case WM_DESTROY:<br>&nbsp;&nbsp;Cleanup();<br>&nbsp;&nbsp;PostQuitMessage( 0 );<br>&nbsp;&nbsp;return 0;<br>&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp; return DefWindowProc( hWnd, msg, wParam, lParam );<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 入口函数<br>//-----------------------------------------------------------------------------<br>INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )<br>{<br>&nbsp;//注册窗口类<br>&nbsp;&nbsp;&nbsp; WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC , MsgProc, 0L, 0L, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetModuleHandle(NULL), NULL, NULL, NULL, NULL,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L"ClassName", NULL };<br>&nbsp;&nbsp;&nbsp; RegisterClassEx( &amp;wc );</p>
<p>&nbsp;//创建窗口<br>&nbsp;&nbsp;&nbsp; HWND hWnd = CreateWindow( L"ClassName", L"坐标变换",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WS_OVERLAPPEDWINDOW, 200, 100, 500,500,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetDesktopWindow(), NULL, wc.hInstance, NULL );<br>&nbsp;g_Wnd=hWnd;</p>
<p>&nbsp;//初始化Direct3D<br>&nbsp;&nbsp;&nbsp; if( SUCCEEDED( InitD3D( hWnd ) ) )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;//创建场景图形<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( SUCCEEDED( InitGeometry() ) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;//显示窗口<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowWindow( hWnd, SW_SHOWDEFAULT );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpdateWindow( hWnd );</p>
<p>&nbsp;&nbsp;&nbsp;//进入消息循环<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MSG msg;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZeroMemory( &amp;msg, sizeof(msg) );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while( msg.message!=WM_QUIT )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( PeekMessage( &amp;msg, NULL, 0U, 0U, PM_REMOVE ) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TranslateMessage( &amp;msg );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DispatchMessage( &amp;msg );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Render();&nbsp; //渲染图形<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; UnregisterClass( L"ClassName", wc.hInstance );<br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br></p>
<strong>在上面的代码中<br>&nbsp; g_pd3dDevice-&gt;DrawIndexedPrimitive ( D3DPT_LINELIST, 0,0,100,0,50 );<br>可以显示出LINELIST<br>但设置为（D3DPT_POINTLIST,0,0,100,0,100）时却不能显示POINT，<br>这是为什么？</strong> 
<img src ="http://www.cppblog.com/orlando/aggbug/57998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/orlando/" target="_blank">orlando</a> 2008-08-04 20:36 <a href="http://www.cppblog.com/orlando/archive/2008/08/04/57998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习顶点缓存与索引缓存(一)</title><link>http://www.cppblog.com/orlando/archive/2008/08/04/57969.html</link><dc:creator>orlando</dc:creator><author>orlando</author><pubDate>Mon, 04 Aug 2008 07:35:00 GMT</pubDate><guid>http://www.cppblog.com/orlando/archive/2008/08/04/57969.html</guid><wfw:comment>http://www.cppblog.com/orlando/comments/57969.html</wfw:comment><comments>http://www.cppblog.com/orlando/archive/2008/08/04/57969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/orlando/comments/commentRss/57969.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/orlando/services/trackbacks/57969.html</trackback:ping><description><![CDATA[<p><strong>在学习了顶点缓存和索引缓存后运行了一个例子：<br></strong><br>//=============================================================================<br>// Desc: 索引缓冲区<br>//=============================================================================</p>
<p>#include &lt;d3d9.h&gt;<br>#include &lt;math.h&gt;</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 全局变量<br>//-----------------------------------------------------------------------------<br>LPDIRECT3D9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pD3D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = NULL; // Direct3D对象<br>LPDIRECT3DDEVICE9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice = NULL; // Direct3D设备对象<br>LPDIRECT3DVERTEXBUFFER9 g_pVB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = NULL; // 顶点缓冲区对象<br>LPDIRECT3DINDEXBUFFER9&nbsp; g_pIB&nbsp;&nbsp; = NULL; // 索引缓冲区对象</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 顶点结构和灵活顶点格式<br>//-----------------------------------------------------------------------------<br>struct CUSTOMVERTEX<br>{&nbsp;&nbsp; FLOAT x, y, z, rhw; &nbsp;&nbsp;// 经过坐标转换的顶点位置<br>&nbsp;&nbsp;&nbsp; DWORD color;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;// 顶点漫反射颜色值<br>};<br>#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 初始化Direct3D<br>//-----------------------------------------------------------------------------<br>HRESULT InitD3D( HWND hWnd )<br>{<br>&nbsp;//创建Direct3D对象, 该对象用于创建Direct3D设备对象<br>&nbsp;&nbsp;&nbsp; if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;</p>
<p>&nbsp;&nbsp;&nbsp; //设置D3DPRESENT_PARAMETERS结构, 准备创建Direct3D设备对象<br>&nbsp;&nbsp;&nbsp; D3DPRESENT_PARAMETERS d3dpp;<br>&nbsp;&nbsp;&nbsp; ZeroMemory( &amp;d3dpp, sizeof(d3dpp) );<br>&nbsp;&nbsp;&nbsp; d3dpp.Windowed = TRUE;<br>&nbsp;&nbsp;&nbsp; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;<br>&nbsp;&nbsp;&nbsp; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;</p>
<p>&nbsp;//创建Direct3D设备对象<br>&nbsp;&nbsp;&nbsp; if( FAILED( g_pD3D-&gt;CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D3DCREATE_SOFTWARE_VERTEXPROCESSING,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;d3dpp, &amp;g_pd3dDevice ) ) )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; return S_OK;<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 创建并填充顶点缓冲区和索引缓冲区<br>//-----------------------------------------------------------------------------<br>HRESULT InitVBAndIB()<br>{<br>&nbsp;//顶点数据<br>&nbsp;CUSTOMVERTEX g_Vertices[9];<br>&nbsp;g_Vertices[0].x = 300;<br>&nbsp;g_Vertices[0].y = 250;<br>&nbsp;g_Vertices[0].z = 0.5f;<br>&nbsp;g_Vertices[0].rhw = 1.0f;<br>&nbsp;g_Vertices[0].color = 0xffff0000;<br>&nbsp;for(int i=0; i&lt;8; i++)<br>&nbsp;{<br>&nbsp;&nbsp;g_Vertices[i+1].x =&nbsp; (float)(200*sin(i*3.14159/4.0)) + 300;<br>&nbsp;&nbsp;g_Vertices[i+1].y = -(float)(200*cos(i*3.14159/4.0)) + 250;<br>&nbsp;&nbsp;g_Vertices[i+1].z = 0.5f;<br>&nbsp;&nbsp;g_Vertices[i+1].rhw = 1.0f;<br>&nbsp;&nbsp;g_Vertices[i+1].color = 0xff00ff00;<br>&nbsp;}</p>
<p>&nbsp;//顶点索引数组<br>&nbsp;WORD g_Indices[] ={ 0,1,2, 0,2,3, 0,3,4, 0,4,5, 0,5,6, 0,6,7, 0,7,8, 0,8,1 };</p>
<p>&nbsp;//创建顶点缓冲区<br>&nbsp;&nbsp;&nbsp; if( FAILED( g_pd3dDevice-&gt;CreateVertexBuffer( 9*sizeof(CUSTOMVERTEX),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, D3DFVF_CUSTOMVERTEX,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D3DPOOL_DEFAULT, &amp;g_pVB,NULL ) ) )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;//填充顶点缓冲区<br>&nbsp;&nbsp;&nbsp; VOID* pVertices;<br>&nbsp;&nbsp;&nbsp; if( FAILED( g_pVB-&gt;Lock( 0, sizeof(g_Vertices), (void**)&amp;pVertices, 0 ) ) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );<br>&nbsp;&nbsp;&nbsp; g_pVB-&gt;Unlock();</p>
<p>&nbsp;//创建索引缓冲区<br>&nbsp;if( FAILED( g_pd3dDevice-&gt;CreateIndexBuffer( 24*sizeof(WORD),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, D3DFMT_INDEX16,&nbsp; //索引类型<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D3DPOOL_DEFAULT, &amp;g_pIB,NULL ) ) )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;//填充顶点缓冲区<br>&nbsp;&nbsp;&nbsp; VOID* pIndices;<br>&nbsp;&nbsp;&nbsp; if( FAILED( g_pIB-&gt;Lock( 0, sizeof(g_Indices), (void**)&amp;pIndices, 0 ) ) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; memcpy( pIndices, g_Indices, sizeof(g_Indices) );<br>&nbsp;&nbsp;&nbsp; g_pIB-&gt;Unlock();</p>
<p>&nbsp;&nbsp;&nbsp; return S_OK;<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 释放创建的对象<br>//-----------------------------------------------------------------------------<br>VOID Cleanup() <br>{<br>&nbsp;//释放顶点缓冲区对象<br>&nbsp;&nbsp;&nbsp; if( g_pVB != NULL )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pVB-&gt;Release();</p>
<p>&nbsp;//释放索引缓冲区对象<br>&nbsp;if(g_pIB != NULL)<br>&nbsp;&nbsp;g_pIB-&gt;Release();</p>
<p>&nbsp;//释放Direct3D设备对象<br>&nbsp;&nbsp;&nbsp; if( g_pd3dDevice != NULL ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;Release();</p>
<p>&nbsp;//释放Direct3D对象<br>&nbsp;&nbsp;&nbsp; if( g_pD3D != NULL )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pD3D-&gt;Release();<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 渲染图形 <br>//-----------------------------------------------------------------------------<br>VOID Render()<br>{<br>&nbsp;//清空后台缓冲区<br>&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );</p>
<p>&nbsp;//开始在后台缓冲区绘制图形<br>&nbsp;&nbsp;if( SUCCEEDED( g_pd3dDevice-&gt;BeginScene()))<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;//在后台缓冲区绘制图形<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetFVF( D3DFVF_CUSTOMVERTEX );<br>&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetIndices( g_pIB );&nbsp; //设置索引缓冲区<br>&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;DrawIndexedPrimitive ( D3DPT_TRIANGLELIST, 0,0,9,0,8 );<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;//结束在后台缓冲区渲染图形<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;EndScene();<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;//将在后台缓冲区绘制的图形提交到前台缓冲区显示<br>&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;Present( NULL, NULL, NULL, NULL );<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 消息处理<br>//-----------------------------------------------------------------------------<br>LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )<br>{<br>&nbsp;&nbsp;&nbsp; switch( msg )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case WM_DESTROY:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostQuitMessage( 0 );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return DefWindowProc( hWnd, msg, wParam, lParam );<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 入口函数<br>//-----------------------------------------------------------------------------<br>INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )<br>{<br>&nbsp;//注册窗口类<br>&nbsp;&nbsp;&nbsp; WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC | CS_HREDRAW | CS_VREDRAW, MsgProc, 0L, 0L,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetModuleHandle(NULL), NULL, NULL, NULL, NULL,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L"ClassName", NULL };<br>&nbsp;&nbsp;&nbsp; RegisterClassEx( &amp;wc );</p>
<p>&nbsp;//创建窗口<br>&nbsp;&nbsp;&nbsp; HWND hWnd = CreateWindow( L"ClassName", L"索引缓冲区",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WS_OVERLAPPEDWINDOW, 200, 100, 600, 550,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetDesktopWindow(), NULL, wc.hInstance, NULL );</p>
<p>&nbsp;//初始化Direct3D<br>&nbsp;&nbsp;&nbsp; if( SUCCEEDED( InitD3D( hWnd ) ) )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;//创建并填充顶点缓冲区和索引缓冲区<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( SUCCEEDED( InitVBAndIB() ) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;//显示窗口<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowWindow( hWnd, SW_SHOWDEFAULT );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpdateWindow( hWnd );</p>
<p>&nbsp;&nbsp;&nbsp;//进入消息循环<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MSG msg;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZeroMemory( &amp;msg, sizeof(msg) );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while( msg.message!=WM_QUIT )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( PeekMessage( &amp;msg, NULL, 0U, 0U, PM_REMOVE ) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TranslateMessage( &amp;msg );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DispatchMessage( &amp;msg );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Render();&nbsp; //渲染图形<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; UnregisterClass( L"ClassName", wc.hInstance );<br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br><br><strong>但当我想把例子改成下面那样使用顶点缓存时发现不能达到目的</strong><br><br>HRESULT InitVBAndIB()<br>{<br>&nbsp;//顶点数据<br>&nbsp;CUSTOMVERTEX g_Vertices[9];<br>&nbsp;g_Vertices[0].x = 300;<br>&nbsp;g_Vertices[0].y = 250;<br>&nbsp;g_Vertices[0].z = 0.5f;<br>&nbsp;g_Vertices[0].rhw = 1.0f;<br>&nbsp;g_Vertices[0].color = 0xffff0000;<br>&nbsp;for(int i=0; i&lt;8; i++)<br>&nbsp;{<br>&nbsp;&nbsp;g_Vertices[i+1].x =&nbsp; (float)(200*sin(i*3.14159/4.0)) + 300;<br>&nbsp;&nbsp;g_Vertices[i+1].y = -(float)(200*cos(i*3.14159/4.0)) + 250;<br>&nbsp;&nbsp;g_Vertices[i+1].z = 0.5f;<br>&nbsp;&nbsp;g_Vertices[i+1].rhw = 1.0f;<br>&nbsp;&nbsp;g_Vertices[i+1].color = 0xff00ff00;<br>&nbsp;}</p>
<p>&nbsp;//顶点索引数组<br>&nbsp;WORD g_Indices[] ={ 0,1,2, 0,2,3, 0,3,4, 0,4,5, 0,5,6, 0,6,7, 0,7,8, 0,8,1 };</p>
<p>&nbsp;//创建顶点缓冲区<br>&nbsp;&nbsp;&nbsp; if( FAILED( g_pd3dDevice-&gt;CreateVertexBuffer( 9*sizeof(CUSTOMVERTEX),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, D3DFVF_CUSTOMVERTEX,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D3DPOOL_DEFAULT, &amp;g_pVB,NULL ) ) )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;//填充顶点缓冲区<br>&nbsp;&nbsp;&nbsp; VOID* pVertices;<br>&nbsp;&nbsp;&nbsp; if( FAILED( g_pVB-&gt;Lock( 0, sizeof(g_Vertices), (void**)&amp;pVertices, 0 ) ) )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return E_FAIL;<br>&nbsp;&nbsp;&nbsp; memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );<br>&nbsp;&nbsp;&nbsp; g_pVB-&gt;Unlock();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; return S_OK;<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 释放创建的对象<br>//-----------------------------------------------------------------------------<br>VOID Cleanup() <br>{<br>&nbsp;//释放顶点缓冲区对象<br>&nbsp;&nbsp;&nbsp; if( g_pVB != NULL )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pVB-&gt;Release();</p>
<p>&nbsp;//释放Direct3D设备对象<br>&nbsp;&nbsp;&nbsp; if( g_pd3dDevice != NULL ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;Release();</p>
<p>&nbsp;//释放Direct3D对象<br>&nbsp;&nbsp;&nbsp; if( g_pD3D != NULL )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pD3D-&gt;Release();<br>}</p>
<p><br>//-----------------------------------------------------------------------------<br>// Desc: 渲染图形 <br>//-----------------------------------------------------------------------------<br>VOID Render()<br>{<br>&nbsp;//清空后台缓冲区<br>&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );</p>
<p>&nbsp;//开始在后台缓冲区绘制图形<br>&nbsp;&nbsp;if( SUCCEEDED( g_pd3dDevice-&gt;BeginScene()))<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;//在后台缓冲区绘制图形<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;SetFVF( D3DFVF_CUSTOMVERTEX );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;DrawPrimitive ( D3DPT_TRIANGLELIST, 0,8 );<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;//结束在后台缓冲区渲染图形<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;EndScene();<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;//将在后台缓冲区绘制的图形提交到前台缓冲区显示<br>&nbsp;&nbsp;&nbsp; g_pd3dDevice-&gt;Present( NULL, NULL, NULL, NULL );<br>}</p>
<br><strong>后来才发现使用顶点缓冲区绘制图形时不能共用顶点，除非使用索引缓存</strong> 
<img src ="http://www.cppblog.com/orlando/aggbug/57969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/orlando/" target="_blank">orlando</a> 2008-08-04 15:35 <a href="http://www.cppblog.com/orlando/archive/2008/08/04/57969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>