??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一本综合久久,伊人久久综合精品无码AV专区,亚洲精品无码久久久久 http://www.shnenglu.com/cty41/archive/2016/03/05/212933.html月下圆舞?/dc:creator>月下圆舞?/author>Sat, 05 Mar 2016 00:45:00 GMT http://www.shnenglu.com/cty41/archive/2016/03/05/212933.html http://www.shnenglu.com/cty41/comments/212933.html http://www.shnenglu.com/cty41/archive/2016/03/05/212933.html#Feedback 2 http://www.shnenglu.com/cty41/comments/commentRss/212933.html http://www.shnenglu.com/cty41/services/trackbacks/212933.html 2.工作五年Q值得骄傲的事只有最早参与制作v盗IOS版,后来自己做的热血球卖了2w套。这两个阶段我自己心中追求很明确Q所以设|短期目标很重要?br />3.q了鹅场快两q_到最q思想才开始{变,很惭愧。腾讯其实提供了很好的学习资源,q半q里接触了研发部的几位大h物,感受C无论是待人处事,q是技术能力上的差?br />4.做功能,即很小功能也能做成花来。只要肯惌做,但这栯投入2倍甚?倍的旉。就像《闻香识女h》里帕西的:我知道这是正的路,但我q没有走Q因为我知道q条路走h太难了?br />5.提意见:q个是看“创新工场”书中开就说到的,不要通过批评来拔高自己,提意见是善意Cؓ了帮助对Ҏ好的提升。这一点上Q对待同事,对待家hQ我都做的很差?br />6.军_游戏成功的因素?3q前认ؓ是态度-?q前认ؓ是设?》现在{变ؓ?br />7.坚持记录Qh的大脑擅长迸发灵感,但缺不擅长记忆他们?br /> ]]> DirectX 10的State Object理{略 http://www.shnenglu.com/cty41/archive/2011/12/29/156129.html月下圆舞?/dc:creator>月下圆舞?/author>Thu, 29 Dec 2011 14:35:00 GMT http://www.shnenglu.com/cty41/archive/2011/12/29/156129.html http://www.shnenglu.com/cty41/comments/156129.html http://www.shnenglu.com/cty41/archive/2011/12/29/156129.html#Feedback 0 http://www.shnenglu.com/cty41/comments/commentRss/156129.html http://www.shnenglu.com/cty41/services/trackbacks/156129.html
好久没更C。。上自己博客看了下这?个月前的草稿都还没写完。。的是要荒废了快。。囧 最q上班没什么事情,所以便考虑着把自p土?/span>d9 囑Ş山寨引擎UL?/span>d10 上(其实可以 直接UL?/span>d11 ?/span> Q。。我慢半拍吧。。首?/span>d10 Q?/span>11 ?/span>d9 的一大区别就是本?/span>d9 众多?/span>setState 被去除,而用改q的 state object Q这些包括了 Input-Layout State Q?/span> Rasterizer State Q?/span>Depth-Stencil State Q?/span> Blend State Q?/span> Sampler State 。可以看到本来的多次 set 函数被大量简化了Q而这?/span>state object 都是依靠对应?/span>DESC Q描qͼQ来直接创徏出来Q用户在使用的时候只需要向驱动层传递一个句柄(也就是新?/span>set 函数Q既可以对许多个状态进行改变,例如 Rasterizer State ?/span>DESC Q?/span> typedef struct D3D10_RASTERIZER_DESC { D3D10_FILL_MODE FillMode; D3D10_CULL_MODE CullMode; BOOL FrontCounterClockwise; INT DepthBias; FLOAT DepthBiasClamp; FLOAT SlopeScaledDepthBias; BOOL DepthClipEnable; BOOL ScissorEnable; BOOL MultisampleEnable; BOOL AntialiasedLineEnable; } D3D10_RASTERIZER_DESC;可以看到一?/span>set 可以一ơ给驱动发送以?/span>d9 曄需要很多条 command 的工作,可想而知其带来的性能提升?/span>但这也带来了新的问题Q由于这?/span>state object 的创建是比较耗时的,所以便不可能像以前 d9 一h帧都?/span>set Q而且׃ DESC 里有多个配置,也无法简单的?/span>cache 。看到这里,我想看过 Christer ?/span>clayman 大h那两关于渲染排序文章的同学应该能想到对应的思\。那是做一?/span>sortkey Q对?/span>Rasterizer State 来说 ,FillMode q些枚DQ?/span>bool 都是能直接做?/span>sortkey 的(节省比较ơ数Q,剩下的譬?/span>int 或?/span>float 则直接比较,也就是重?/span>operator== ?/span>!=
譬如
bool operator==(const D3D10RasterState& rhs)
{
if(SortKey == rhs.SortKey && DESC.DepthBias == rhs.DESC. DepthBias &&
fabs(DESC. DepthBiasClamp – rhs.DESC. DepthBiasClamp) < 0.000001f && etc..)
return true;
return false;
}
UE3中这块大概也是这LQ不q他没有?/span>sortkey什么,他是很简单直接重载了 ==?/span>!=的用 memcmp比较 State ?/span>DESC 完?/span>.. 单易用吧。?/span>
]]> Dithering-视觉的奇特现?/title> http://www.shnenglu.com/cty41/archive/2011/07/19/dither.html月下圆舞?/dc:creator>月下圆舞?/author>Tue, 19 Jul 2011 14:26:00 GMT http://www.shnenglu.com/cty41/archive/2011/07/19/dither.html http://www.shnenglu.com/cty41/comments/151420.html http://www.shnenglu.com/cty41/archive/2011/07/19/dither.html#Feedback 1 http://www.shnenglu.com/cty41/comments/commentRss/151420.html http://www.shnenglu.com/cty41/services/trackbacks/151420.html 最早对听说Ditheringq个词还是看到clayman大神推荐的dx9 pipeline图,当时也没qQ今天在openGPU上有大牛Ҏ问题l出?/span>{案 Q?当时也没看懂Q回来看了下wiki上关于dithering的介l,瞬间明白了。再ơ借wiki的图做个白普及吧~~(不算侉|吧。。) q就是一个很直接的dithering的例子,图中实际只用了红蓝两U颜Ԍ但是随着像素的变,囄逐渐呈现出艌Ӏ?/span> 看到q边大家应该对ditherq个操作有了个理解,它就是用量的颜色来表现更广泛的颜色的。这么做的原因,有很多方面的用途,譬如在某一些用lcd屏幕的嵌入式讑֤上能昄的色域很比较的Q在q样的设备上昄囄Q如果单U的超q色域的颜色四舍五入的话Q就会生很明显的颜色带。(如下图)q样需要利用dithering操作来进行修正?/span>原图 未经qdithering l过dithering后,颜色q渡自然很多 具体的算法wiki上大概的介绍Q有兴趣的同学可以看看: http://en.wikipedia.org/wiki/Dither ]]> 光照术语备忘 http://www.shnenglu.com/cty41/archive/2011/06/04/148039.html月下圆舞?/dc:creator>月下圆舞?/author>Sat, 04 Jun 2011 03:18:00 GMT http://www.shnenglu.com/cty41/archive/2011/06/04/148039.html http://www.shnenglu.com/cty41/comments/148039.html http://www.shnenglu.com/cty41/archive/2011/06/04/148039.html#Feedback 0 http://www.shnenglu.com/cty41/comments/commentRss/148039.html http://www.shnenglu.com/cty41/services/trackbacks/148039.html Irradiance is the total amount of energy received per unit area of surface.
Illuminance measures the amount of visible light energy in photometric terms, not included heat, and radiation.
前两者是关于表面接收的光的属性,后两者则是表面反出的光的属性?/p>
Radiance is the measure of energy that is reflected by the surface.
Luminance is the measure of photometrically weighted light energy that leaves the surface, and is therefore the more interesting term in a graphics context.
]]> 从vertex shader到pixel shader http://www.shnenglu.com/cty41/archive/2011/05/08/145972.html月下圆舞?/dc:creator>月下圆舞?/author>Sun, 08 May 2011 11:46:00 GMT http://www.shnenglu.com/cty41/archive/2011/05/08/145972.html http://www.shnenglu.com/cty41/comments/145972.html http://www.shnenglu.com/cty41/archive/2011/05/08/145972.html#Feedback 0 http://www.shnenglu.com/cty41/comments/commentRss/145972.html http://www.shnenglu.com/cty41/services/trackbacks/145972.html 帖子Q以前自己对q块也是一知半解,D了曾l在一ơ面试中在这个问题上卡壳Q反正最后是没过。。哭。。。)Q这ơ看到正好最q看shaderX1里有介绍Q所以就一鼓作气理解下吧!Q?br> q是shaderX1里从vertex到pixelshader之前的pipeline 我具体解释下从vertex shader到pixel shader中间的部分: face culling:Ҏtriangle的两边向量叉乘得到的面法U方向来定是顺旉q是逆时针,从而达到裁剪?br>user clip planesQ除了用投q阵定义出?个clipplane之外我们也可以额外自己定义对应的clipplane来剪裁?br>frustum cullingQ视锥裁剪,不说?br>homogeneous divideQ这是你说的除以什么w的地方,变换后的定点的xyz均会除以起wQ以opengl的列ZQ没记错的话。。反正就是matrix X vector的那个。。)透视投媄矩阵的最后一行ؓ0 0 1 0Q?所以w值就是未l变换前的z|所以根据透视投媄的特性?-1=<x/w<=1, -1=<y/w<=1, -1=<z/w<=1。但是ؓ何我们要q么做捏。。答案是我没看懂。。。我觉得Ua是ؓ了下一步。。下面说 viewport mappingQ上一步后x,y,z现在已经?1?之间Q上一步的齐次坐标pd被称为normalized device coordinatesQNDCQ,那么我们要将q些点映射到屏q空间就很简单了Qx = NDC(x) * width + width / 2, y = NDC(y) * height + height/2?br> 呹{。如果有错的话还h正哈Q~?
]]> 推荐一个查找游戏开发相x术的|站 http://www.shnenglu.com/cty41/archive/2011/05/08/145960.html月下圆舞?/dc:creator>月下圆舞?/author>Sun, 08 May 2011 09:46:00 GMT http://www.shnenglu.com/cty41/archive/2011/05/08/145960.html http://www.shnenglu.com/cty41/comments/145960.html http://www.shnenglu.com/cty41/archive/2011/05/08/145960.html#Feedback 0 http://www.shnenglu.com/cty41/comments/commentRss/145960.html http://www.shnenglu.com/cty41/services/trackbacks/145960.html http://www.introgamedev.com/index.html 里面q没有具体的内容Q只是相x术的索引Q基本都是来自于出版的书c,譬如game programming gems, gpu gems, shaderX{等Q由于这cMc本来就是杂烩Ş式,所以要看特定某一块的内容的话Q这个网站就很方便了Q反正大部分q些书天朝都能找到pdf~~
]]> 沿着ogre来实现material systemQ一Q?/title> http://www.shnenglu.com/cty41/archive/2011/04/18/144448.html月下圆舞?/dc:creator>月下圆舞?/author>Mon, 18 Apr 2011 15:32:00 GMT http://www.shnenglu.com/cty41/archive/2011/04/18/144448.html http://www.shnenglu.com/cty41/comments/144448.html http://www.shnenglu.com/cty41/archive/2011/04/18/144448.html#Feedback 1 http://www.shnenglu.com/cty41/comments/commentRss/144448.html http://www.shnenglu.com/cty41/services/trackbacks/144448.html 自从以前看了clayman ?span>博客 后,很x自己代码?span>dx?span>effect框架替代掉。如今实习结束正好有短暂的自由时_所以就ogre ?span>material开刀吧?span> 山寨代码也是有学问的Q如果你x明白q些代码的含义的话,最后之前就对这些已l有了一定的使用l历和认知,W一步先得自己想一?span>materialpȝ的组成: material 应该包含的:1Material->n Techinque->(n Pass + extra params)->(n TextureUnit + m or 0 shaderUnit + n RenderStates Q部分)),Pass 里的TextureUnit 又包含了q一l?span>texture的相关信息和讄Q?span>TexcoordSet, AddressMode, FilterSetting{等Q?span> ShaderUnit则是对应?span>vsQ?span>fs以及新的gs Q普通点也就最多两l?span>shaderUnit包含了具体的shader 和其shaderParams Qؓ何要?span>shader?span>shaderParams分开呢,不说设计优雅的考虑Q简单的说就是方便,很多时?span>params可能会需要共享,譬如shaderA 里用?span>mvpMatQ和eyePos Q?span> diffuse,specular,可能shaderB 也只用到q些Q但是两?span>shader的内部计ƈ不相同。到此我们只分析了作为程序中的材质的l构Q还需要考虑如果~写一个类?span>fx格式?span>material scriptQ这也是另外一个大_单的说就是要做个脚本解释Q然后给shader 参数加上语义Q减大部分需要手动更新的shaderParams 。鉴于我如今q没把这块扒完,{下ơ再写这块吧?span> 当你臛_能闭着眼睛想透这些了Q那可以开始看ogre ?span>material system了,先说句题外话Q?/span>我读ogre 的代码其实读Z了。一直觉得很难读Q开始觉得是自己水^不够Q但后来实习才发现很多h都有q想法,甚至wolfgang Ҏ也有批评Q而自己曾l写了个olong 引擎Q接触过ipad ~程的h应该对这些代码都比较熟悉?span>ogre 里用了大量的设计模式Q得整个渲染流E从不同c里x跛_Q?span>SceneMgrq块看着最累了。。其实有很多地方看着都很累。。)个h觉得应该?span>render?span>SceneMgr里抽d来做?span>RenderMgrQ(Cq里?span>RenderMgr的概念和ogre ?span>RenderSystemQ后者是提供底层渲染API 的接口,而前者是理renderData q最l递交l?span>RenderSystemQ以前也见有别h博客讲过q个问题Q让SceneMgr 专门理Scene。?br> 打住打住。。我是来?span>material的。。咳咟뀂。相当于渲染来说Q?span>ogre?span>material systemq是相当易读的,也是因ؓq些模块怺关系几乎都是单向的,我们开始编写的时候可以先不考虑TechniqueQ?/span>是直接1 Material->n Pass->... 当然甚至你都可以?span>multi pass L, q同于1 ?span>passQ当然由?span>pass都代码实际也没多,我们q是加上好了?br> 原始渲染的伪代码是Q?/span>
1 for each pass 2 { 3 setRenderStates(like alphe belnd, depth..) 4 for each texture unit 5 setTexSettings(); 6 if (hasVertexShader()) 7 { 8 bindVertexShader(); 9 setShaderParams(vs);10 }11 if (hasFragmentShader()) 12 { 13 bindFragmentShader();14 setShaderParams(fs);15 }16 drawPrimitives();17 }
加入的RenderQueue也是一P只是pass和对应的renderData我们是从renderqueue里取?br> 看到q里你会觉得Q嘿Q很单嘛Q但如果你看了ogre里关于shader参数的细节,你就知道q块q是比较复杂的。我们刚只说了一个运行过E,而徏立params到constant registers的关p,以及如何~写autoConstants的代码都是魔鬼的l节~~对于dxQ我们可以简单点Q直接用ID3DXConstantTableQ它提供了set接口。但ogre则是直接从ID3DXConstantTable中解析参数?br> 设计q块的时候,脑子里先要对我整个过E有个清晰的认识Q?span style="COLOR: #993300">一斚w是从shader里(我们q里假设是hlslQasm先不考虑Q?另一斚w则是解析参数d材质脚本里定义的参数Q?/span>namedQautoNamedQ或者index Q,最后将两者对应上? 0.cd解释 看过OgreGpuProgramParams.cpp/h的h都知道:GpuConstantDefinitionQGpuNamedConstantsQGpuLogicalIndexUseQGpuSharedParametersQGpuSharedParametersUsageQ一堆的struct和class。。其实按照我们上面这个思\逐步加断点分析,代码也没那么J琐。暂时不看GpuSharedParametersq块Q大概看下GpuConstantDefinition,重点变成员是physicalIndex?a name=OLE_LINK1>logicalIndexQ前者的解释是buffer中的起始地址Q每个GpuProgramParameters里都包含?a name=OLE_LINK3>vector<int>和vector<float>两个buffer,他们存储了shader变量的|而physicalIndex是对应vector的烦引。而logicalIndex则是我们后面hlsl~译成asm后这些变量所l定的寄存器idQ而由于constant reg的size都是4Q即一个register?个float的大?/span>Q所以这些logicalIndex则不一定连l,譬如W一个uniform为float1那么W二个uniform的logicalIndex虽然?Q但实际跨过?个floatQ而实际内存中我们的floatQint同) buffer里,两个变量之间的则q?个floatQ这是physicalIndex的作用,所以我们还需要徏立一个从logicalIndex到physicalIndex的mapQ也是两个GpuLogicalBuffersStructPtr 对象Q这两个对象和GpuNamedConstantsPtr在GpuProgramcdGpuProgramParameters 是共享的Q都是sharedPtrQ?/p>
1.解析shader的变?/span> 我们从再具体的读取代码来看,假设我们已经从脚本里d了对应的shader Q经q一堆调用后Q略。。)?span>D3D9HLSLProgram 的函?span>buildConstantDefinitions-> processParamElement 每个参数的registerIndex,physicalIndex, type( 原子cdQ即float, int,),size 都写?span>GpuLogicalBuffersStructPtr
?a name=OLE_LINK7>GpuNamedConstantsPtr 对象里(后者当然是只有highLevelShader 里才有)Qƈ会ؓq个定义同样在插入带下标的一寚w|以便于如果我们传入的参数是数l(譬如float4x4[5] Q,则在E序里可以通过数组下标讉K对应的数l变量。再constantDef 建立好之后,?a name=OLE_LINK9>GpuNamedConstantsPtr 传入?span>GpuProgramParameters对象里,然后向其中的两个vector d上述对象大小的空_在将两个LogicalToPhysicalMap 的指针也传到shaderParams 里,q样整个GpuProgramParameters 几乎完工了?br>2.解析材质里定义的paramsQƈ其与前者对应上 如今差再把material script 定义?span>param解析出来q?/span>与之?span>shader里的变量q行对应。材质脚本读出的每个变量的信息包含了param cdQ?span>namedQ?span>auto_namedQ?span>indexQ?span>auto_indexQ,name,type(float,int..),autoType(auto 的才?span>)Q初始值等。我们根据其autoType 在全局变量AutoConstantDictionary 中查找是否有定义Q然后调?span>set[Named]AutoConstantQ在q里我们在会在我们之前从hlsl 里解析出?a name=OLE_LINK16>GpuNamedConstantsPtr 里查找是否有该名字的变量Q毕?span>shader里的变量才是最l有用的Q甚至由于编译器优化的关p,׃shader ~写者可能定义了一个变量而未实际使用Q在~译shader 后,q个变量实际是会被省略的Q这样在GpuNamedConstantsPtr 也就找不CQ然后调?span>_setRawAutoConstant这个变量加入到q个GpuProgramParameters 对象所持有?span>autoConstant中?/span>
QpsQ关?span>_getFloatConstantLogicalIndexUse 的用途我没看懂,Z需要去?span>mFloatLogicalToPhysical里去查找q个logicalIndex 是否存在呢,我觉得如果走到这一步肯?span>shader里肯定就是定义了的,因ؓq个logicalIndex 是由mNamedConstants 里取出,我觉得是没必要的。。)
3Q更?span>autoParamsbuffer q最l在DP 前进行更?/span>
把上面的q程看懂了,下面很好理解了?span>GpuProgramParameters::_updateAutoParams 里就是对GpuProgramParameters 对象所持有?span>autoConstantD行更斎ͼ当然q是我们只是?span>GpuProgramParameters持有?span>buffer里的值做更新Q最l在文章开头的伪代码中?/span>setShaderParams Q?span>ogre 里叫bindGpuProgramParamters Q?/span>而这里的更新p而易举了Q我们遍?span>logicalToPhysicalMap Ҏ?span>param取出对应?span>logicalIndexQ?span>dataPointerQ?span>vector4ofCountQ然后调?span>SetVertex/PixelShaderConstantF/I卛_?/span>
呹{。终于把q块写完了。。上q只是一个实现自qmaterial 的基本思\。关于优化的话,我开头推荐的clayman 的文章里有很多叙q。关于怎么?span>ogre script translator Q等下一再说。?/span>
]]>ogre1.6后的的脚本大概分?/title> http://www.shnenglu.com/cty41/archive/2011/04/12/144073.html月下圆舞?/dc:creator>月下圆舞?/author>Tue, 12 Apr 2011 14:31:00 GMT http://www.shnenglu.com/cty41/archive/2011/04/12/144073.html http://www.shnenglu.com/cty41/comments/144073.html http://www.shnenglu.com/cty41/archive/2011/04/12/144073.html#Feedback 0 http://www.shnenglu.com/cty41/comments/commentRss/144073.html http://www.shnenglu.com/cty41/services/trackbacks/144073.html 1.script先由ResourceGroupMgr在prepare函数里根据不同的后缀名选择不同的ScriptLoader的派生类来加载,q里我们׃ScriptCompilerMgrZ。(今天开始细看材质加载部分的代码才发现ogre的材质解析原来还有两套,以前的一套是MaterialSerializerQ?.6之后默认使用的是ScriptCompilerMgr.Q?br> 2.调用ScriptCompilerMgr内部ScriptCompiler对象的compile函数Q这里其实也没有q行实际分析Q只是创建ƈ调用了分析和~译的对象:ScriptLexerQScriptParserQScriptCompiler?br> 3.先由ScriptLexerҎ本进行分析,创徏一个包含了所有token信息节点的列表,注意q一步仅仅是所有材质里的词汇单元提取出来而已Q还没有生成CSTQ乃至ASTQ当然这里的CST和AST都是化的Q,q里的实现比较易dScriptLexer::tokenize中对文本的每个字W进行遍历,查找tokenQ在ogre里也是譬如{ } // \ : newline{,当然普通的字符肯定也算的)Q最后生成一个tokenlist?br> 4. 接下来将tokenList传入ScriptParser的parse函数中,q些token节点被Ҏ标记W的关系Q而生成一个简单有父子关系的分析树Q也是CST了。到q里你就发现之前动辄?00个的nodelist已经变成了ConcreteNodeList,当然q里的node每个都是一个树?以最外面的{}为根.当然没有{}的部分就变成一个节?知道扑ֈ{或者别的标记符) 5.接着Q在ScriptCompiler里将之前生成的CST转化为ASTQ这里的具体转化的代码我q没l看。。) 6.|l于要到最后了Q根据每个AST的类型调用不同的ScriptTranslatorQ例如材质的话就取得MaterialTranslator来解释成最l的materialQ然后对其中的每个AST子节点再调用对应的ScriptTranslatorQ(例如passp用PassTranslator{)把所有的值都讄好,q样所有解释的工作l于完成了?br> |的确是个很O长的q程。。个人感觉如果把scriptLexer换成已有的什么文本解释库d的速度会不会得到很多提升呢Q譬如如今比较流行的rapidXml什么的Q毕竟个得这些专门优化文本库的性能q是很高的(虽然我得说尖括号啥的的确不是那么易读~)。当然我觉得ogreq么写的架势很可能有惛_原来普通的脚本配置文g提升成ogre专用的脚本语a的趋势?Q最早只是写了一堆Serializer而已Q?
]]> 囑Ş斚w的几何笔?/title> http://www.shnenglu.com/cty41/archive/2011/04/03/143060.html月下圆舞?/dc:creator>月下圆舞?/author>Sun, 03 Apr 2011 12:26:00 GMT http://www.shnenglu.com/cty41/archive/2011/04/03/143060.html http://www.shnenglu.com/cty41/comments/143060.html http://www.shnenglu.com/cty41/archive/2011/04/03/143060.html#Feedback 0 http://www.shnenglu.com/cty41/comments/commentRss/143060.html http://www.shnenglu.com/cty41/services/trackbacks/143060.html 一,法线变换乘WorldView矩阵的逆的转置 肯定不是直接乘worldView矩阵了,推导其实很简单,Q像我这栯子不行的只能看完了感慨了Q设原mesh上一个顶点ؓv,其法UؓnQWorldViewMatrix为Mwv,那么在object space里,满v dot n == 0,以此我们可以换个形式表示Q也是(v)T * n == 0, (1x4?x1的矩늛乘实际就是点乘了)Q那么在变换之后Q设变化后的点为v'Q变换后的法Uؓn'Q那么同样也需要满个条Ӟ (v')T * n' == 0, 而v' = Mwv * v, 代入=> (Mwv * v)T * n' == 0 => vT * MwvT * n' == 0, 而n'{于Mn * n(我们要求?, =>vT * QMwvT * Mn Q? n == 0 Q?v)T * n == 0Q?那么中间的(MwvT * Mn Q?= I => Mn = (MwvT )-1 ,而因为方阵(当然得有逆的情况。。)的逆的转置{于转置的逆,所以就能证明出来咯~。我刚想了下Q应该行Z的结果也是一LQ这里错了话Q望U正?br> 二,判断Ҏ否在三角形内准备W试的时候正好看到这道题Q以前在ogre代码里也看到q,但原理没qq,google中文搜了下,貌似没什么讲的很好的Q英文一搜就搜到了很多非常详l的。这里就做个整理吧,省得和我一L搜两ơ了~~。设三角形ABCQ点为PQ(向量我就写成行Ş式了~) 1Q面U法Q基本上是最直接低效的,点P如果在三角Ş内,则分割的三个三角形面U和{于ABC面积Q这个不说了?br>2Q网上最常见的,所谓的2D叉乘法,实际上叉乘是不存在于2DI间的,只存在于3D?DQ!。。这个没l看。反正wikiq是哪里看到的)Q但2DI间里我们可以用一点小技巧,是假设一个垂直于xyq面的z_那么2Dq面的z值则一直ؓ0Q设 向量B-A为V1Qx1,y1,z1Q?向量P-A为V2Qx2,y2,z2Q?Ҏ3D叉乘公式Q?x1,y1,z1) X (x2,y2,z2) = (y1z2 - y2z1, x1z2-x2z1, x1y2-x2y1),׃z?Q那么x,y则ؓ0,所以实?d叉乘值就是z|其实我们得到的还是一个向量,它垂直于我们2dI间的xyq面Q不是时针还是逆时针,我们只要按一个方向同样再对另外两边做同样的叉乘,只要得到的这三个值符号一_q就说明点P在三角Ş三边的同一侧,也就是在三角形内了,其实再想惻I只需要确定在两条边的同侧Q那么就是在三角形内了?br>3Q重心法Q从二维I间上看Q我们可以把p当乘以以三角形一个顶点的两条边向量乘以两个标量权重的和,设这两个权重为uQvQ只要u,v大于0Q且和小?Q那么P在三角形内Q所以我们下来就是求出u,v了: =>P = A + u * (C - A)+ v * (B - A), u,vq也是三角形的重心坐标pd?q就是个二元一ơ方E,q里我们化简下,设P-A为v2Q?C - A为v0QB - A为v1Q?br> =>v2 = u * v0 + v*v1, 乘v0,v1我们p得到两个方程 =>v2 * v0 = (u * v0 + v*v1)* v0, (1) v2 * v1 = (u * v0 + v*v1)* v1, (2) 略化。?br>=>u = ((v1 * v1)(v2 * v0) - (v1 * v0)(v2 * v1))/(((v0 * v0)(v1 * v1) - (v0 * v1)(v1 * v0)) v = ((v0 * v0)(v2 * v1) - (v0 * v1)(v2 * v0))/(((v0 * v0)(v1 * v1) - (v0 * v1)(v1 * v0))
]]> 昑֭知识备忘 http://www.shnenglu.com/cty41/archive/2011/03/06/141202.html月下圆舞?/dc:creator>月下圆舞?/author>Sun, 06 Mar 2011 02:25:00 GMT http://www.shnenglu.com/cty41/archive/2011/03/06/141202.html http://www.shnenglu.com/cty41/comments/141202.html http://www.shnenglu.com/cty41/archive/2011/03/06/141202.html#Feedback 0 http://www.shnenglu.com/cty41/comments/commentRss/141202.html http://www.shnenglu.com/cty41/services/trackbacks/141202.html 最q重写自q囑Ş代码Q想想算是第三遍了,写道texture的pool那边Q又见到了D3DPOOL_DEFAULT QManaged, SYSMEM,对这个的理解也算W三ơ了Q以前也大致了解q,区别主要是在系l内存,agp内存Q还有显存上Q这ơ看q块的时候突然又有点茫茫然于是就h搜之Q于是就在ccanan的博客上扑ֈ了更详细?a >http://blog.csdn.net/ccanan/archive/2011/02/24/6204598.aspx 话说以前我的没考虑qcache问题Q还一直天真的觉得agp使用了内存重映射表后速度应该是和video mem一LQ如今一惻Iq种gapt需要Y件层Q或者是g层,不清楚)做个转换的,不考虑cache也肯定是要比原生的video mem慢一拍,只能说当时自qq些知识的时候还不是很透彻?br> 话说Q从博客查知识好归好。。。但我经ؓ了看一个内容然后不心看了别的技术内容然后又看了别的。。。。这是greedy么。。?nbsp;
]]> 实现了简陋的Freetype2在DirectX下显C字?/title> http://www.shnenglu.com/cty41/archive/2010/08/09/122825.html月下圆舞?/dc:creator>月下圆舞?/author>Mon, 09 Aug 2010 11:02:00 GMT http://www.shnenglu.com/cty41/archive/2010/08/09/122825.html http://www.shnenglu.com/cty41/comments/122825.html http://www.shnenglu.com/cty41/archive/2010/08/09/122825.html#Feedback 1 http://www.shnenglu.com/cty41/comments/commentRss/122825.html http://www.shnenglu.com/cty41/services/trackbacks/122825.html 阅读全文 ]]> 矩阵乘向量的序会生悲剧的-.-!! http://www.shnenglu.com/cty41/archive/2010/05/26/116413.html月下圆舞?/dc:creator>月下圆舞?/author>Wed, 26 May 2010 12:19:00 GMT http://www.shnenglu.com/cty41/archive/2010/05/26/116413.html http://www.shnenglu.com/cty41/comments/116413.html http://www.shnenglu.com/cty41/archive/2010/05/26/116413.html#Feedback 5 http://www.shnenglu.com/cty41/comments/commentRss/116413.html http://www.shnenglu.com/cty41/services/trackbacks/116413.html 先传图把 写的q程中遇到写旧的错误Q以前以为只是个问题的Q现在觉得该重视了,关于mul()函数的用法,都知道在U性代数里Q矩阵和向量怹必须首先满矩阵的行数等于向量的列数Q其ơ乘q算Ӟ向量在前矩阵在后。不q在看很多shader代码的时候我发现Q许多h都不注意q问题,而且在大部分情况下颠倒矩阵和向量的顺序也是没问题的。但我写的时候就悲剧了。。?br>譬如Q?Out.Position = mul( g_mWorldViewProjection, inPosition ); 于是乎,昄l果很诡异: 我没深入考虑q现象ؓ何出玎ͼ不过觉得肯定与乘法顺序有养I所以以后还是乖乖地按规则来了。。脓在此供\人参考了~~ 原理q两天补上,q两天想实现的东西好多,大学的破课更多。。faint。。?br> ]]> 没事拿DXUT实现了Parallax mapQ发帖纪念下~~ http://www.shnenglu.com/cty41/archive/2010/05/22/116130.html月下圆舞?/dc:creator>月下圆舞?/author>Sat, 22 May 2010 13:22:00 GMT http://www.shnenglu.com/cty41/archive/2010/05/22/116130.html http://www.shnenglu.com/cty41/comments/116130.html http://www.shnenglu.com/cty41/archive/2010/05/22/116130.html#Feedback 0 http://www.shnenglu.com/cty41/comments/commentRss/116130.html http://www.shnenglu.com/cty41/services/trackbacks/116130.html ]]> 四月~写场景~辑器的ȝ http://www.shnenglu.com/cty41/archive/2010/05/06/114524.html月下圆舞?/dc:creator>月下圆舞?/author>Thu, 06 May 2010 00:38:00 GMT http://www.shnenglu.com/cty41/archive/2010/05/06/114524.html http://www.shnenglu.com/cty41/comments/114524.html http://www.shnenglu.com/cty41/archive/2010/05/06/114524.html#Feedback 4 http://www.shnenglu.com/cty41/comments/commentRss/114524.html http://www.shnenglu.com/cty41/services/trackbacks/114524.html q是q稚的想法都该写下来?br> 4月中Q编辑器底层大改Q可以说q~辑器本来的大部分结构学的是OgitorQ不q实际上E序最下面的结构当时大家没学OgitorQ最下面的结构指的是Ogitor对于~辑器对象的具体属性都采用了专门的属性容器,OgitorProperty<T>Q当时就以ؓogitor只是Z解耦的Q,{我们把大部分基本的功能都实CQ地形,光照Q实体,地Ş~辑Q草体)Q回q头来想加撤销q原的时候发C好办了,Q想一惻I光以基本变量Qbool{原子类型,Ogre::Vector3{基本数据类型)来保存具体编辑器的编辑属性的话,Ҏ没办法撤销q原Q于是我׃底层改v了?br> 1.去除q多的单Ӟ q一Ҏ我和兄弟相当赞同的,q多L的单件往往在方便的同时破坏了整个程序的l构Q改之和Ogitor已知Q采用基cȝObjectList的方式来理所有的~辑器对象实例,q样所有的c都能得到统一理Q查找指定对象只需以它的类型来查找卛_Q需要单独更新的对象则加入到UpdateList中,然后在P代更新列表逐个更新卛_Q在不用我们自己在主体里来回dUpdate语句了。(q主要是Z解耦)但我想了x个地方还是没学ogitorQ它里面每个~辑器对象都有所有的parentEditorQ这样则形成一U树形结构,q样的设计更加紧凑,不过我们暂时觉得没什么太大必要加Q就攑ּ了(开始对OgitorProperty<T>也是q个x Q?br> 2. 属性注册: 属性部分所有内容,我还没全看明白。一是由于撤销q原q没弄,二是信号那块我也q没加(虽然树Şcȝ代码是全扒过来了...Q。不q就我目前看的部分而言QOgitorq帮家伙写得q真,利用模板trait来调用对应变量类型函敎ͼW二ơ见Q第一ơ在STL源码剖析里,那块和开始的部分我能看懂...Q,光看到这个内容小菜我兴奋不已了。注册的部分实际不难Q好好看看PROPERTY_PTR和SETTERQGETTERq些个宏p明白Q无非是在对应编辑器的工厂map表里先添加定义,然后利用q些个宏为mPropertiesd属性变量,以及变量相关联的讄其数值的函数?br>调试中犯的一些搞W错误: 1.前天在重写BaseObject的GetNode函数Q返回编辑器对象所在的场景节点Q若是基cd为NULLQ只有是NodeObject或其以上的才有|q里没学Ogitor的parentnodeQ,发现E序里实际调用的时候就是不调NodeObject::GetNode而是调BaseObject::GetNode()Q改了会都对C++产生了疑惑。。。还专门写了试来看看究竟调用哪个,l构也应该是NodeObject::GetNodeQ这问题׃我二十分钟的旉Q才发现自己在承方法声明上忘记加const了。。。那一ȝ感慨啊。。还是得l常把Effective C++拿出来摸一摸,Mȝ。?br> 改着改着Q突然在惻I当有高手源码借鉴的时候,作ؓ我这L菜Q指的是C++学了1q多Q功底自认ؓ不错Q但~Z实际l验的hQ,是改照单全理解了再写q是边理解边按自׃改的较差Ҏd现呢Q我觉得是后者,因ؓ后者L需要去修改Q而在修改的过E中才是存疑解惑的过E,q个q程中小菜才能明白ؓ何高手如?#8220;ȝ”地绕道偏行。还有,正如tonykee说的Q编辑器的确是个无底z~~要懂得适可而止的?br> 分nҎ闻: 1.GoogleCode和SVN升?G了(具体貌似?G更新I间Q另?G存储Q这一Ҏ太明白。。)Q嫌sourceForgeȝ的有音咯~?br> 2.Ogitorq帮家伙更新的越来越快了Q当时还l他们提意见说应该做成简单material脚本~写的编辑器Q刚说完Qh家就回说Q已l开始做?img src="http://www.shnenglu.com/CuteSoft_Client/CuteEditor/images/emdgust.gif" align="absmiddle" border="0">带一提,Ogitor有中文版了,感谢Coho的翻译,虽然有些地方q没译好,不过我空了也会帮帮他们忙?img src="http://www.shnenglu.com/CuteSoft_Client/CuteEditor/images/emsmiled.gif" align="absmiddle" border="0"> 3.星际7?7日预售,很期待它的银河编辑器啊~?br> q两天完成撤销q原后再更新吧,希望我写的ؕ七八p的东西对大家有帮助?br> ]]> [学习心得]跟着Ogitor学做~辑?-实现草体?/title> http://www.shnenglu.com/cty41/archive/2010/04/03/111514.html月下圆舞?/dc:creator>月下圆舞?/author>Sat, 03 Apr 2010 11:18:00 GMT http://www.shnenglu.com/cty41/archive/2010/04/03/111514.html http://www.shnenglu.com/cty41/comments/111514.html http://www.shnenglu.com/cty41/archive/2010/04/03/111514.html#Feedback 3 http://www.shnenglu.com/cty41/comments/commentRss/111514.html http://www.shnenglu.com/cty41/services/trackbacks/111514.html 我和朋友一块在做游戏编辑器l手Q鉴于大家以前都没有l验Q就会写写图形。就照着开源的Ogitor学习|。我首先负责的就是草体部分,考虑到哥是最q。。。所以写到现在才完工。。。讲下学习心得吧Q只写下思\Q具体的q程懒得写。(高手勿看了。。) Ogitor的代码写的非常易读,要是你能~译ơogitor的话Q跟着E序C边就能很快清楚其l构。所以嘛Q先提下~译Qogitor的编译其实还是有些麻烦的Q尤其是对像我这U命令行菜鸟来说Qogitor的wiki上有详细的教E,[url]http://wiki.ogitor.org/Building+Ogitor&structure=Development[/url]基本很完善了,不过我还是遇到许多麻烦,强烈装vs2008Q因为Qt有专门适用08的源码包Q而且记着一定按着Jacmoe写的步骤来,别先qcmake那块Q先?/span>QtPropertyBrowser弄好Q设|环境变量的时候我Z个小白错误,在PATH变量后面加Qt目录前加了个I格Q导致系l不接受后面的\径。(。。。悲剧的很。。)然后的步骤就没啥问题了。如果你在编译的时候出玎ͼvs08命o行下或者Qt Creator下,后者不Q得改qt的编译器Q我反正没找到在哪里攏V。。) [code] g++:
Documents\Programmer\Ogre\unstable-06e26a1bed18\qtOgitor\qtpropertybrowser-2.5\lib\libQtSolutions_PropertyBrowser-2.5d.a:
No such file or directory mingw32-make[1]: *** [..\lib\QtSolutions_PropertyBrowser-2.5d.dll] Error 1 mingw32-make: *** [debug-all] Error 2 Exited with code 2. Error while building project buildlib When executing build step 'Make'
[/code]记着肯定是你装了mingwQ编译得用vs的编译器?br> Ogitor的草体也是借由PageGemotry?下面~写为PG)实现的,Ogre?Addons fourm里有详细介绍Q这个库相当强大Q而且使用MQ简单的刯体我们利用里面的GrassLoader卛_Q就是公告板。这块代码他们没有写在ogPageGeometry里,那块别看了,否则你们会向我一L带跑的。IsmailQOgitor的主要开发h员)这块写在TerrainGroupManager里,直接和地形刷交互Q仔l想惻Iq也是最好的Ҏ。(我走工厂Ҏ的歪路想?Q?天才拐回来。。之前没发现他写?/span>TerrainGroupManager里了。。?/span>Q由于PG实现草体的加载只有两U,要么随机Q要么通过加蝲密度U理。不像treeLoader一P可以直接AddEntity。(xZ么)所以要惛_现草体刷Q咱得创徏一张动态纹理来实现了。我们修Ҏ个TerrainPageObjectQ页地ŞQ,向其加入GrassLayer。而在TerrainGroupManager里保留具体的更新者PagedGeometry和GrassLoader。这里不做具体解释,ȝ看PG的源码,10个文件左叻IQ一半HeaderQ一半SourceQ代码也很易懂。还有,Ogitor的工厂对象注册机制很好,Q我对设计模式没什么研I不知道叫啥。。)新手q个一定得l看看,Ogitor在解耦上做的也近乎完,面向对象的界面编EQt加上Ismail自己写的很多基类Q得程序分ȝ很好Q推荐看看OgitorsPropertyc,里面是照着Qt的信h制写的,q块我也没深看。我们用的是MFCQ所以这块没有写成纯面向对象的,用的q是L型的单g。我兄弟说Ogitor那样效率差点Q不q我觉得挺酷的,毕竟写的漂亮。Ogitor的工厂对象的初始化部分是写在CreateProperties里的Q因多变量需要有用户修改Q所以构造函数没有初始化所有变量?br> 最后带句:Ogitor的大哥们相当热情Q有问题多去他们的forum 里提Q基本第二天回了。(有时差) ]]> [非原创]Ogre里的Plane拑֏ http://www.shnenglu.com/cty41/archive/2010/03/15/109760.html月下圆舞?/dc:creator>月下圆舞?/author>Mon, 15 Mar 2010 12:52:00 GMT http://www.shnenglu.com/cty41/archive/2010/03/15/109760.html http://www.shnenglu.com/cty41/comments/109760.html http://www.shnenglu.com/cty41/archive/2010/03/15/109760.html#Feedback 0 http://www.shnenglu.com/cty41/comments/commentRss/109760.html http://www.shnenglu.com/cty41/services/trackbacks/109760.html 我在Ogre论坛里查了会找了个非常好的实现方法,下面把这个帖子脓出:http://www.ogre3d.org/forums/viewtopic.php?t=23440&highlight= ]]> Ogitor0.4的加载改q?/title> http://www.shnenglu.com/cty41/archive/2010/02/21/108171.html月下圆舞?/dc:creator>月下圆舞?/author>Sun, 21 Feb 2010 14:44:00 GMT http://www.shnenglu.com/cty41/archive/2010/02/21/108171.html http://www.shnenglu.com/cty41/comments/108171.html http://www.shnenglu.com/cty41/archive/2010/02/21/108171.html#Feedback 0 http://www.shnenglu.com/cty41/comments/commentRss/108171.html http://www.shnenglu.com/cty41/services/trackbacks/108171.html 阅读全文 ]]>
ҹþþþþþþ |
þþƷëƬѹۿ |
þҹɫƷ |
˺ݺۺ88ۺϾþ |
þۺɫݺ |
պƷþĻ |
þþþþþ99Ʒѹۿ |
þ99þóѲ |
ƷŮ߳þþ |
ǾþþƷ |
Ʒþþþþù |
99þùں;Ʒ1ӳ |
91Ʒۿ91þþþþ |
ŷۺϾþþ
|
þþƷĻ |
˾þۺ |
þùƵ |
þþþƷ鶹
|
þþþùƷ۲ӰԺ
|
ŷ þ
|
Ʒþþþþþþþ |
þùƵ |
Ӱһþþþó˾Ʒۺ
|
ŷþƷ |
þ97Ʒþþþþþò |
ھƷþþþþþþõӰ |
ձƷþþþþþþ |
þþ |
þۺϸϾþúݺݺ97ɫ |
һþ֪ۺϾþ |
˼˼þ99ѾƷ6 |
99þþžžƷ |
9þ9þþƷ |
þþùƷ |
Ʒþþ |
ھƷþþӰԺ |
þþþþƷ |
þwwƷw˳ |
þþƷư |
þþþҹҹҹƷ |
Ʒþþþû
|