﻿<?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++博客-火焰傀偶的挣扎旅程-随笔分类-HGE</title><link>http://www.cppblog.com/WhiteDummy/category/19513.html</link><description>纯爷们的一生就是不停地燃烧，keep on burning soul！！</description><language>zh-cn</language><lastBuildDate>Fri, 14 Dec 2012 16:14:17 GMT</lastBuildDate><pubDate>Fri, 14 Dec 2012 16:14:17 GMT</pubDate><ttl>60</ttl><item><title>在hge中实现自己的滚动条</title><link>http://www.cppblog.com/WhiteDummy/archive/2012/12/14/196256.html</link><dc:creator>WhiteDummy</dc:creator><author>WhiteDummy</author><pubDate>Fri, 14 Dec 2012 09:22:00 GMT</pubDate><guid>http://www.cppblog.com/WhiteDummy/archive/2012/12/14/196256.html</guid><wfw:comment>http://www.cppblog.com/WhiteDummy/comments/196256.html</wfw:comment><comments>http://www.cppblog.com/WhiteDummy/archive/2012/12/14/196256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/WhiteDummy/comments/commentRss/196256.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/WhiteDummy/services/trackbacks/196256.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 关于hge gui的资料似乎很少，刚好我又想用到hge的滚动条，于是就来就随便扯一下hge的滚动条。让我们先来分析一下它的实现代码吧。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/***以下为声明**&nbsp;hgeGUISlider*/BARR...&nbsp;&nbsp;<a href='http://www.cppblog.com/WhiteDummy/archive/2012/12/14/196256.html'>阅读全文</a><img src ="http://www.cppblog.com/WhiteDummy/aggbug/196256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/WhiteDummy/" target="_blank">WhiteDummy</a> 2012-12-14 17:22 <a href="http://www.cppblog.com/WhiteDummy/archive/2012/12/14/196256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在hge中实现对静态图片的动态模糊 （box blur版）</title><link>http://www.cppblog.com/WhiteDummy/archive/2012/12/13/196215.html</link><dc:creator>WhiteDummy</dc:creator><author>WhiteDummy</author><pubDate>Thu, 13 Dec 2012 08:24:00 GMT</pubDate><guid>http://www.cppblog.com/WhiteDummy/archive/2012/12/13/196215.html</guid><wfw:comment>http://www.cppblog.com/WhiteDummy/comments/196215.html</wfw:comment><comments>http://www.cppblog.com/WhiteDummy/archive/2012/12/13/196215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/WhiteDummy/comments/commentRss/196215.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/WhiteDummy/services/trackbacks/196215.html</trackback:ping><description><![CDATA[<div><span style="color: #000000; "></span><br />http://blog.csdn.net/jia20003/article/details/7201069</div><br />在该前辈的博客处找了段java的均值模糊（box blur）的代码，我把它换成hge的了，效率还可以，不过应该比不上前一篇的方法。但box blur是比较正统的模糊算法，不像前一篇的那般&#8220;邪道&#8221;，他直接处理像素，其思想方法类似高斯算法，实现上又比高斯算法要简单，虽然效果上比高斯差，但也值得了。<br /><br />这里我简单讲一下均值模糊的步骤，当然各位也可以看那位前辈的博客：）<br /><br />1.输入一个半径r，定义模糊的方向，r越大，则越模糊（虽然说是半径r，但是模糊的方向只取一条线，或两条线，例如横，竖，横与竖）。<br /><br />2.根据1建立一个索引，其实就是空间换时间，提前算好了r范围内所有可能出现的颜色数值之和的均值，这是个固定的值，所以可以一开始就建）。<br /><br />3.计算第一个r区域的各个像素值之和（r，g，b，a分别算）<br /><br />4.开始遍历想要输出的纹理像素（注意原纹理矩阵依然保留），每行第一个像素，直接给他赋予2中的均值，往后每遍历一个像素，3计算的像素值之和都加上x+r +1和 x - r 之间的差（或者是y+r+1和y-r-1的差），然后再次赋予新的均值。<br /><br />代码（使用横方向模糊，每摁一下L键开始模糊，半径为10）：<br /><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 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; "><br /></span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />**<br />**&nbsp;motion&nbsp;blur&nbsp;demo<br />**&nbsp;based&nbsp;off&nbsp;of&nbsp;tutorial4..<br /></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;<br />&nbsp;<br />#include&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">..\..\include\hge.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">..\..\include\hgesprite.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;<br />&nbsp;<br />HGE&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">hge</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;<br />&nbsp;<br />hgeSprite</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;spt1;<br /><br /></span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&nbsp;x</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0.0f</span><span style="color: #000000; ">,&nbsp;y</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0.0f</span><span style="color: #000000; ">;<br /><br /><br />HTEXTURE&nbsp;boxblur(&nbsp;HTEXTURE&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;radius&nbsp;)&nbsp;;<br /><br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;FrameFunc()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Input_KeyDown(HGEK_L))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTEXTURE&nbsp;dumptex&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;spt1</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">GetTexture();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTEXTURE&nbsp;tex2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;boxblur(dumptex,</span><span style="color: #000000; ">10</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spt1</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">SetTexture(tex2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_Free(dumptex);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Gfx_BeginScene();<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Gfx_Clear(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;spt1</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Render(x,&nbsp;y);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Gfx_EndScene();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />}<br />&nbsp;<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;WINAPI&nbsp;WinMain(HINSTANCE,&nbsp;HINSTANCE,&nbsp;LPSTR,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;hge&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;hgeCreate(HGE_VERSION);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_FRAMEFUNC,&nbsp;FrameFunc);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_TITLE,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">HGE&nbsp;RealTime&nbsp;Blur&nbsp;Demo</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_FPS,&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_WINDOWED,&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_SCREENWIDTH,&nbsp;</span><span style="color: #000000; ">1024</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_SCREENHEIGHT,&nbsp;</span><span style="color: #000000; ">768</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_SCREENBPP,&nbsp;</span><span style="color: #000000; ">32</span><span style="color: #000000; ">);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_Initiate())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTEXTURE&nbsp;tex</span><span style="color: #000000; ">=</span><span style="color: #000000; ">hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_Load(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">alley_normal.jpg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">tex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Can't&nbsp;load&nbsp;the&nbsp;picture&nbsp;file</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Error</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;MB_OK&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;MB_ICONERROR&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;MB_SYSTEMMODAL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_Shutdown();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Release();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spt1</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;hgeSprite(tex,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">1024</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">768</span><span style="color: #000000; ">);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">这是最后会显示的精灵</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_Start();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_Free(spt1</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">GetTexture());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;spt1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Clean&nbsp;up&nbsp;and&nbsp;shutdown</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_Shutdown();<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Release();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /><br />HTEXTURE&nbsp;boxblur(&nbsp;HTEXTURE&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;radius&nbsp;)&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;width,&nbsp;height;<br />&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_GetWidth(</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;height&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_GetHeight(</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;HTEXTURE&nbsp;</span><span style="color: #0000FF; ">out</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_Create(width,&nbsp;height);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;widthMinus1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;width</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;tableSize&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">radius</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;divide&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">unsigned int</span><span style="color: #000000; ">[</span><span style="color: #000000; ">256</span><span style="color: #000000; ">*</span><span style="color: #000000; ">tableSize];&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000;">&nbsp;the&nbsp;value&nbsp;scope&nbsp;will&nbsp;be&nbsp;0&nbsp;to&nbsp;255,&nbsp;and&nbsp;number&nbsp;of&nbsp;0&nbsp;is&nbsp;table&nbsp;size&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;will&nbsp;get&nbsp;means&nbsp;from&nbsp;index&nbsp;not&nbsp;calculate&nbsp;result&nbsp;again&nbsp;since&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;color&nbsp;value&nbsp;must&nbsp;be&nbsp;&nbsp;between&nbsp;0&nbsp;and&nbsp;255.&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">256</span><span style="color: #000000; ">*</span><span style="color: #000000; ">tableSize;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;divide[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tableSize;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;inIndex&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;in_&nbsp;&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_Lock(</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;out_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_Lock(</span><span style="color: #0000FF; ">out</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;y&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;height;&nbsp;y</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;outIndex&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;y;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ta&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;tr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;tg&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;tb&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;ARGB&nbsp;-&gt;&nbsp;prepare&nbsp;for&nbsp;the&nbsp;alpha,&nbsp;red,&nbsp;green,&nbsp;blue&nbsp;color&nbsp;value.&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">radius;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;radius;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;clamp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;:&nbsp;(i&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;(width</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">))&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;(width</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;:&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;rgb&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;in_[inIndex&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;clamp];&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;read&nbsp;input&nbsp;pixel&nbsp;data&nbsp;here.&nbsp;table&nbsp;size&nbsp;data.&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ta&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;(rgb&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">24</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tr&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;(rgb&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">16</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tg&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;(rgb&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">8</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tb&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;rgb&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;x&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;width;&nbsp;x</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;get&nbsp;output&nbsp;pixel&nbsp;data.&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out_[&nbsp;outIndex</span><span style="color: #000000; ">*</span><span style="color: #000000; ">width&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;x&nbsp;]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(divide[ta]&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">24</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;(divide[tr]&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">16</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;(divide[tg]&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">8</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;divide[tb];&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;calculate&nbsp;the&nbsp;output&nbsp;data.&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;x</span><span style="color: #000000; ">+</span><span style="color: #000000; ">radius</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(&nbsp;i1&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;widthMinus1&nbsp;)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;widthMinus1;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;x</span><span style="color: #000000; ">-</span><span style="color: #000000; ">radius;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(&nbsp;i2&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;rgb1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;in_[inIndex</span><span style="color: #000000; ">+</span><span style="color: #000000; ">i1];&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;rgb2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;in_[inIndex</span><span style="color: #000000; ">+</span><span style="color: #000000; ">i2];&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ta&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;((rgb1&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">24</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff</span><span style="color: #000000; ">)</span><span style="color: #000000; ">-</span><span style="color: #000000; ">((rgb2&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">24</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff</span><span style="color: #000000; ">);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tr&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;((rgb1&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff0000</span><span style="color: #000000; ">)</span><span style="color: #000000; ">-</span><span style="color: #000000; ">(rgb2&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff0000</span><span style="color: #000000; ">))&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">16</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tg&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;((rgb1&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff00</span><span style="color: #000000; ">)</span><span style="color: #000000; ">-</span><span style="color: #000000; ">(rgb2&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff00</span><span style="color: #000000; ">))&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">8</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tb&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;(rgb1&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff</span><span style="color: #000000; ">)</span><span style="color: #000000; ">-</span><span style="color: #000000; ">(rgb2&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xff</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inIndex&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;width;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;next&nbsp;(i+&nbsp;column&nbsp;number&nbsp;*&nbsp;n,&nbsp;n=1.n-1)&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_Unlock(</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_Unlock(</span><span style="color: #0000FF; ">out</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]&nbsp;divide;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">out</span><span style="color: #000000; ">;<br />}<br /><br /></span></div><br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/whitedummy/test2.JPG" height="761" width="1012" /><img src ="http://www.cppblog.com/WhiteDummy/aggbug/196215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/WhiteDummy/" target="_blank">WhiteDummy</a> 2012-12-13 16:24 <a href="http://www.cppblog.com/WhiteDummy/archive/2012/12/13/196215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在hge中实现对静态图片的动态模糊</title><link>http://www.cppblog.com/WhiteDummy/archive/2012/12/13/196205.html</link><dc:creator>WhiteDummy</dc:creator><author>WhiteDummy</author><pubDate>Thu, 13 Dec 2012 03:36:00 GMT</pubDate><guid>http://www.cppblog.com/WhiteDummy/archive/2012/12/13/196205.html</guid><wfw:comment>http://www.cppblog.com/WhiteDummy/comments/196205.html</wfw:comment><comments>http://www.cppblog.com/WhiteDummy/archive/2012/12/13/196205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/WhiteDummy/comments/commentRss/196205.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/WhiteDummy/services/trackbacks/196205.html</trackback:ping><description><![CDATA[<br />可以用来模拟那种刚睡醒然后睁开眼睛的场景效果。<br /><br />实现方法很简单，就是几张坐标有点不一致的alpha图片慢慢靠在一起，并且同时让alpha恢复正常。虽说是静态图片的模糊，但这方法其实和<div>和运动模糊（motion blur）极其类似。</div><br />这里我使用BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE的混合模式，该模式下的纹理叠加在一起会显得亮，在这里，顺便复习一下BLEND几个参数的含义，以下内容转自互联网：<br /><br /><div> <p>1）BLEND_COLORADD</p> 表示顶点的颜色与纹理的纹元（texel）颜色相加，这使得纹理变亮，可见顶点颜色为 0x00000000，将不造成任何影响。<br /><br /><div><p>2）BLEND_COLORMUL</p> <p>表示顶点的颜色与纹理的纹元颜色相乘，这使得纹理变暗，可见顶点颜色为 0xFFFFFFFF 将不造成任何影响。</p><br /><div><p>3）BLEND_ALPHABLEND</p> 渲染时，将对象的像素颜色（而非顶点的颜色）与当前屏幕的对应像素颜色进行 alpha 混合。</div></div></div><div><p>4）BLEND_ALPHAADD</p> <p>渲染时，将对象的像素颜色与当前屏幕的对应像素颜色相加，结果是有了变亮的效果。</p><p><br /></p><div>5）BLEND_ZWRITE</div><div>写像素的 Z-order 到 Z-buffer<br /><br /><p>6）BLEND_NOZWRITE</p> <p>渲染时，不写像素的 Z-order 到 Z-buffer</p></div><br /><p>&nbsp;</p></div>以上1和2,3和4,5和6都是互斥的，并且必须选择一个的，默认情况下应该是2,3,6<br /><br /><br />话不多了，上代码吧，格式啊，取名什么的都比较挫，嘛，反正很短，当demo随便看看就好。如果要自己编译运行需要准备一张图片和设置好自己的图片路径哦（修改在Texture_Load处的参数）<br /><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"><span style="color: #000000; "><br /></span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />**&nbsp;motion&nbsp;blur&nbsp;demo<br /><div>** based off of hge tutorial..</div></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;</span><span style="color: #000000; "><br />&nbsp;<br />#include&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">..\..\include\hge.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">..\..\include\hgesprite.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "> <br />&nbsp;<br />HGE&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">hge</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;<br />&nbsp;<br />hgeSprite</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spt1;<br />hgeSprite</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spt2;<br /><br />HTEXTURE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tex;<br /><br /></span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&nbsp;x</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0.0f</span><span style="color: #000000; ">,&nbsp;y</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0.0f</span><span style="color: #000000; ">;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&nbsp;x2</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0.0f</span><span style="color: #000000; ">,&nbsp;y2</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0.0f</span><span style="color: #000000; ">;<br /></span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&nbsp;totaltime&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&nbsp;endtime&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">0.5f</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;offset&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">10</span><span style="color: #000000; ">;<br />&nbsp;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;FrameFunc()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&nbsp;dt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Timer_GetDelta();<br />&nbsp;&nbsp;&nbsp;&nbsp;totaltime&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;dt;<br /></span><span style="color: #000000; ">&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(totaltime&nbsp;</span><span style="color: #000000; ">&gt;</span>&nbsp;<span style="color: #000000; ">0.1f</span>&nbsp;<span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;offset&nbsp;</span><span style="color: #000000; ">!=</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset&nbsp;</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;totaltime&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(endtime&nbsp;</span><span style="color: #000000; ">&gt;</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spt2</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">SetColor(&nbsp;ARGB(&nbsp;endtime</span><span style="color: #000000; ">/</span><span style="color: #000000; ">0.5f</span><span style="color: #000000; ">*</span><span style="color: #000000; ">((</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">)</span><span style="color: #000000; ">128</span><span style="color: #000000; ">),&nbsp;</span><span style="color: #000000; ">255</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">&nbsp;)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endtime&nbsp;</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">&nbsp;dt;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spt2</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">SetColor(ARGB(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">));//alpha为0时，图片不显示，就看不到发光效果了，实际程序运用时，应该释放掉该精灵更好。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Gfx_BeginScene();<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Gfx_Clear(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;spt1</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Render(x,&nbsp;y);<br />&nbsp;&nbsp;&nbsp;&nbsp;spt2</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Render(x2</span><span style="color: #000000; ">-</span><span style="color: #000000; ">offset,&nbsp;y2);<br />&nbsp;&nbsp;&nbsp;&nbsp;spt2</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Render(x2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">offset,&nbsp;y2);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(offset&nbsp;</span><span style="color: #000000; ">&gt;</span>&nbsp;<span style="color: #000000; ">2</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp; <span style="color: #000000; ">spt2</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Render(x2</span><span style="color: #000000; ">-</span><span style="color: #000000; ">(offset</span><span style="color: #000000; ">-</span><span style="color: #000000; ">2</span><span style="color: #000000; ">),&nbsp;y2);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp; <span style="color: #000000; ">spt2</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Render(x2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">(offset</span><span style="color: #000000; ">-</span><span style="color: #000000; ">2</span><span style="color: #000000; ">),&nbsp;y2);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Gfx_EndScene();<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />}<br />&nbsp;<br />&nbsp;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;WINAPI&nbsp;WinMain(HINSTANCE,&nbsp;HINSTANCE,&nbsp;LPSTR,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;hge&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;hgeCreate(HGE_VERSION);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_FRAMEFUNC,&nbsp;FrameFunc);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_TITLE,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">HGE&nbsp;RealTime&nbsp;Blur&nbsp;Demo</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_FPS,&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_WINDOWED,&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_SCREENWIDTH,&nbsp;</span><span style="color: #000000; ">1024</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_SCREENHEIGHT,&nbsp;</span><span style="color: #000000; ">768</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_SetState(HGE_SCREENBPP,&nbsp;</span><span style="color: #000000; ">32</span><span style="color: #000000; ">);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_Initiate())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tex</span><span style="color: #000000; ">=</span><span style="color: #000000; ">hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_Load(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">alley_normal.jpg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">tex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Can't&nbsp;load the picture file</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Error</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;MB_OK&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;MB_ICONERROR&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;MB_SYSTEMMODAL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_Shutdown();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Release();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spt1</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;hgeSprite(tex,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">1024</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">768</span><span style="color: #000000; ">);//这是最后会显示的精灵<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spt2</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;hgeSprite(tex,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">1024</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">768</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spt2</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">SetBlendMode(BLEND_COLORMUL&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;BLEND_ALPHAADD&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;BLEND_NOZWRITE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spt2</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">SetColor(ARGB(</span><span style="color: #000000; ">128</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_Start();<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Delete&nbsp;created&nbsp;objects&nbsp;and&nbsp;free&nbsp;loaded&nbsp;resources</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;spt1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;spt2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Texture_Free(tex);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Clean&nbsp;up&nbsp;and&nbsp;shutdown</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">System_Shutdown();<br />&nbsp;&nbsp;&nbsp;&nbsp;hge</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">Release();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}</span></div><br />我的效果图：<br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/whitedummy/test.JPG" /><img src ="http://www.cppblog.com/WhiteDummy/aggbug/196205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/WhiteDummy/" target="_blank">WhiteDummy</a> 2012-12-13 11:36 <a href="http://www.cppblog.com/WhiteDummy/archive/2012/12/13/196205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>