GeoMipMap地形万能索引生成器

此函数用于生成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

None.gif int  GenerateStripIndex(WORD *  pIndex, WORD wWidth, WORD wLevel,  bool  bUp,  bool  bDown,  bool  bLeft,  bool  bRight)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif     WORD i, j;
InBlock.gif     WORD w1, w2;
InBlock.gif     WORD wPower 
= 1;
InBlock.gif
InBlock.gif     
for( i=0; i<wLevel; i++ )
InBlock.gif          wPower 
*= 2;
InBlock.gif
InBlock.gif     WORD wGridWdith 
= (wWidth - 1/ wPower;
InBlock.gif     WORD wPitch 
= wGridWdith * 2 + 4;
InBlock.gif     WORD 
*= pIndex;
InBlock.gif     w1 
= 0;
InBlock.gif
InBlock.gif     
for( j=0; j < wGridWdith / 2; j++ )
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif{
InBlock.gif          w2 
= w1 + wWidth * wPower;
InBlock.gif          
for( i=0; i < wGridWdith; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif          
dot.gif{
InBlock.gif               
*p++ = w1;
InBlock.gif               
*p++ = w2;
InBlock.gif               w1 
+= wPower;
InBlock.gif               w2 
+= wPower;
ExpandedSubBlockEnd.gif          }

InBlock.gif          
*p++ = w1;
InBlock.gif          
*p++ = w2, *p++ = w2, *p++ = w2;
InBlock.gif
InBlock.gif          w1 
= w2 + wWidth * wPower;
InBlock.gif          
for( i=0; i < wGridWdith; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif          
dot.gif{
InBlock.gif               
*p++ = w1;
InBlock.gif               
*p++ = w2;
InBlock.gif               w1 
-= wPower;
InBlock.gif               w2 
-= wPower;
ExpandedSubBlockEnd.gif          }

InBlock.gif          
*p++ = w1;
InBlock.gif          
*p++ = w2, *p++ = w1, *p++ = w1;
ExpandedSubBlockEnd.gif     }

InBlock.gif
InBlock.gif     
if( bDown )
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif{
InBlock.gif          p 
= pIndex + 2;
InBlock.gif          
for( i=0; i<wGridWdith / 2; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif          
dot.gif{
InBlock.gif               (
*p) -= wPower;
InBlock.gif               p 
+= 4;
ExpandedSubBlockEnd.gif          }

ExpandedSubBlockEnd.gif     }

InBlock.gif
InBlock.gif     
if( bUp )
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif{
InBlock.gif          p 
= pIndex + wPitch * (wGridWdith - 1+ 2;
InBlock.gif          
for( i=0; i<wGridWdith / 2; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif          
dot.gif{
InBlock.gif               (
*p) += wPower;
InBlock.gif               p 
+= 4;
ExpandedSubBlockEnd.gif          }

ExpandedSubBlockEnd.gif     }

InBlock.gif
InBlock.gif     
if( bRight )
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif{
InBlock.gif          
for( i=0; i<wGridWdith / 2; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif          
dot.gif{
InBlock.gif               p 
= pIndex + wPitch * 2 * i + wPitch - 3;
InBlock.gif               p[
0+= wWidth * wPower;
InBlock.gif               p[
1+= wWidth * wPower;
InBlock.gif               p[
2+= wWidth * wPower;
InBlock.gif               p[
4+= wWidth * wPower;
ExpandedSubBlockEnd.gif          }

ExpandedSubBlockEnd.gif     }

InBlock.gif
InBlock.gif     
if( bLeft )
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif{
InBlock.gif          
for( i=0; i<wGridWdith / 2; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif          
dot.gif{
InBlock.gif               p 
= pIndex + wPitch * 2 * i;
InBlock.gif               p[
1= p[0];
InBlock.gif               p[wPitch 
* 2 - 3-= wWidth * wPower;
ExpandedSubBlockEnd.gif          }

ExpandedSubBlockEnd.gif     }

InBlock.gif
InBlock.gif     
return (wGridWdith * 2 + 4* wGridWdith - 2;
ExpandedBlockEnd.gif}

None.gif

转载于:https://www.cnblogs.com/cproom/archive/2007/06/11/779329.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值