﻿<?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++博客-绿-文章分类-DirectX</title><link>http://www.cppblog.com/MyCBlog/category/18498.html</link><description>希望，是美好的……</description><language>zh-cn</language><lastBuildDate>Sat, 11 Feb 2012 22:34:26 GMT</lastBuildDate><pubDate>Sat, 11 Feb 2012 22:34:26 GMT</pubDate><ttl>60</ttl><item><title>雨粒子系统</title><link>http://www.cppblog.com/MyCBlog/articles/165167.html</link><dc:creator>绿</dc:creator><author>绿</author><pubDate>Wed, 08 Feb 2012 09:30:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/165167.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/165167.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/165167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/165167.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/165167.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: #include&nbsp;&lt;windows.h&gt;#include&nbsp;&lt;d3d9.h&gt;#include&nbsp;&lt;d3dx9.h&gt;#include&nbsp;&lt;strsafe.h&gt;#include&nbsp;&lt;time.h&gt;#define&nbsp;PARTICLENUM&nbsp;5000struct&nbsp;CUSTOMV...&nbsp;&nbsp;<a href='http://www.cppblog.com/MyCBlog/articles/165167.html'>阅读全文</a><img src ="http://www.cppblog.com/MyCBlog/aggbug/165167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">绿</a> 2012-02-08 17:30 <a href="http://www.cppblog.com/MyCBlog/articles/165167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>坐标变换实例</title><link>http://www.cppblog.com/MyCBlog/articles/165166.html</link><dc:creator>绿</dc:creator><author>绿</author><pubDate>Wed, 08 Feb 2012 09:19:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/165166.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/165166.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/165166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/165166.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/165166.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">=============================================================================<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;坐标变换<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">=============================================================================</span><span style="color: #008000; "><br /></span><br />#include&nbsp;&lt;d3dx9.h&gt;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">D3DX实用库函数,&nbsp;该头文件中又包含了d3d9.h头文件<br /><br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;全局变量<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>LPDIRECT3D9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pD3D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Direct3D对象</span><span style="color: #008000; "><br /></span>LPDIRECT3DDEVICE9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice&nbsp;=&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Direct3D设备对象</span><span style="color: #008000; "><br /></span>LPDIRECT3DVERTEXBUFFER9&nbsp;&nbsp;&nbsp;&nbsp;g_pVB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">顶点缓冲区对象</span><span style="color: #008000; "><br /></span>HWND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_Wnd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">窗口句柄</span><span style="color: #008000; "><br /></span>D3DRECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_ClentRect;<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;顶点结构<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">struct</span>&nbsp;CUSTOMVERTEX<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXVECTOR3&nbsp;position;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;color;<br />};<br /><span style="color: #0000FF; ">#define</span>&nbsp;D3DFVF_CUSTOMVERTEX&nbsp;(D3DFVF_XYZ|D3DFVF_DIFFUSE)<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;设置世界矩阵<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>VOID&nbsp;SetupWorldMatrice()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">建立一个绕X轴动态旋转的世界矩阵</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;D3DXMATRIX&nbsp;matWorld;<br />&nbsp;&nbsp;&nbsp;&nbsp;UINT&nbsp;&nbsp;iTime&nbsp;&nbsp;=&nbsp;timeGetTime()&nbsp;%&nbsp;1000;<br />&nbsp;&nbsp;&nbsp;&nbsp;FLOAT&nbsp;fAngle&nbsp;=&nbsp;iTime&nbsp;*&nbsp;(2.0f&nbsp;*&nbsp;D3DX_PI)&nbsp;/&nbsp;1000.0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXMatrixIdentity(&nbsp;&amp;matWorld&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXMatrixRotationX(&nbsp;&amp;matWorld,&nbsp;fAngle&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置世界矩阵</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(&nbsp;D3DTS_WORLD,&nbsp;&amp;matWorld&nbsp;);<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;设置观察矩阵和投影矩阵<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>VOID&nbsp;SetupViewandProjMatrices()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">建立并设置观察矩阵</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;D3DXVECTOR3&nbsp;vEyePt(&nbsp;0.0f,&nbsp;0.0f,10.0f&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXVECTOR3&nbsp;vLookatPt(&nbsp;0.0f,&nbsp;0.0f,&nbsp;0.0f&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXVECTOR3&nbsp;vUpVec(&nbsp;0.0f,&nbsp;1.0f,&nbsp;0.0f&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXMATRIX&nbsp;matView;<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXMatrixLookAtLH(&nbsp;&amp;matView,&nbsp;&amp;vEyePt,&nbsp;&amp;vLookatPt,&nbsp;&amp;vUpVec&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(&nbsp;D3DTS_VIEW,&nbsp;&amp;matView&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">建立并设置投影矩阵</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;D3DXMATRIX&nbsp;matProj;<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXMatrixPerspectiveFovLH(&nbsp;&amp;matProj,&nbsp;D3DX_PI/4,&nbsp;1.0f,&nbsp;1.0f,&nbsp;50.0f&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(&nbsp;D3DTS_PROJECTION,&nbsp;&amp;matProj&nbsp;);<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;设置视区<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>VOID&nbsp;SetupViewPort()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;RECT&nbsp;rect;<br />&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(g_Wnd,&amp;rect);<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DVIEWPORT9&nbsp;vp;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.X&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.Y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.Width&nbsp;&nbsp;=&nbsp;rect.right;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.Height&nbsp;=&nbsp;rect.bottom;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.MinZ&nbsp;&nbsp;&nbsp;=&nbsp;0.0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.MaxZ&nbsp;&nbsp;&nbsp;=&nbsp;1.0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetViewport(&amp;vp);<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;初始化Direct3D<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>HRESULT&nbsp;InitD3D(&nbsp;HWND&nbsp;hWnd&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建Direct3D对象,&nbsp;该对象用于创建Direct3D设备对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;NULL&nbsp;==&nbsp;(&nbsp;g_pD3D&nbsp;=&nbsp;Direct3DCreate9(&nbsp;D3D_SDK_VERSION&nbsp;)&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;E_FAIL;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置D3DPRESENT_PARAMETERS结构,&nbsp;准备创建Direct3D设备对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;D3DPRESENT_PARAMETERS&nbsp;d3dpp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(&nbsp;&amp;d3dpp,&nbsp;<span style="color: #0000FF; ">sizeof</span>(d3dpp)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.Windowed&nbsp;=&nbsp;TRUE;<br />&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.SwapEffect&nbsp;=&nbsp;D3DSWAPEFFECT_DISCARD;<br />&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.BackBufferFormat&nbsp;=&nbsp;D3DFMT_UNKNOWN;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建Direct3D设备对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;FAILED(&nbsp;g_pD3D-&gt;CreateDevice(&nbsp;D3DADAPTER_DEFAULT,&nbsp;D3DDEVTYPE_HAL,&nbsp;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;&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;&nbsp;&amp;d3dpp,&nbsp;&amp;g_pd3dDevice&nbsp;)&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;E_FAIL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置剔出模式为不剔出任何面(正面和反面)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">g_pd3dDevice-&gt;SetRenderState(&nbsp;D3DRS_CULLMODE,&nbsp;D3DCULL_NONE&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">关闭光照处理,&nbsp;默认情况下启用光照处理</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetRenderState(&nbsp;D3DRS_LIGHTING,&nbsp;FALSE&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置观察和投影矩阵</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;SetupViewandProjMatrices();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置视区<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">SetupViewPort();</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;S_OK;<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;创建场景图形<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>HRESULT&nbsp;InitGeometry()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创顶点缓冲区</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;FAILED(&nbsp;g_pd3dDevice-&gt;CreateVertexBuffer(&nbsp;50*2*<span style="color: #0000FF; ">sizeof</span>(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;&nbsp;0,&nbsp;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;&nbsp;D3DPOOL_DEFAULT,&nbsp;&amp;g_pVB,&nbsp;NULL&nbsp;)&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;E_FAIL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">填充顶点缓冲区</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;CUSTOMVERTEX*&nbsp;pVertices;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;FAILED(&nbsp;g_pVB-&gt;Lock(&nbsp;0,&nbsp;0,&nbsp;(<span style="color: #0000FF; ">void</span>**)&amp;pVertices,&nbsp;0&nbsp;)&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;E_FAIL;<br />&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;for(&nbsp;DWORD&nbsp;i=0;&nbsp;i&lt;2;&nbsp;i++&nbsp;)<br />&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;{<br />&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLOAT&nbsp;theta&nbsp;=&nbsp;(2*D3DX_PI*i)/(50-1);<br />&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pVertices[2*i+0].position&nbsp;=&nbsp;D3DXVECTOR3(&nbsp;sinf(theta),-1.0f,&nbsp;cosf(theta)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">pVertices[2*i+0].color&nbsp;&nbsp;&nbsp;=0xffffff00;<br />&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pVertices[2*i+1].position&nbsp;=&nbsp;D3DXVECTOR3(&nbsp;sinf(theta),&nbsp;1.0f,&nbsp;cosf(theta)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">pVertices[2*i+1].color&nbsp;&nbsp;&nbsp;=0xffffff00;<br />&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;}</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;pVertices[0].position&nbsp;=&nbsp;::D3DXVECTOR3(0,0,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;pVertices[0].color&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x00000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;pVertices[1].position&nbsp;=&nbsp;::D3DXVECTOR3(0,8,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;pVertices[1].color&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x00000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pVB-&gt;Unlock();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;S_OK;<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;释放创建的对象<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>VOID&nbsp;Cleanup()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">释放顶点缓冲区对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;g_pVB&nbsp;!=&nbsp;NULL&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pVB-&gt;Release();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">释放Direct3D设备对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;g_pd3dDevice&nbsp;!=&nbsp;NULL&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;Release();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">释放Direct3D对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;g_pD3D&nbsp;!=&nbsp;NULL&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pD3D-&gt;Release();<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;渲染图形&nbsp;<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>VOID&nbsp;Render()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">清空后台缓冲区</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;Clear(&nbsp;0,&nbsp;NULL,&nbsp;D3DCLEAR_TARGET,&nbsp;D3DCOLOR_XRGB(255,&nbsp;255,&nbsp;255),&nbsp;1.0f,&nbsp;0&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">开始在后台缓冲区绘制图形</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;SUCCEEDED(&nbsp;g_pd3dDevice-&gt;BeginScene()&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置世界矩阵<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">SetupWorldMatrice();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">在后台缓冲区绘制图形</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetStreamSource(&nbsp;0,&nbsp;g_pVB,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(CUSTOMVERTEX)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetFVF(&nbsp;D3DFVF_CUSTOMVERTEX&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;DrawPrimitive(&nbsp;D3DPT_LINELIST,&nbsp;0,&nbsp;1&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">结束在后台缓冲区渲染图形</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;EndScene();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">将在后台缓冲区绘制的图形提交到前台缓冲区显示</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;Present(&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL&nbsp;);<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;消息处理<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>LRESULT&nbsp;WINAPI&nbsp;MsgProc(&nbsp;HWND&nbsp;hWnd,&nbsp;UINT&nbsp;msg,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>(&nbsp;msg&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_DESTROY:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cleanup();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostQuitMessage(&nbsp;0&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;DefWindowProc(&nbsp;hWnd,&nbsp;msg,&nbsp;wParam,&nbsp;lParam&nbsp;);<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;入口函数<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>INT&nbsp;WINAPI&nbsp;WinMain(&nbsp;HINSTANCE&nbsp;hInst,&nbsp;HINSTANCE,&nbsp;LPSTR,&nbsp;INT&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">注册窗口类</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;WNDCLASSEX&nbsp;wc&nbsp;=&nbsp;{&nbsp;<span style="color: #0000FF; ">sizeof</span>(WNDCLASSEX),&nbsp;CS_CLASSDC&nbsp;,&nbsp;MsgProc,&nbsp;0L,&nbsp;0L,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetModuleHandle(NULL),&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L"ClassName",&nbsp;NULL&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;RegisterClassEx(&nbsp;&amp;wc&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建窗口</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;HWND&nbsp;hWnd&nbsp;=&nbsp;CreateWindow(&nbsp;L"ClassName",&nbsp;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;&nbsp;WS_OVERLAPPEDWINDOW,&nbsp;200,&nbsp;100,&nbsp;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;&nbsp;GetDesktopWindow(),&nbsp;NULL,&nbsp;wc.hInstance,&nbsp;NULL&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_Wnd=hWnd;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">初始化Direct3D</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;SUCCEEDED(&nbsp;InitD3D(&nbsp;hWnd&nbsp;)&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建场景图形</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;SUCCEEDED(&nbsp;InitGeometry()&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">显示窗口</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowWindow(&nbsp;hWnd,&nbsp;SW_SHOWDEFAULT&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateWindow(&nbsp;hWnd&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">进入消息循环</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSG&nbsp;msg;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(&nbsp;&amp;msg,&nbsp;<span style="color: #0000FF; ">sizeof</span>(msg)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(&nbsp;msg.message!=WM_QUIT&nbsp;)<br />&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;<span style="color: #0000FF; ">if</span>(&nbsp;PeekMessage(&nbsp;&amp;msg,&nbsp;NULL,&nbsp;0U,&nbsp;0U,&nbsp;PM_REMOVE&nbsp;)&nbsp;)<br />&nbsp;&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;&nbsp;TranslateMessage(&nbsp;&amp;msg&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DispatchMessage(&nbsp;&amp;msg&nbsp;);<br />&nbsp;&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;<span style="color: #0000FF; ">else</span><br />&nbsp;&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;&nbsp;Render();&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">渲染图形</span><span style="color: #008000; "><br /></span>&nbsp;&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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;UnregisterClass(&nbsp;L"ClassName",&nbsp;wc.hInstance&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><img src ="http://www.cppblog.com/MyCBlog/aggbug/165166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">绿</a> 2012-02-08 17:19 <a href="http://www.cppblog.com/MyCBlog/articles/165166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>植物建模</title><link>http://www.cppblog.com/MyCBlog/articles/165165.html</link><dc:creator>绿</dc:creator><author>绿</author><pubDate>Wed, 08 Feb 2012 09:18:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/165165.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/165165.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/165165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/165165.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/165165.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">=============================================================================<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;坐标变换<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">=============================================================================</span><span style="color: #008000; "><br /></span><br />#include&nbsp;&lt;d3dx9.h&gt;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">D3DX实用库函数,&nbsp;该头文件中又包含了d3d9.h头文件<br /><br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;全局变量<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>LPDIRECT3D9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pD3D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Direct3D对象</span><span style="color: #008000; "><br /></span>LPDIRECT3DDEVICE9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice&nbsp;=&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Direct3D设备对象</span><span style="color: #008000; "><br /></span>LPDIRECT3DVERTEXBUFFER9&nbsp;&nbsp;&nbsp;&nbsp;g_pVB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">顶点缓冲区对象</span><span style="color: #008000; "><br /></span>HWND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_Wnd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">窗口句柄</span><span style="color: #008000; "><br /></span>D3DRECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_ClentRect;<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;顶点结构<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">struct</span>&nbsp;CUSTOMVERTEX<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXVECTOR3&nbsp;position;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;color;<br />};<br /><span style="color: #0000FF; ">#define</span>&nbsp;D3DFVF_CUSTOMVERTEX&nbsp;(D3DFVF_XYZ|D3DFVF_DIFFUSE)<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;RenderTree(<span style="color: #0000FF; ">int</span>&nbsp;i,<span style="color: #0000FF; ">int</span>&nbsp;n,<span style="color: #0000FF; ">float</span>&nbsp;L,D3DXMATRIXA16&nbsp;*&nbsp;matWorld);<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;设置世界矩阵<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>VOID&nbsp;SetupWorldMatrice()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">建立一个绕X轴动态旋转的世界矩阵</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;D3DXMATRIX&nbsp;matWorld;<br />&nbsp;&nbsp;&nbsp;&nbsp;UINT&nbsp;&nbsp;iTime&nbsp;&nbsp;=&nbsp;timeGetTime()&nbsp;%&nbsp;1000;<br />&nbsp;&nbsp;&nbsp;&nbsp;FLOAT&nbsp;fAngle&nbsp;=&nbsp;iTime&nbsp;*&nbsp;(2.0f&nbsp;*&nbsp;D3DX_PI)&nbsp;/&nbsp;1000.0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXMatrixIdentity(&nbsp;&amp;matWorld&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXMatrixRotationX(&nbsp;&amp;matWorld,&nbsp;fAngle&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置世界矩阵</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(&nbsp;D3DTS_WORLD,&nbsp;&amp;matWorld&nbsp;);<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;设置观察矩阵和投影矩阵<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>VOID&nbsp;SetupViewandProjMatrices()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">建立并设置观察矩阵</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;D3DXVECTOR3&nbsp;vEyePt(&nbsp;0.0f,&nbsp;4.0f,20.0f&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXVECTOR3&nbsp;vLookatPt(&nbsp;0.0f,&nbsp;4.0f,&nbsp;0.0f&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXVECTOR3&nbsp;vUpVec(&nbsp;0.0f,&nbsp;1.0f,&nbsp;0.0f&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXMATRIX&nbsp;matView;<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXMatrixLookAtLH(&nbsp;&amp;matView,&nbsp;&amp;vEyePt,&nbsp;&amp;vLookatPt,&nbsp;&amp;vUpVec&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(&nbsp;D3DTS_VIEW,&nbsp;&amp;matView&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">建立并设置投影矩阵</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;D3DXMATRIX&nbsp;matProj;<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DXMatrixPerspectiveFovLH(&nbsp;&amp;matProj,&nbsp;D3DX_PI/4,&nbsp;1.0f,&nbsp;1.0f,&nbsp;50.0f&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(&nbsp;D3DTS_PROJECTION,&nbsp;&amp;matProj&nbsp;);<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;设置视区<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>VOID&nbsp;SetupViewPort()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;RECT&nbsp;rect;<br />&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(g_Wnd,&amp;rect);<br />&nbsp;&nbsp;&nbsp;&nbsp;D3DVIEWPORT9&nbsp;vp;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.X&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.Y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.Width&nbsp;&nbsp;=&nbsp;rect.right;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.Height&nbsp;=&nbsp;rect.bottom;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.MinZ&nbsp;&nbsp;&nbsp;=&nbsp;0.0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;vp.MaxZ&nbsp;&nbsp;&nbsp;=&nbsp;1.0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetViewport(&amp;vp);<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;初始化Direct3D<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>HRESULT&nbsp;InitD3D(&nbsp;HWND&nbsp;hWnd&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建Direct3D对象,&nbsp;该对象用于创建Direct3D设备对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;NULL&nbsp;==&nbsp;(&nbsp;g_pD3D&nbsp;=&nbsp;Direct3DCreate9(&nbsp;D3D_SDK_VERSION&nbsp;)&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;E_FAIL;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置D3DPRESENT_PARAMETERS结构,&nbsp;准备创建Direct3D设备对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;D3DPRESENT_PARAMETERS&nbsp;d3dpp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(&amp;d3dpp,<span style="color: #0000FF; ">sizeof</span>(d3dpp));<br />&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.Windowed&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.SwapEffect&nbsp;=&nbsp;D3DSWAPEFFECT_DISCARD;<br />&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.BackBufferFormat&nbsp;=&nbsp;D3DFMT_UNKNOWN;<br />&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.EnableAutoDepthStencil&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.AutoDepthStencilFormat&nbsp;=&nbsp;D3DFMT_D16;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建Direct3D设备对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;FAILED(&nbsp;g_pD3D-&gt;CreateDevice(&nbsp;D3DADAPTER_DEFAULT,&nbsp;D3DDEVTYPE_HAL,&nbsp;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;&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;&nbsp;&amp;d3dpp,&nbsp;&amp;g_pd3dDevice&nbsp;)&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;E_FAIL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置剔出模式为不剔出任何面(正面和反面)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetRenderState(&nbsp;D3DRS_CULLMODE,&nbsp;D3DCULL_NONE&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">关闭光照处理,&nbsp;默认情况下启用光照处理</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetRenderState(&nbsp;D3DRS_LIGHTING,&nbsp;FALSE&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置观察和投影矩阵</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;SetupViewandProjMatrices();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置视区</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;SetupViewPort();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;S_OK;<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;创建场景图形<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>HRESULT&nbsp;InitGeometry()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创顶点缓冲区</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;FAILED(&nbsp;g_pd3dDevice-&gt;CreateVertexBuffer(&nbsp;50*2*<span style="color: #0000FF; ">sizeof</span>(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;&nbsp;0,&nbsp;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;&nbsp;D3DPOOL_DEFAULT,&nbsp;&amp;g_pVB,&nbsp;NULL&nbsp;)&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;E_FAIL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">填充顶点缓冲区</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;CUSTOMVERTEX*&nbsp;pVertices;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;FAILED(&nbsp;g_pVB-&gt;Lock(&nbsp;0,&nbsp;0,&nbsp;(<span style="color: #0000FF; ">void</span>**)&amp;pVertices,&nbsp;0&nbsp;)&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;E_FAIL;<br />&nbsp;&nbsp;&nbsp;&nbsp;pVertices[0].position&nbsp;=&nbsp;D3DXVECTOR3(0,0,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;pVertices[0].color&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x00000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;pVertices[1].position&nbsp;=&nbsp;D3DXVECTOR3(0,8,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;pVertices[1].color&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x00000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pVB-&gt;Unlock();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;S_OK;<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;释放创建的对象<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>VOID&nbsp;Cleanup()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">释放顶点缓冲区对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;g_pVB&nbsp;!=&nbsp;NULL&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pVB-&gt;Release();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">释放Direct3D设备对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;g_pd3dDevice&nbsp;!=&nbsp;NULL&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;Release();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">释放Direct3D对象</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;g_pD3D&nbsp;!=&nbsp;NULL&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pD3D-&gt;Release();<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;渲染图形&nbsp;<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>VOID&nbsp;Render()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">清空后台缓冲区</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;Clear(&nbsp;0,&nbsp;NULL,&nbsp;D3DCLEAR_TARGET,&nbsp;D3DCOLOR_XRGB(255,&nbsp;255,&nbsp;255),&nbsp;1.0f,&nbsp;0&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">开始在后台缓冲区绘制图形</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;SUCCEEDED(&nbsp;g_pd3dDevice-&gt;BeginScene()&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D3DXMATRIXA16&nbsp;matWorld;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D3DXMatrixIdentity(&amp;matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(D3DTS_WORLD,&amp;matWorld);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetStreamSource(0,g_pVB,0,<span style="color: #0000FF; ">sizeof</span>(CUSTOMVERTEX));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetFVF(D3DFVF_CUSTOMVERTEX);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;DrawPrimitive(D3DPT_LINELIST,0,1);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D3DXMatrixIdentity(&amp;matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RenderTree(4,1,8,&amp;matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;EndScene();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">将在后台缓冲区绘制的图形提交到前台缓冲区显示</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;Present(&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL&nbsp;);<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;消息处理<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>LRESULT&nbsp;WINAPI&nbsp;MsgProc(&nbsp;HWND&nbsp;hWnd,&nbsp;UINT&nbsp;msg,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>(&nbsp;msg&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_DESTROY:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cleanup();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostQuitMessage(&nbsp;0&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;DefWindowProc(&nbsp;hWnd,&nbsp;msg,&nbsp;wParam,&nbsp;lParam&nbsp;);<br />}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Desc:&nbsp;入口函数<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------------------------------------------</span><span style="color: #008000; "><br /></span>INT&nbsp;WINAPI&nbsp;WinMain(&nbsp;HINSTANCE&nbsp;hInst,&nbsp;HINSTANCE,&nbsp;LPSTR,&nbsp;INT&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">注册窗口类</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;WNDCLASSEX&nbsp;wc&nbsp;=&nbsp;{&nbsp;<span style="color: #0000FF; ">sizeof</span>(WNDCLASSEX),&nbsp;CS_CLASSDC&nbsp;,&nbsp;MsgProc,&nbsp;0L,&nbsp;0L,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetModuleHandle(NULL),&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L"ClassName",&nbsp;NULL&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;RegisterClassEx(&nbsp;&amp;wc&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建窗口</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;HWND&nbsp;hWnd&nbsp;=&nbsp;CreateWindow(&nbsp;L"ClassName",&nbsp;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;&nbsp;WS_OVERLAPPEDWINDOW,&nbsp;200,&nbsp;100,&nbsp;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;&nbsp;GetDesktopWindow(),&nbsp;NULL,&nbsp;wc.hInstance,&nbsp;NULL&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_Wnd=hWnd;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">初始化Direct3D</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;SUCCEEDED(&nbsp;InitD3D(&nbsp;hWnd&nbsp;)&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建场景图形</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;SUCCEEDED(&nbsp;InitGeometry()&nbsp;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">显示窗口</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowWindow(&nbsp;hWnd,&nbsp;SW_SHOWDEFAULT&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateWindow(&nbsp;hWnd&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">进入消息循环</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSG&nbsp;msg;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(&nbsp;&amp;msg,&nbsp;<span style="color: #0000FF; ">sizeof</span>(msg)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(&nbsp;msg.message!=WM_QUIT&nbsp;)<br />&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;<span style="color: #0000FF; ">if</span>(&nbsp;PeekMessage(&nbsp;&amp;msg,&nbsp;NULL,&nbsp;0U,&nbsp;0U,&nbsp;PM_REMOVE&nbsp;)&nbsp;)<br />&nbsp;&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;&nbsp;TranslateMessage(&nbsp;&amp;msg&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DispatchMessage(&nbsp;&amp;msg&nbsp;);<br />&nbsp;&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;<span style="color: #0000FF; ">else</span><br />&nbsp;&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;&nbsp;Render();&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">渲染图形</span><span style="color: #008000; "><br /></span>&nbsp;&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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;UnregisterClass(&nbsp;L"ClassName",&nbsp;wc.hInstance&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">第一个参数为迭代次数，第二个参数为当前迭代次数，第三个参数为树干初始长度，第四个参数为迭代的初始世界矩阵</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;RenderTree(<span style="color: #0000FF; ">int</span>&nbsp;i,<span style="color: #0000FF; ">int</span>&nbsp;n,<span style="color: #0000FF; ">float</span>&nbsp;L,D3DXMATRIXA16&nbsp;*&nbsp;matWorld)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(i&lt;=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;;<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;第一个树干迭代<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMATRIXA16&nbsp;MAT1,MAT2,MAT3,matWorld1,matWorldA;<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixIdentity(&amp;MAT1);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixIdentity(&amp;MAT2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixIdentity(&amp;MAT3);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixIdentity(&amp;matWorld1);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixIdentity(&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;MAT1,matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixScaling(&amp;MAT1,1.0/2,1.0/2,1.0/2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixRotationZ(&amp;MAT2,3.14/(4*n));<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixTranslation(&amp;MAT3,0,pow(2.0,n-1)*L*2.0/3,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;MAT1,&amp;MAT2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;matWorld1,&amp;MAT3);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorldA,&amp;matWorld1,matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(D3DTS_WORLD,&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetStreamSource(0,g_pVB,0,<span style="color: #0000FF; ">sizeof</span>(CUSTOMVERTEX));<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetFVF(D3DFVF_CUSTOMVERTEX);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;DrawPrimitive(D3DPT_LINELIST,0,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;RenderTree(i-1,n+1,L/2,&amp;matWorldA);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;第二个树干迭代<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixIdentity(&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixScaling(&amp;MAT1,1.0/2,1.0/2,1.0/2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixRotationZ(&amp;MAT2,3.14/(4*n));<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixTranslation(&amp;MAT3,0,1*L*1.0/3,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;MAT1,&amp;MAT2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;matWorld1,&amp;MAT3);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorldA,&amp;matWorld1,matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(D3DTS_WORLD,&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetStreamSource(0,g_pVB,0,<span style="color: #0000FF; ">sizeof</span>(CUSTOMVERTEX));<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetFVF(D3DFVF_CUSTOMVERTEX);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;DrawPrimitive(D3DPT_LINELIST,0,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;RenderTree(i-1,n+1,L/2,&amp;matWorldA);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;第三个树干迭代<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixIdentity(&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixScaling(&amp;MAT1,1.0/2,1.0/2,1.0/2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixRotationZ(&amp;MAT2,-3.14/(4*n));<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixTranslation(&amp;MAT3,0,pow(2.0,n-1)*L*2.0/3,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;MAT1,&amp;MAT2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;matWorld1,&amp;MAT3);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorldA,&amp;matWorld1,matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(D3DTS_WORLD,&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetStreamSource(0,g_pVB,0,<span style="color: #0000FF; ">sizeof</span>(CUSTOMVERTEX));<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetFVF(D3DFVF_CUSTOMVERTEX);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;DrawPrimitive(D3DPT_LINELIST,0,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;RenderTree(i-1,n+1,L/2,&amp;matWorldA);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;第四个树干迭代<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixIdentity(&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixScaling(&amp;MAT1,1.0/2,1.0/2,1.0/2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixRotationZ(&amp;MAT2,-3.14/(4*n));<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixTranslation(&amp;MAT3,0,1*L*1.0/3,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;MAT1,&amp;MAT2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;matWorld1,&amp;MAT3);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorldA,&amp;matWorld1,matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(D3DTS_WORLD,&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetStreamSource(0,g_pVB,0,<span style="color: #0000FF; ">sizeof</span>(CUSTOMVERTEX));<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetFVF(D3DFVF_CUSTOMVERTEX);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;DrawPrimitive(D3DPT_LINELIST,0,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;RenderTree(i-1,n+1,L/2,&amp;matWorldA);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;第五个树干迭代<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;MAT1,matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixScaling(&amp;MAT1,1.0/2,1.0/2,1.0/2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixRotationX(&amp;MAT2,3.14/(4*n));<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixTranslation(&amp;MAT3,0,pow(2.0,n-1)*L*2.0/3,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;MAT1,&amp;MAT2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;matWorld1,&amp;MAT3);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorldA,&amp;matWorld1,matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(D3DTS_WORLD,&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetStreamSource(0,g_pVB,0,<span style="color: #0000FF; ">sizeof</span>(CUSTOMVERTEX));<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetFVF(D3DFVF_CUSTOMVERTEX);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;DrawPrimitive(D3DPT_LINELIST,0,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;RenderTree(i-1,n+1,L/2,&amp;matWorldA);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">第六个树干迭代<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixIdentity(&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixScaling(&amp;MAT1,1.0/2,1.0/2,1.0/2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixRotationX(&amp;MAT2,3.14/(4*n));<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixTranslation(&amp;MAT3,0,1*L*1.0/3,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;MAT1,&amp;MAT2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;matWorld1,&amp;MAT3);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorldA,&amp;matWorld1,matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(D3DTS_WORLD,&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetStreamSource(0,g_pVB,0,<span style="color: #0000FF; ">sizeof</span>(CUSTOMVERTEX));<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetFVF(D3DFVF_CUSTOMVERTEX);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;DrawPrimitive(D3DPT_LINELIST,0,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;RenderTree(i-1,n+1,L/2,&amp;matWorldA);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">第七个树干迭代<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixIdentity(&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixScaling(&amp;MAT1,1.0/2,1.0/2,1.0/2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixRotationX(&amp;MAT2,-3.14/(4*n));<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixTranslation(&amp;MAT3,0,pow(2.0,n-1)*L*2.0/3,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;MAT1,&amp;MAT2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorld1,&amp;matWorld1,&amp;MAT3);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixMultiply(&amp;matWorldA,&amp;matWorld1,matWorld);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(D3DTS_WORLD,&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetStreamSource(0,g_pVB,0,<span style="color: #0000FF; ">sizeof</span>(CUSTOMVERTEX));<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetFVF(D3DFVF_CUSTOMVERTEX);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;DrawPrimitive(D3DPT_LINELIST,0,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;RenderTree(i-1,n+1,L/2,&amp;matWorldA);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">第八个树干迭代<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixIdentity(&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixScaling(&amp;MAT1,1.0/2,1.0/2,1.0/2);<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixRotationX(&amp;MAT2,-3.14/(4*n));<br />&nbsp;&nbsp;&nbsp;&nbsp;::D3DXMatrixTranslation(&amp;MAT3,0,1*L*1.0/3,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetTransform(D3DTS_WORLD,&amp;matWorldA);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetStreamSource(0,g_pVB,0,<span style="color: #0000FF; ">sizeof</span>(CUSTOMVERTEX));<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;SetFVF(D3DFVF_CUSTOMVERTEX);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pd3dDevice-&gt;DrawPrimitive(D3DPT_LINELIST,0,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;RenderTree(i-1,n+1,L/2,&amp;matWorldA);<br /><br /><br />}</div><img src ="http://www.cppblog.com/MyCBlog/aggbug/165165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">绿</a> 2012-02-08 17:18 <a href="http://www.cppblog.com/MyCBlog/articles/165165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>顶点类型</title><link>http://www.cppblog.com/MyCBlog/articles/164576.html</link><dc:creator>绿</dc:creator><author>绿</author><pubDate>Fri, 27 Jan 2012 06:51:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/164576.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/164576.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/164576.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/164576.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/164576.html</trackback:ping><description><![CDATA[<strong>DirectX支持6种顶点类型：</strong><br />1，点列：仅仅会出孤立的顶点<br />2，线列：两两分组，分别绘制出线列<br />3，线带：相邻顶点绘制出线段，如v1，v2，v3,；则会在v1-v2,v2-v3绘制。<br />4，三角形：三个一组，分别绘制三角形<br />5，三角形带：程序列出全部顶点，但在两两顶点之间绘制。如，v1，v2，v3，v4，v5；则会在v1-v2-v3；v2-v3-v4；v3-v4-v5之间绘制，但是在绘制的时候，顺序并不是完全&nbsp;&nbsp; 如上顺序，绘制时，应保证所有的三角形都顺序绘制出来。<br />6，三角形扇：除了公用一个顶点之外，所有的三角形和三角形带相似。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">typedef&nbsp;</span><span style="color: #0000FF; ">enum</span><span style="color: #000000; ">&nbsp;D3DPRIMITIVETYPE&nbsp;{<br />&nbsp;&nbsp;D3DPT_POINTLIST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;D3DPT_LINELIST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;D3DPT_LINESTRIP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;D3DPT_TRIANGLELIST&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">4</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;D3DPT_TRIANGLESTRIP&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;D3DPT_TRIANGLEFAN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">6</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;D3DPT_FORCE_DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x7fffffff</span><span style="color: #000000; ">&nbsp;<br />}&nbsp;D3DPRIMITIVETYPE,&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000;">LPD3DPRIMITIVETYPE;<br /></span></div>具体请看：<div>http://www.cnblogs.com/lancidie/archive/2010/09/24/1833953.html</div><br /><img src ="http://www.cppblog.com/MyCBlog/aggbug/164576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">绿</a> 2012-01-27 14:51 <a href="http://www.cppblog.com/MyCBlog/articles/164576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DirectX3D 概述</title><link>http://www.cppblog.com/MyCBlog/articles/164574.html</link><dc:creator>绿</dc:creator><author>绿</author><pubDate>Fri, 27 Jan 2012 05:04:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/164574.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/164574.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/164574.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/164574.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/164574.html</trackback:ping><description><![CDATA[<div style="layout-grid:15.6000pt; "><p style="margin-left: 21.25pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-top: 0pt;"><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">1.&nbsp;</span><span style="font-size: 10.5pt; font-family: '宋体';">DirectX&nbsp;3D与应用程序，硬件之间的关系</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; ">&nbsp;&nbsp; 最高层是应用程序，随后是DirectX，接着是HAL（硬件仿真层），再有事硬件设备<br /></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">2.&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">REF设备：通用硬件不支持某些功能时，可以用REF类型代替</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">3.&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">D3DDEVTYPE设备类型：有两种处理方式，硬件处理和软件处理。</span></p></div><img src ="http://www.cppblog.com/MyCBlog/aggbug/164574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">绿</a> 2012-01-27 13:04 <a href="http://www.cppblog.com/MyCBlog/articles/164574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>光源类型</title><link>http://www.cppblog.com/MyCBlog/articles/164566.html</link><dc:creator>绿</dc:creator><author>绿</author><pubDate>Thu, 26 Jan 2012 19:08:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/164566.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/164566.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/164566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/164566.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/164566.html</trackback:ping><description><![CDATA[<div style="layout-grid:15.6000pt; "><div style="layout-grid:15.6000pt; "><p style="margin-bottom:0pt; margin-top:0pt; "><span style=" font-weight:bold; font-size:14.0000pt; font-family:'宋体'; ">DirectX模拟光源类型中有三种：</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:14.0000pt; font-family:'Times New Roman'; ">1.&nbsp;</span><span style=" font-size:14.0000pt; font-family:'宋体'; ">电光源：具有位置和颜色属性，没有方向，能够摄像任意方向</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:14.0000pt; font-family:'Times New Roman'; ">2.&nbsp;</span><span style=" font-size:14.0000pt; font-family:'宋体'; ">方向光源：具有方向，光强，颜色，没有光源位置，不会衰减，不需要考虑照射范围。</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:14.0000pt; font-family:'Times New Roman'; ">3.&nbsp;</span><span style=" font-size:14.0000pt; font-family:'宋体'; ">聚灯光：有颜色，位置，方向。</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style=" font-weight:bold; font-size:14.0000pt; font-family:'宋体'; ">DirectX模拟的光照类型有四种：</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:14.0000pt; font-family:'Times New Roman'; ">1.&nbsp;</span><span style=" font-size:14.0000pt; font-family:'宋体'; ">环境光</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:14.0000pt; font-family:'Times New Roman'; ">2.&nbsp;</span><span style=" font-size:14.0000pt; font-family:'宋体'; ">镜面反射</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:14.0000pt; font-family:'Times New Roman'; ">3.&nbsp;</span><span style=" font-size:14.0000pt; font-family:'宋体'; ">漫发射</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:14.0000pt; font-family:'Times New Roman'; ">4.&nbsp;</span><span style=" font-size:14.0000pt; font-family:'宋体'; ">自发射光</span></p></div></div><img src ="http://www.cppblog.com/MyCBlog/aggbug/164566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">绿</a> 2012-01-27 03:08 <a href="http://www.cppblog.com/MyCBlog/articles/164566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>粒子系统</title><link>http://www.cppblog.com/MyCBlog/articles/164342.html</link><dc:creator>绿</dc:creator><author>绿</author><pubDate>Wed, 18 Jan 2012 10:18:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/164342.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/164342.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/164342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/164342.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/164342.html</trackback:ping><description><![CDATA[<div style="layout-grid:  15.6pt none" class="Section0">
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 21.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">1.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">粒子系统的基本概念</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt; margin-left: 21pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">粒子系统具有构造模糊形状物体的计算模型的方法，这类物体包括一些自然界常见的现象，他们没有固定的形状，没有规则的集合体，外观随着时间发生不确定的变化。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt; margin-left: 21pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">粒子系统要解决的问题是&#8220;粒子&#8221;存在和运动所遵循的规则以及所受的作用，对粒子的作用可以分为两大类：</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">1)&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">宏观作用：粒子作为一个整体所要遵循的规则。可以认为这类规则就是物体所受作用均匀分布到每一个粒子上。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">2)&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">微观作用：对物体而言，这种作用是不存在的。但是对单个粒子就应该考虑这类作用。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 21.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">2.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">基本原理</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 42.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">1)&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">粒子系统主要有以下几个部分组成：</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">a.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">物质粒子组成假设。粒子系统中，把运动模糊的物体看做有限的具有确定属性的流动粒子所组成的集合，这些粒子以连续离散的方式充满他的空间，并不断的运动。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">b.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">粒子的独立性假设。粒子系统中各个粒子不予其他物体相交，并且是不可穿透的。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">c.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">粒子的属性假设。如质量，空间位置，外观（颜色，亮度），生存（生命期），运动（速度，加速度）。其汇总的速度，位置，颜色，亮度可以随着时间不短发生变化。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">d.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">粒子的生命机制：具有生命周期，在一定的时间周期内，粒子经过新生、活动和消亡<font face="Times New Roman">3</font><font face="宋体">个基本生命历程。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">e.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">粒子的运动机制。粒子在存活周期期间始终是按照一定的方式运动的。</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">f.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">粒子绘制算法</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 42.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">2)&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">粒子系统主要有以下几个部分组成：</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt; margin-left: 42pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">粒子具有一定的生命周期，在每一时刻只有其中的一部分是&#8220;生存&#8221;的，在绝大多数建模和粒子系统中要引进&#8220;随机处理方法&#8221;，在计算每一帧时，要进行一下的处理步骤：</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">a.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">在这一帧中，要诞生新的粒子</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">b.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">为每一个诞生的粒子分配初始特性，如颜色，位置，初始速度和大小。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">c.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">遍历粒子，将所有的到达生命周期的粒子除去</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">d.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">对保留的粒子根据运动规则进行运动计算，并对其他参数根据控制原理进行更新。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">e.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">渲染粒子。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 42.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">3)&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">粒子的产生： </span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">a.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">粒子产生的空间</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">b.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">粒子产生的时间以及数量</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">c.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">粒子的数量，图形真实度，以及系统实时性能之间的关系示意图</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 42.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">4)&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">粒子的属性</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">a.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">空间位置属性</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">b.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">外观属性</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">c.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">运动属性</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 42.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">5)&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">粒子的运动状态</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 42.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">6)&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">粒子的消亡</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 42.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">7)&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">粒子的渲染</span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">a.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">点粒子的绘制</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">b.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">面粒子的绘制为了显示更多的空间信息</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">c.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">线性粒子的绘制</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: -21.25pt; margin-bottom: 0pt; margin-left: 63.25pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">d.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">随即形状粒子的绘制</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p></div><!--EndFragment--><img src ="http://www.cppblog.com/MyCBlog/aggbug/164342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">绿</a> 2012-01-18 18:18 <a href="http://www.cppblog.com/MyCBlog/articles/164342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>着色方式</title><link>http://www.cppblog.com/MyCBlog/articles/164257.html</link><dc:creator>绿</dc:creator><author>绿</author><pubDate>Mon, 16 Jan 2012 08:08:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/164257.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/164257.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/164257.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/164257.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/164257.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;绝大多数的3D物体是由多边形（polygon）所构成的，它们都必须经过某些着色处理的手续，才不会以线结构（wireframe）的方式显示。这些着色处理方式有差到好，依次主要分为FlatShading、GouraudShading、PhoneShading、ScanlineRenderer、Ray-Traced。 
<ol><li><strong>FlatShading（平面着色）</strong> 
<p>也叫做&#8220;恒量着色&#8221;，平面着色是最简单也是最快速的着色方法，每个多边形都会被指定一个单一且没有变化的颜色。这种方法虽然会产生出不真实的效果，不过它非常适用于快速成像及其它要求速度重于细致度的场合，如：生成预览动画。</p></li><li><strong>GouraudShading（高洛德着色/高氏着色）</strong> 
<p>这种着色的效果要好得多，也是在游戏中使用最广泛的一种着色方式。它可对3D模型各顶点的颜色进行平滑、融合处理，将每个多边形上的每个点赋以一组色调值，同时将多边形着上较为顺滑的渐变色，使其外观具有更强烈的实时感和立体动感，不过其着色速度比平面着色慢得多。</p></li><li><strong>PhoneShading（补色着色）</strong> 
<p>首先，找出每个多边形顶点，然后根据内插值的方法，算出顶点间算连线上像素的光影值，接着再次运用线性的插值处理，算出其他所有像素高氏着色在取样计算时，只顾及每个多边形顶点的光影效果，而补色着色却会把所有的点都计算进去。</p></li><li><strong>ScanlineRenderer（扫描线着色）</strong> 
<p>这是3ds Max的默认渲染方式，它是一种基于一组连续水平线的着色方式，由于它渲染速度较快，一般被使用在预览场景中。</p></li><li><strong>Ray-Traced（光线跟踪着色）</strong> 
<p>光线跟踪是真实按照物理照射光线的入射路径投射在物体上，最终反射回摄象机所得到每一个像素的真实值的着色算法，由于它计算精确，所得到的图象效果优质，因此制作CG一定要使用该选项。</p></li><li><strong>Radiosity（辐射着色）</strong> 
<p>这是一种类似光线跟踪的特效。它通过制定在场景中光线的来源并且根据物体的位置和反射情况来计算从观察者到光源的整个路径上的光影效果。在这条线路上，光线受到不同物体的相互影响，如：反射、吸收、折射等情况都被计算在内。</p></li></ol><img src ="http://www.cppblog.com/MyCBlog/aggbug/164257.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">绿</a> 2012-01-16 16:08 <a href="http://www.cppblog.com/MyCBlog/articles/164257.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>