惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
IT之家
IT之家
V
Visual Studio Blog
The Cloudflare Blog
博客园 - 司徒正美
Jina AI
Jina AI
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
S
SegmentFault 最新的问题
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿
博客园 - Franky
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - cproom

对人脑学习的一些领悟 象形法,快速记忆魔方公式 用Nvidia的PerfHud剖析《寻仙》 一种强大、灵活的方法,通过游戏逻辑参数化的控制特效表现 通过游戏逻辑对骨骼动画角色的局部骨骼进行控制,让游戏角色更加生动有趣! 在游戏中实现一个支持表情动画和转义字符的聊天文本框 一种适合网游的界面系统设计方案 一种3D引擎的多线程设计方案 场景管理,放弃场景图 对上一篇的补充,在用alpha test方式绘制草地、树林时,一种避免排序又能达到理想效果的技巧 大规模草地的快速绘制排序 地形编辑器中的昼夜变化效果 镜头眩光(lens flare),截图 实现了昼夜变化、动态天空盒,上图 给Portal一些感性认识(2) 给Portal一些感性认识 很久没更新了,总结一下最近的工作进展(附截图) 完成通过法线贴图进行逐像素光照的功能,发图祝贺! 一种3D游戏碰撞检测解决方案
GeoMipMap地形万能索引生成器
cproom · 2007-06-11 · via 博客园 - cproom

此函数用于生成GeoMipMap地形算法的索引Buffer,可以生成一个由参数指定的特定Patch的所引数据,生成的几何体为三角形条带,生成三角形中有部分退化三角形,用于三角形条带的连接。生成的三角形是CCW或者CW一致的。

pIndex     :指向索引Buffer当前填充位置
wWidth    :Patch的大小,取值范围9,17,33......
wLevel     :Lod级别,取值范围0,1,2,3......,数字越小细节级越高,0为最高细节级
bUp,bDown,bLeft,bRight:上下左右四个方向是否连接低细节级Patch
返回值    :返回填充的索引数据个数,由于生成的是三角形条带,实际生成的三角形数目为返回值减2

int GenerateStripIndex(WORD* pIndex, WORD wWidth, WORD wLevel, bool bUp, bool bDown, bool bLeft, bool bRight)
{
     WORD i, j;
     WORD w1, w2;
     WORD wPower 
= 1;

     
for( i=0; i<wLevel; i++ )
          wPower 
*= 2;

     WORD wGridWdith 
= (wWidth - 1/ wPower;
     WORD wPitch 
= wGridWdith * 2 + 4;
     WORD 
*= pIndex;
     w1 
= 0;

     
for( j=0; j < wGridWdith / 2; j++ )
     
{
          w2 
= w1 + wWidth * wPower;
          
for( i=0; i < wGridWdith; i++)
          
{
               
*p++ = w1;
               
*p++ = w2;
               w1 
+= wPower;
               w2 
+= wPower;
          }

          
*p++ = w1;
          
*p++ = w2, *p++ = w2, *p++ = w2;

          w1 
= w2 + wWidth * wPower;
          
for( i=0; i < wGridWdith; i++)
          
{
               
*p++ = w1;
               
*p++ = w2;
               w1 
-= wPower;
               w2 
-= wPower;
          }

          
*p++ = w1;
          
*p++ = w2, *p++ = w1, *p++ = w1;
     }


     
if( bDown )
     
{
          p 
= pIndex + 2;
          
for( i=0; i<wGridWdith / 2; i++)
          
{
               (
*p) -= wPower;
               p 
+= 4;
          }

     }


     
if( bUp )
     
{
          p 
= pIndex + wPitch * (wGridWdith - 1+ 2;
          
for( i=0; i<wGridWdith / 2; i++)
          
{
               (
*p) += wPower;
               p 
+= 4;
          }

     }


     
if( bRight )
     
{
          
for( i=0; i<wGridWdith / 2; i++)
          
{
               p 
= pIndex + wPitch * 2 * i + wPitch - 3;
               p[
0+= wWidth * wPower;
               p[
1+= wWidth * wPower;
               p[
2+= wWidth * wPower;
               p[
4+= wWidth * wPower;
          }

     }


     
if( bLeft )
     
{
          
for( i=0; i<wGridWdith / 2; i++)
          
{
               p 
= pIndex + wPitch * 2 * i;
               p[
1= p[0];
               p[wPitch 
* 2 - 3-= wWidth * wPower;
          }

     }


     
return (wGridWdith * 2 + 4* wGridWdith - 2;
}