游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2144|回复: 3

我想把lod地形用hlsl渲染,如何做呀? 

[复制链接]

75

主题

385

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
发表于 2008-1-5 18:27:00 | 显示全部楼层 |阅读模式

//---------------------------------------------
//渲染一个节点
//---------------------------------------------
void CTerrain::RenderNode(float x,float z,int NodeSize)
{  
   int i;
   int iX = x;
   int iZ = z;
   CUSTOMVERTEX   vertex[10];

   int CurrentNodeSize = NodeSize/2;
   i=0;

   GenerateVertex(x,z,vertex);
   i++;

   GenerateVertex(x+CurrentNodeSize,z+CurrentNodeSize,vertex);
   i++;

   if((iX+NodeSize)<= MapLength &&
                (CheckifSplit(iX+NodeSize,iZ)==TRUE))  //检查临近节点有没有分割,防止产生裂缝
                                                       //每条边的中点都必须检查
   {
      GenerateVertex(x+CurrentNodeSize,z,vertex);
          i++;
               
   }

   GenerateVertex(x+CurrentNodeSize,z-CurrentNodeSize,vertex);
   i++;

   if((iZ-NodeSize)>=0 &&
                (CheckifSplit(iX,iZ-NodeSize)==TRUE)) //检查临近节点有没有分割,防止产生裂缝
   {
      GenerateVertex(x,z-CurrentNodeSize,vertex);
          i++;
               
   }

   GenerateVertex(x-CurrentNodeSize,z-CurrentNodeSize,vertex);
   i++;

   if((iX-NodeSize)>=0 &&
         (CheckifSplit(iX-NodeSize,iZ)==TRUE))//检查临近节点有没有分割,防止产生裂缝
   {
      GenerateVertex(x-CurrentNodeSize,z,vertex);
          i++;
               
   }

   GenerateVertex(x-CurrentNodeSize,z+CurrentNodeSize,vertex);
   i++;

   if((iZ+NodeSize)<=MapLength &&
                (CheckifSplit(iX,iZ+NodeSize)==TRUE))//检查临近节点有没有分割,防止产生裂缝
   {
           GenerateVertex(x,z+CurrentNodeSize,vertex);
           i++;

   }

   GenerateVertex(x+CurrentNodeSize,z+CurrentNodeSize,vertex);
   i++;

   DrawOneNode(vertex,i);
          
   return ;
}

//---------------------------------------------
//渲染一个节点
//---------------------------------------------
void CTerrain::RenderNode(float x,float z,int NodeSize)
{  
   int i;
   int iX = x;
   int iZ = z;
   CUSTOMVERTEX   vertex[10];

    BOOL     DrawOneNode(CUSTOMVERTEX *SrcVertex,int VertexNum)  //根据顶点数据渲染出一个正方
   {   
       
          pDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,VertexNum-2,SrcVertex,sizeof(CUSTOMVERTEX));
       
       count +=(VertexNum-2);
          
           return TRUE;
   }
上面是部分代码,是扇型渲染得
如何改为HLSL渲染呢?
好像如下代码,我渲染出来是黑屏!!!!
mTerrainFX->SetMatrix(mhWVP, &matview);
        mTerrainFX->SetTechnique(mhTech);

        UINT numPasses = 0;
        mTerrainFX->Begin(&numPasses, D3DXFX_DONOTSAVESHADERSTATE);
        mTerrainFX->BeginPass(0);

        /*d3d::gd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0,
                mNumVertices, 0, mNumTriangles);*/
Render(MapLength/2,MapLength/2,MapLength);           //渲染整个地形
        mTerrainFX->EndPass();

        mTerrainFX->End();

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2008-1-5 20:28:00 | 显示全部楼层

Re:我想把lod地形用hlsl渲染,如何做呀? 

追求技术本不是你的错,但是拿它想当然就是你的不对了。 [em21]还是从HLSL基础学起吧 [em19]

15

主题

202

帖子

207

积分

中级会员

Rank: 3Rank: 3

积分
207
QQ
发表于 2008-1-5 21:47:00 | 显示全部楼层

Re:我想把lod地形用hlsl渲染,如何做呀? 

两者好像没什么联系吧.

75

主题

385

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
 楼主| 发表于 2008-1-6 01:33:00 | 显示全部楼层

Re: 我想把lod地形用hlsl渲染,如何做呀? 

photo
sf_20081613254.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 22:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表