<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Popple</title>
	<atom:link href="http://i-popple.com/wordpress/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://i-popple.com/wordpress</link>
	<description>molehill 跟我发生了关系..</description>
	<lastBuildDate>Wed, 18 Apr 2012 06:18:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>新引擎代号Mongoose2D</title>
		<link>http://i-popple.com/wordpress/?p=108</link>
		<comments>http://i-popple.com/wordpress/?p=108#comments</comments>
		<pubDate>Wed, 18 Apr 2012 06:16:41 +0000</pubDate>
		<dc:creator>Popple</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://i-popple.com/wordpress/?p=108</guid>
		<description><![CDATA[龙年秀龙..目前效率远超前两个版本。新引擎将和gene合作开发.yeah..]]></description>
			<content:encoded><![CDATA[<p>龙年秀龙..目前效率远超前两个版本。新引擎将和gene合作开发.yeah..<br />
 <a onclick='ok("divswfobj_0")'>swf</a>
   <div id="divswfobj_0">
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_0" width="640" height="400">
      <param name="movie" value="http://i-popple.com/wordpress/wp-content/uploads/2012/04/MongooseTest.swf" />
      <param name="allowfullscreen" value="true" />
      <param name="wmode" value="direct" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://i-popple.com/wordpress/wp-content/uploads/2012/04/MongooseTest.swf" width="640" height="400" allowfullscreen="true" wmode="direct">
      <!--<![endif]-->
        
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object></div>
</p>
]]></content:encoded>
			<wfw:commentRss>http://i-popple.com/wordpress/?feed=rss2&#038;p=108</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用正则表达式实现搓招</title>
		<link>http://i-popple.com/wordpress/?p=104</link>
		<comments>http://i-popple.com/wordpress/?p=104#comments</comments>
		<pubDate>Tue, 27 Dec 2011 02:47:14 +0000</pubDate>
		<dc:creator>Popple</dc:creator>
				<category><![CDATA[游戏开发]]></category>
		<category><![CDATA[搓招]]></category>
		<category><![CDATA[格斗]]></category>

		<guid isPermaLink="false">http://i-popple.com/wordpress/?p=104</guid>
		<description><![CDATA[这里分享用正则表达式实现搓招逻辑，我们玩街机的时候经常需要设置键盘，以及更改搓招按键。所谓搓招就是设置一个按键输入的序列类似于 【前+下+前：A】 就是我们常用的升龙拳的撮招序列。撮招逻辑有很多种实现方式，正则表达式方式个人感觉是比较灵活的，通俗的。 设计大概如下 我们把所有的按键输入看作是一个stream,然后从stream中去匹配所有撮招规则，一旦有符合的招数产生时便抛出事件，清理stream,继续侦听。对象设计上，我们考虑将这个功能封装成一个可编程的键盘。就像现实中，我们购买的多功能键盘一样可以自己定义功能，这里我们要定义的是一个带撮招功能的键盘。 在创造这个stream之前需要将一些信息单位化。比如撮招中的间隔时间，我们可以把10ms看作是一个字符用*代替，各种按键也转换为字符。这样你的输入流就会变成这样的字符串“F39★★F40★F37★★F40★F37★F38★★★★F40F39★F37★★★F83F68F70”现在，我们便可以用正则表达式来找寻我们需要的招式了。 例如 “right(★){0,3}down(★){0,3}right(★){0,3}attack” 这样一招就表示按键右按下0-3个延迟单位再按键下延迟0-3个单位再按键右0-3个单位再按键attack，匹配的时候需要将up,down,attack转化成按键定义例如F12,F23再进行匹配。 按键定义这样是为了避免字符前后冲突。 right,down是方便用户编写动作的表达。这样，便可以实现正则表达式轻松替换技能配置，和按键间隔时间调整。是不是非常方便？]]></description>
			<content:encoded><![CDATA[<p>这里分享用正则表达式实现搓招逻辑，我们玩街机的时候经常需要设置键盘，以及更改搓招按键。所谓搓招就是设置一个按键输入的序列类似于 【前+下+前：A】 就是我们常用的升龙拳的撮招序列。撮招逻辑有很多种实现方式，正则表达式方式个人感觉是比较灵活的，通俗的。</p>
<p>设计大概如下<br />
我们把所有的按键输入看作是一个stream,然后从stream中去匹配所有撮招规则，一旦有符合的招数产生时便抛出事件，清理stream,继续侦听。对象设计上，我们考虑将这个功能封装成一个可编程的键盘。就像现实中，我们购买的多功能键盘一样可以自己定义功能，这里我们要定义的是一个带撮招功能的键盘。</p>
<p>在创造这个stream之前需要将一些信息单位化。比如撮招中的间隔时间，我们可以把10ms看作是一个字符用*代替，各种按键也转换为字符。这样你的输入流就会变成这样的字符串“F39★★F40★F37★★F40★F37★F38★★★★F40F39★F37★★★F83F68F70”现在，我们便可以用正则表达式来找寻我们需要的招式了。</p>
<p>例如 “right(★){0,3}down(★){0,3}right(★){0,3}attack” 这样一招就表示按键右按下0-3个延迟单位再按键下延迟0-3个单位再按键右0-3个单位再按键attack，匹配的时候需要将up,down,attack转化成按键定义例如F12,F23再进行匹配。 按键定义这样是为了避免字符前后冲突。 right,down是方便用户编写动作的表达。这样，便可以实现正则表达式轻松替换技能配置，和按键间隔时间调整。是不是非常方便？</p>
]]></content:encoded>
			<wfw:commentRss>http://i-popple.com/wordpress/?feed=rss2&#038;p=104</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在molehill2D引擎中利用显卡做拣选</title>
		<link>http://i-popple.com/wordpress/?p=78</link>
		<comments>http://i-popple.com/wordpress/?p=78#comments</comments>
		<pubDate>Fri, 02 Dec 2011 02:33:42 +0000</pubDate>
		<dc:creator>Popple</dc:creator>
				<category><![CDATA[molehill]]></category>
		<category><![CDATA[PP2D]]></category>
		<category><![CDATA[2d引擎]]></category>
		<category><![CDATA[拣选]]></category>

		<guid isPermaLink="false">http://i-popple.com/wordpress/?p=78</guid>
		<description><![CDATA[最近一直在研究更好的拣选方法。其实，是因为想绕开射线法。总感觉射线法检测流程太繁琐，懒得去弄。之前跟同事@donaldwu在聊到这个拣选的时候他给了我一个很好的思路，即让显卡来帮助拣选。之前有看过Away3D做过这个事情，但是它只是针对单个模型的拣选。这里要分享的是直接得到画面的拣选结果，即所点即所得。重申一下，为什么2D引擎要做设个事情，因为我的2D引擎是支持Z轴的。所以要支持带深度的拣选。 这里的拣选跟之前那篇文章提到的拣选是不一样的，请看完理解。 这个跟屏幕认知过程是一个原理，我们在看到画面的时候已经知道鼠标是否点中了，因为我们知道选中的那个像素是哪个对象的。现在我们要让我们编写的代码也知道这个事实。原理很简单，就是能通过鼠标点中的像素还原对象的引用。 列举一下核心点: Point1:获取鼠标点中的像素，这个可以利用context3D.drawtoBitmap得到当前显卡渲染的结果。 Point2:将能代表交互对象的信息绘制到像素，这里我取的每个交互对象的唯一ID(24位UIN,RGB),如果觉得对象数量不够，可以用ARGB。将这个ID作为颜色绘制到模型颜色中，需要在Shader中做一些处理。 //获取贴图像素 “tex ft1, v0, fs0 \n”+ //做交互对象的alpha计算，因为你的对象本身可能是有设置alpha的 “mul ft1.w,ft1.w,fc0.w\n”+ //判断alpha是否大于0，是返回1，否返回0，fc2.x=0; “slt ft1.w,fc2.x,ft1.w\n”+ //最后ft1的颜色=ft1.w*fc1（fc1就是对象ID） “mul ft1,ft1.w,fc1,0\n”+ //最后输出ID “mov oc ft1&#8243;; Point3: 利用bitmapdata.getPixel(x,y,)获得点中的像素值去map中读取对应的对象。当然，事先需要建立交互对象的map表。 最后来谈谈效率问题 CPU端 核心接口drawToBitmapData基本不耗CPU，但是它耗时间，这时间是CPU->显存->主板通道->CPU->内存的过程，虽然有点耗时，但是远高于你的游戏频率。ps:这个等待时间是和fp渲染同步的。 假设你是60fps/s，这样拣选相当于在点击的时候多渲染一帧，类似updateAfterEvent强制渲染一次。这一帧需要循环你的对象列表才能完全绘制。所以，这一帧如果有太多的对象需要循环还是能感觉到延迟的。我测试的是1600个单位才会有这个现象，而且很轻微，基本察觉不到。庆幸的是，你并不需要将所有对象都视为交互对象，所以，对象的mouseEnable,mousechildren就是一个很关键的效率开关。这个跟flash.display是一样的。最后，这种方案在渲染模型越来越复杂的时候，显卡压力会比较大。到那种程度，再说吧。]]></description>
			<content:encoded><![CDATA[<p>       最近一直在研究更好的拣选方法。其实，是因为想绕开射线法。总感觉射线法检测流程太繁琐，懒得去弄。之前跟同事@donaldwu在聊到这个拣选的时候他给了我一个很好的思路，即让显卡来帮助拣选。之前有看过Away3D做过这个事情，但是它只是针对单个模型的拣选。这里要分享的是直接得到画面的拣选结果，即所点即所得。重申一下，为什么2D引擎要做设个事情，因为我的2D引擎是支持Z轴的。所以要支持带深度的拣选。</p>
<p>这里的拣选跟之前那篇文章提到的拣选是不一样的，请看完理解。</p>
<p>这个跟屏幕认知过程是一个原理，我们在看到画面的时候已经知道鼠标是否点中了，因为我们知道选中的那个像素是哪个对象的。现在我们要让我们编写的代码也知道这个事实。原理很简单，就是能通过鼠标点中的像素还原对象的引用。<br />
 <span id="more-78"></span><br />
列举一下核心点:<br />
Point1:获取鼠标点中的像素，这个可以利用context3D.drawtoBitmap得到当前显卡渲染的结果。</p>
<p>Point2:将能代表交互对象的信息绘制到像素，这里我取的每个交互对象的唯一ID(24位UIN,RGB),如果觉得对象数量不够，可以用ARGB。将这个ID作为颜色绘制到模型颜色中，需要在Shader中做一些处理。</p>
<p>//获取贴图像素<br />
“tex ft1, v0, fs0 <2d,clamp,linear> \n”+<br />
//做交互对象的alpha计算，因为你的对象本身可能是有设置alpha的<br />
“mul ft1.w,ft1.w,fc0.w\n”+<br />
//判断alpha是否大于0，是返回1，否返回0，fc2.x=0;<br />
“slt ft1.w,fc2.x,ft1.w\n”+<br />
//最后ft1的颜色=ft1.w*fc1（fc1就是对象ID）<br />
“mul ft1,ft1.w,fc1,0\n”+<br />
//最后输出ID<br />
“mov oc ft1&#8243;;</p>
<p>Point3:<br />
利用bitmapdata.getPixel(x,y,)获得点中的像素值去map中读取对应的对象。当然，事先需要建立交互对象的map表。</p>
<p>最后来谈谈效率问题<br />
CPU端 核心接口drawToBitmapData基本不耗CPU，但是它耗时间，这时间是CPU->显存->主板通道->CPU->内存的过程，虽然有点耗时，但是远高于你的游戏频率。ps:这个等待时间是和fp渲染同步的。</p>
<p>假设你是60fps/s，这样拣选相当于在点击的时候多渲染一帧，类似updateAfterEvent强制渲染一次。这一帧需要循环你的对象列表才能完全绘制。所以，这一帧如果有太多的对象需要循环还是能感觉到延迟的。我测试的是1600个单位才会有这个现象，而且很轻微，基本察觉不到。庆幸的是，你并不需要将所有对象都视为交互对象，所以，对象的mouseEnable,mousechildren就是一个很关键的效率开关。这个跟flash.display是一样的。最后，这种方案在渲染模型越来越复杂的时候，显卡压力会比较大。到那种程度，再说吧。</p>
 <a onclick='ok("divswfobj_1")'>swf</a>
   <div id="divswfobj_1">
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_1" width="700" height="400">
      <param name="movie" value="http://i-popple.com/wordpress/wp-content/uploads/2011/12/PPTest1.swf" />
      <param name="allowfullscreen" value="true" />
      <param name="wmode" value="direct" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://i-popple.com/wordpress/wp-content/uploads/2011/12/PPTest1.swf" width="700" height="400" allowfullscreen="true" wmode="direct">
      <!--<![endif]-->
        
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object></div>

]]></content:encoded>
			<wfw:commentRss>http://i-popple.com/wordpress/?feed=rss2&#038;p=78</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>通过渲染结果判断3D拣选的方案</title>
		<link>http://i-popple.com/wordpress/?p=65</link>
		<comments>http://i-popple.com/wordpress/?p=65#comments</comments>
		<pubDate>Sun, 20 Nov 2011 16:33:24 +0000</pubDate>
		<dc:creator>Popple</dc:creator>
				<category><![CDATA[molehill]]></category>
		<category><![CDATA[3D拣选，drawToBitmapData]]></category>
		<category><![CDATA[away3d]]></category>

		<guid isPermaLink="false">http://i-popple.com/wordpress/?p=65</guid>
		<description><![CDATA[很久以前研究away3d的时候，发现away3d是用渲染结果来判断是否拣选到。因为源码看起来比较头晕，也就没怎么深入了。不过，仍然给我留下了深刻印象。 因为一直不想用3d射线的拣选方案，所以，今晚又把渲染拣选方案拿出来动手实践了一下。基本上是探测到本质了。 他的大概思路是将鼠标拣选的位置，渲染到1像素的位图上，然后检测这个像素颜色是否不等于buffer的默认颜色。本质就是渲染画面中被鼠标点中的那个像素，根据颜色值判断是否点中了。 &#160; 具体实现分下面三步: step1: 利用相机将鼠标选中的位置偏移到左上角. step2 渲染当前相机&#38;待检测物件到btimapData,记得context.drawToBitmapData？ step3: 判断像素 三个步骤很简单，代码量很少。但是第一步是需要做一些事情的。 第一步相机挪动的坐标 var x:Number=e.stageX/Scene.width*2; var y:Number=-e.stageY/Scene.height*2*Scene.scale; Camera.current.position=new Vector3D(x*(dd[0]*mZ+1),y*(dd[5]*Scene.scale*mZ+1),0); dd[0]是透视矩阵的scaleX分量，dd[5]是scaleY的分量，要得到实际坐标，一定要乘上当前的z值。 最后谈下这种思路的优缺点， 1、实现思路直观，即显卡渲染结果来检测模型是否拣选。 2、流程简洁/相对于射线拣选法。 3、越复杂的模型，越是它的优势(相对射线法来说，因为计算成本转移给显卡了，实际上是计算成本转移到显卡了)。 4、像素级检测。 这个在某些情况下会是弱点，比如说一个模型中间部分是透明的，但是又希望响应点击，就不行了。 缺点: 1、必须是像素检测 2、务必保证最小次数的拣选渲染。因为显卡到内存这里时间成本比较高，如果一次拣选最后需要渲染好几次才能得到结果的话，会阻断。]]></description>
			<content:encoded><![CDATA[<p>很久以前研究away3d的时候，发现away3d是用渲染结果来判断是否拣选到。因为源码看起来比较头晕，也就没怎么深入了。不过，仍然给我留下了深刻印象。</p>
<p>因为一直不想用3d射线的拣选方案，所以，今晚又把渲染拣选方案拿出来动手实践了一下。基本上是探测到本质了。</p>
<p>他的大概思路是将鼠标拣选的位置，渲染到1像素的位图上，然后检测这个像素颜色是否不等于buffer的默认颜色。本质就是渲染画面中被鼠标点中的那个像素，根据颜色值判断是否点中了。</p>
<p>&nbsp;</p>
<p>具体实现分下面三步:</p>
<p>step1:<br />
利用相机将鼠标选中的位置偏移到左上角.</p>
<p>step2<br />
渲染当前相机&amp;待检测物件到btimapData,记得context.drawToBitmapData？</p>
<p>step3:<br />
判断像素</p>
<p>三个步骤很简单，代码量很少。但是第一步是需要做一些事情的。<br />
第一步相机挪动的坐标<br />
var<br />
x:Number=e.stageX/Scene.width*2;<br />
var<br />
y:Number=-e.stageY/Scene.height*2*Scene.scale;<br />
Camera.current.position=new<br />
Vector3D(x*(dd[0]*mZ+1),y*(dd[5]*Scene.scale*mZ+1),0);</p>
<p>dd[0]是透视矩阵的scaleX分量，dd[5]是scaleY的分量，要得到实际坐标，一定要乘上当前的z值。</p>
<p>最后谈下这种思路的优缺点，</p>
<p>1、实现思路直观，即显卡渲染结果来检测模型是否拣选。</p>
<p>2、流程简洁/相对于射线拣选法。</p>
<p>3、越复杂的模型，越是它的优势(相对射线法来说，因为计算成本转移给显卡了，实际上是计算成本转移到显卡了)。</p>
<p>4、像素级检测。<br />
<em>这个在某些情况下会是弱点，比如说一个模型中间部分是透明的，但是又希望响应点击，就不行了。</em></p>
<p>缺点:</p>
<p>1、必须是像素检测</p>
<p>2、务必保证最小次数的拣选渲染。因为显卡到内存这里时间成本比较高，如果一次拣选最后需要渲染好几次才能得到结果的话，会阻断。</p>
]]></content:encoded>
			<wfw:commentRss>http://i-popple.com/wordpress/?feed=rss2&#038;p=65</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>利用AMD RenderMonkey学习Shader编程</title>
		<link>http://i-popple.com/wordpress/?p=63</link>
		<comments>http://i-popple.com/wordpress/?p=63#comments</comments>
		<pubDate>Sun, 20 Nov 2011 15:49:54 +0000</pubDate>
		<dc:creator>Popple</dc:creator>
				<category><![CDATA[molehill]]></category>
		<category><![CDATA[agal]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[rendermonkey]]></category>
		<category><![CDATA[shader]]></category>

		<guid isPermaLink="false">http://i-popple.com/wordpress/?p=63</guid>
		<description><![CDATA[近学习Shader编程了解到RenderMonkey这个Shader编写工具，研究了一下，发现能成为一个很好的Shader学习资源。这里旨在分享如何利用这个工具去学习Shader编程，并非分享Shader编程本身。 RenderMonkey是AMD官方提供的Shader编程工具[下载地址] 选择一个Shader例子 web写作太特闷悲催，半天一张图片，不插图了。抱歉。 打开一个Shader例子后，左边栏可以找到 呐，可以看到左边有VertexShader和PixelShader点击既可以查看源码。然后源码上方Target是Shader版本号，main主函数名称，Disassebly就是显示汇编的，学AGAL的同学其实比较期望能看到汇编源码。 HLSL就是C语言 float4x4 view_proj_matrix: register(c0); float4 lightPos: register(c4); 这里是声明两个变量view_proj_matrix,lightPos。分别指向一个4*4矩阵和一个Vector3D常量寄存器对应到molehill里面就是Context3D.setConstrantsFromMatrix所给定的常量，Context3D.setConstrantsFromMatrix(0,new Matrix3D,true); Context3D.setConstrantsFromVector(4,new Vector3D); 第一个是透视矩阵，第二个应该是灯光的位置。 再来看main函数的两个参数，Pos和normal,这个是属于顶点数据传输过来的数据。 一个顶点数据可能是这样x,y,z,x,y,z mohill里面就是 setVertexBufferAt(0,VertexBuffer,n)..这样传入显卡.当然提交数据是VertexBuffer.updateFromVector完成的 最后再看VS_OUTPUT这个结构体里面就定义了Pos,normal,ligtht 最终在VertexShader里面的计算结果会输出这三个内容到Pixelshader继续流程。 vs_1_1 dcl_position v0 dcl_normal v1 dp4 oPos.x, c0, v0 dp4 oPos.y, c1, v0 dp4 oPos.z, c2, v0 dp4 oPos.w, c3, v0 add oT1.xyz, -v0, c4 mov oT0.xyz, v1 查看生成的汇编。。是不是跟AGAL很像。准确的说AGAL是这个的子集。 其中dcl_position是固定的叫声明一个位置，vs_1_1是指定当前ShaderModel适用版本号]]></description>
			<content:encoded><![CDATA[<p>近学习Shader编程了解到RenderMonkey这个Shader编写工具，研究了一下，发现能成为一个很好的Shader学习资源。这里旨在分享如何利用这个工具去学习Shader编程，并非分享Shader编程本身。</p>
<p>RenderMonkey是AMD官方提供的Shader编程工具<a title="RenderMonkey" href="http://developer.amd.com/archive/gpu/rendermonkey/pages/default.aspx" target="_blank">[下载地址]</a></p>
<div>
<div id="attachment_51"><a href="http://www.moreflash.org/wp-content/uploads/2011/11/step1.jpg" rel="lightbox[63]"><img title="step1" src="http://www.moreflash.org/wp-content/uploads/2011/11/step1.jpg" alt="" width="700" height="460" /></a>选择一个Shader例子</p>
</div>
<p>web写作太特闷悲催，半天一张图片，不插图了。抱歉。</p>
<p>打开一个Shader例子后，左边栏可以找到<a href="http://www.moreflash.org/wp-content/uploads/2011/11/step2.jpg" rel="lightbox[63]"><img title="step2" src="http://www.moreflash.org/wp-content/uploads/2011/11/step2.jpg" alt="" width="824" height="917" /></a></p>
<p>呐，可以看到左边有VertexShader和PixelShader点击既可以查看源码。然后源码上方Target是Shader版本号，main主函数名称，Disassebly就是显示汇编的，学AGAL的同学其实比较期望能看到汇编源码。</p>
<p>HLSL就是C语言</p>
<p>float4x4 view_proj_matrix: register(c0);<br />
float4 lightPos: register(c4);</p>
<p>这里是声明两个变量view_proj_matrix,lightPos。分别指向一个4*4矩阵和一个Vector3D常量寄存器对应到molehill里面就是Context3D.setConstrantsFromMatrix所给定的常量，Context3D.setConstrantsFromMatrix(0,new Matrix3D,true);<br />
Context3D.setConstrantsFromVector(4,new Vector3D);</p>
<p>第一个是透视矩阵，第二个应该是灯光的位置。</p>
<p>再来看main函数的两个参数，Pos和normal,这个是属于顶点数据传输过来的数据。</p>
<p>一个顶点数据可能是这样x,y,z,x,y,z mohill里面就是<br />
setVertexBufferAt(0,VertexBuffer,n)..这样传入显卡.当然提交数据是VertexBuffer.updateFromVector完成的</p>
<p>最后再看VS_OUTPUT这个结构体里面就定义了Pos,normal,ligtht</p>
<p>最终在VertexShader里面的计算结果会输出这三个内容到Pixelshader继续流程。</p>
<p>vs_1_1<br />
dcl_position v0<br />
dcl_normal v1<br />
dp4 oPos.x, c0, v0<br />
dp4 oPos.y, c1, v0<br />
dp4 oPos.z, c2, v0<br />
dp4 oPos.w, c3, v0<br />
add oT1.xyz, -v0, c4<br />
mov oT0.xyz, v1</p>
<p>查看生成的汇编。。是不是跟AGAL很像。准确的说AGAL是这个的子集。</p>
<p>其中dcl_position是固定的叫声明一个位置，vs_1_1是指定当前ShaderModel适用版本号</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://i-popple.com/wordpress/?feed=rss2&#038;p=63</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>引擎效率优化之后的Demo</title>
		<link>http://i-popple.com/wordpress/?p=49</link>
		<comments>http://i-popple.com/wordpress/?p=49#comments</comments>
		<pubDate>Mon, 14 Nov 2011 17:52:44 +0000</pubDate>
		<dc:creator>Popple</dc:creator>
				<category><![CDATA[molehill]]></category>
		<category><![CDATA[PP2D]]></category>

		<guid isPermaLink="false">http://i-popple.com/wordpress/?p=49</guid>
		<description><![CDATA[进去查看demo]]></description>
			<content:encoded><![CDATA[<p><img title="更多..." src="http://i-popple.com/wordpress/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" />进去查看demo<br />
<span id="more-49"></span><br />
 <a onclick='ok("divswfobj_2")'>swf</a>
   <div id="divswfobj_2">
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_2" width="750" height="600">
      <param name="movie" value="http://i-popple.com/wordpress/wp-content/uploads/2011/10/particle.swf" />
      <param name="allowfullscreen" value="true" />
      <param name="wmode" value="direct" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://i-popple.com/wordpress/wp-content/uploads/2011/10/particle.swf" width="750" height="600" allowfullscreen="true" wmode="direct">
      <!--<![endif]-->
        
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object></div>
</p>
]]></content:encoded>
			<wfw:commentRss>http://i-popple.com/wordpress/?feed=rss2&#038;p=49</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PP2D加入文本渲染</title>
		<link>http://i-popple.com/wordpress/?p=56</link>
		<comments>http://i-popple.com/wordpress/?p=56#comments</comments>
		<pubDate>Tue, 25 Oct 2011 16:47:47 +0000</pubDate>
		<dc:creator>Popple</dc:creator>
				<category><![CDATA[molehill]]></category>

		<guid isPermaLink="false">http://i-popple.com/wordpress/?p=56</guid>
		<description><![CDATA[渲染思路很简单，TextField生成图形，BitmapData draw 然后当作Image来更新. 需要处理的是位图Buffer是随着文本框动态更新的，今天从blueshell那淘到两个实用函数 获得任意整数最近的2的n次方的数，非常有用，如果你要动态贴图，这个函数会很有用。 &#160; 悲愤的是，快回家的时候居然搞出一个bug,调来调去最后是因为UV坐标忘了格式化到0-1了。 明天就能完成TextField了。Flash这点比客户端实现文本爽多了，客户端实现文本，还得自制 一张map表，包含常用字符。 &#160; 想来想去，3D空间是不怎么需要很动态更新的文本，所以用来显示角色名，UI什么的其实问题都不大了 内存估计有点浪费，等问题出现再说。]]></description>
			<content:encoded><![CDATA[<p>渲染思路很简单，TextField生成图形，BitmapData draw 然后当作Image来更新.</p>
<p>需要处理的是位图Buffer是随着文本框动态更新的，今天从blueshell那淘到两个实用函数</p>
<p>获得任意整数最近的2的n次方的数，非常有用，如果你要动态贴图，这个函数会很有用。</p>
<p>&nbsp;</p>
<p>悲愤的是，快回家的时候居然搞出一个bug,调来调去最后是因为UV坐标忘了格式化到0-1了。</p>
<p>明天就能完成TextField了。Flash这点比客户端实现文本爽多了，客户端实现文本，还得自制</p>
<p>一张map表，包含常用字符。</p>
<p>&nbsp;</p>
<p>想来想去，3D空间是不怎么需要很动态更新的文本，所以用来显示角色名，UI什么的其实问题都不大了</p>
<p>内存估计有点浪费，等问题出现再说。</p>
]]></content:encoded>
			<wfw:commentRss>http://i-popple.com/wordpress/?feed=rss2&#038;p=56</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>molehill实现骨骼贴图动画</title>
		<link>http://i-popple.com/wordpress/?p=44</link>
		<comments>http://i-popple.com/wordpress/?p=44#comments</comments>
		<pubDate>Mon, 24 Oct 2011 15:32:43 +0000</pubDate>
		<dc:creator>Popple</dc:creator>
				<category><![CDATA[molehill]]></category>
		<category><![CDATA[骨骼贴图 Skinned Mesh]]></category>

		<guid isPermaLink="false">http://i-popple.com/wordpress/?p=44</guid>
		<description><![CDATA[在用molehill实现骨骼贴图之前翻阅了很多资料，在搞清楚原理之后总结了几点实现重点。 1、基于VertexShader 实现骨骼贴图的核心点在于VertexShader能同时处理顶点对应的4根(理论值最多4根)骨骼的影响，每个顶点能同时处理几根骨骼的核心在于常量寄存器vc是可以下标访问的，类似于数组的访问vc[0...n]，郁闷的是我刚开始并不知道可以这么访问寄存器，所以，卡了我很久。在翻阅了away3d的Shader生成代码后才发现，并做了测试代码验证。 “m44 vt0, va0, vc[va3.x] \n” + “mul vt0.xyz, vt0.xyz,va4.x\n”+ “mov vt1,vt0\n”+ “m44 vt0, va0, vc[va3.y] \n” + “mul vt0.xyz, vt0.xyz,va4.y\n”+ “add vt1,vt1,vt0\n”+ “m44 vt0, va0, vc[va3.z] \n” + “mul vt0.xyz, vt0.xyz,va4.z\n”+ “add vt1,vt1,vt0\n”&#8230;.. 上面AGAL部分代码是处理顶点的三根骨骼矩阵，vc是常量寄存器，va是骨骼，用四元数存储四根骨骼序列，核心就这些了。 2、骨骼运动。 骨骼运动相对简单，就是矩阵的叠加，这里需要注意的是矩阵的叠加顺序，需要从子矩阵往父矩阵叠加。 每次update的时序是每根骨骼自己先做运动，然后从子矩阵到父矩阵叠加。 完整的骨骼代码还没实现，等待2D引擎重构完毕后加入这个特性。]]></description>
			<content:encoded><![CDATA[<p>在用molehill实现骨骼贴图之前翻阅了很多资料，在搞清楚原理之后总结了几点实现重点。</p>
<p>1、基于VertexShader<br />
实现骨骼贴图的核心点在于VertexShader能同时处理顶点对应的4根(理论值最多4根)骨骼的影响，每个顶点能同时处理几根骨骼的核心在于常量寄存器vc是可以下标访问的，类似于数组的访问vc[0...n]，郁闷的是我刚开始并不知道可以这么访问寄存器，所以，卡了我很久。在翻阅了away3d的Shader生成代码后才发现，并做了测试代码验证。<br />
“m44 vt0, va0, vc[va3.x] \n” +<br />
“mul vt0.xyz, vt0.xyz,va4.x\n”+<br />
“mov vt1,vt0\n”+</p>
<p>“m44 vt0, va0, vc[va3.y] \n” +<br />
“mul vt0.xyz, vt0.xyz,va4.y\n”+<br />
“add vt1,vt1,vt0\n”+</p>
<p>“m44 vt0, va0, vc[va3.z] \n” +<br />
“mul vt0.xyz, vt0.xyz,va4.z\n”+<br />
“add vt1,vt1,vt0\n”&#8230;..</p>
<p>上面AGAL部分代码是处理顶点的三根骨骼矩阵，vc是常量寄存器，va是骨骼，用四元数存储四根骨骼序列，核心就这些了。<br />
2、骨骼运动。<br />
骨骼运动相对简单，就是矩阵的叠加，这里需要注意的是矩阵的叠加顺序，需要从子矩阵往父矩阵叠加。<br />
每次update的时序是每根骨骼自己先做运动，然后从子矩阵到父矩阵叠加。</p>
<p>完整的骨骼代码还没实现，等待2D引擎重构完毕后加入这个特性。</p>
]]></content:encoded>
			<wfw:commentRss>http://i-popple.com/wordpress/?feed=rss2&#038;p=44</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>另外一个测试</title>
		<link>http://i-popple.com/wordpress/?p=3</link>
		<comments>http://i-popple.com/wordpress/?p=3#comments</comments>
		<pubDate>Mon, 24 Oct 2011 15:04:10 +0000</pubDate>
		<dc:creator>Popple</dc:creator>
				<category><![CDATA[molehill]]></category>
		<category><![CDATA[molehill 粒子]]></category>

		<guid isPermaLink="false">http://i-popple.com/wordpress/?p=3</guid>
		<description><![CDATA[有没有好用的flash插件介绍啊,能点击打开显示的那种。 这个demo里面是2000个独立显示对象]]></description>
			<content:encoded><![CDATA[<p>有没有好用的flash插件介绍啊,能点击打开显示的那种。</p>
<p>这个demo里面是2000个独立显示对象<span id="more-3"></span><br />
 <a onclick='ok("divswfobj_3")'>swf</a>
   <div id="divswfobj_3">
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_3" width="600" height="600">
      <param name="movie" value="http://i-popple.com/wordpress/wp-content/uploads/2011/10/PPTest4.swf" />
      <param name="allowfullscreen" value="true" />
      <param name="wmode" value="direct" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://i-popple.com/wordpress/wp-content/uploads/2011/10/PPTest4.swf" width="600" height="600" allowfullscreen="true" wmode="direct">
      <!--<![endif]-->
        
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object></div>
</p>
]]></content:encoded>
			<wfw:commentRss>http://i-popple.com/wordpress/?feed=rss2&#038;p=3</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PP2D，粒子Demo..</title>
		<link>http://i-popple.com/wordpress/?p=21</link>
		<comments>http://i-popple.com/wordpress/?p=21#comments</comments>
		<pubDate>Sun, 23 Oct 2011 06:39:59 +0000</pubDate>
		<dc:creator>Popple</dc:creator>
				<category><![CDATA[molehill]]></category>

		<guid isPermaLink="false">http://i-popple.com/wordpress/?p=21</guid>
		<description><![CDATA[第三个版本改名叫PP2D,暂时叫这个开发代号，名字还没想好。 昨夜把一些收尾工作完成，抽点时间写了个demo测试效率。 &#160; &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>第三个版本改名叫PP2D,暂时叫这个开发代号，名字还没想好。</p>
<p>昨夜把一些收尾工作完成，抽点时间写了个demo测试效率。<span id="more-21"></span></p>
 <a onclick='ok("divswfobj_4")'>swf</a>
   <div id="divswfobj_4">
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_4" width="600" height="600">
      <param name="movie" value="http://i-popple.com/wordpress/wp-content/uploads/2011/10/PPTest3.swf" />
      <param name="allowfullscreen" value="true" />
      <param name="wmode" value="direct" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://i-popple.com/wordpress/wp-content/uploads/2011/10/PPTest3.swf" width="600" height="600" allowfullscreen="true" wmode="direct">
      <!--<![endif]-->
        
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object></div>

<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://i-popple.com/wordpress/?feed=rss2&#038;p=21</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

