D3D

不知何年何月得常所愿, 得,得,得,得常所愿

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  52 随笔 :: 0 文章 :: 208 评论 :: 0 Trackbacks

 

 createTerrainDecal("Ogre/Eyes");
 setTerrainDecal(613, 933, 64);

void BasisManager::createTerrainDecal(char* szMaterialName)
{
    mTerrainDecal 
= new Ogre::ManualObject("decal");
    mSceneMgr
->getRootSceneNode()->createChildSceneNode()->attachObject(mTerrainDecal);
    mTerrainDecal
->setCastShadows(false);

    
int x_size = 1;  
    
int z_size = 1;
    mTerrainDecal
->begin(szMaterialName, Ogre::RenderOperation::OT_TRIANGLE_LIST);

    
for (int i=0; i<x_size; i++)
    {
        
for (int j=0; j<=z_size; j++)
        {
            mTerrainDecal
->position(Ogre::Vector3(i, 0, j));
            mTerrainDecal
->textureCoord((float)i / (float)x_size, (float)j / (float)z_size);
        }
    }

    
for (int i=0; i<x_size; i++)
    {
        
for (int j=0; j<z_size; j++)
        {
            mTerrainDecal
->quad( i * (x_size+1+ j, i * (x_size+1+ j + 1,
                (i 
+ 1* (x_size+1+ j + 1,(i + 1* (x_size+1+ j);
        }
    }

    mTerrainDecal
->end();

}    
//------------------------------------------------------------------------------------------
void BasisManager::setTerrainDecal(float x, float z, float radius)
{
    Ogre::Real x1 
= x - radius;
    Ogre::Real z1 
= z - radius;
    
int x_size = 64;
    
int z_size = 64;

    Ogre::Real x_step 
= radius * 2/ x_size;
    Ogre::Real z_step 
= radius * 2/ z_size;

    mTerrainDecal
->beginUpdate(0);

    
for (int i=0; i<=x_size; i++)
    {
        
for (int j=0; j<=z_size; j++)
        {    
            mTerrainDecal
->position(Ogre::Vector3(x1, HeightFunction::getTerrainHeight(x1, z1)+0.5, z1));
            mTerrainDecal
->textureCoord((float)i / (float)x_size, (float)j / (float)z_size);

            z1 
+= z_step;
        }

        x1 
+= x_step;

        z1 
= z - radius;
    }

    
for (int i=0; i<x_size; i++)
    {
        
for (int j=0; j<z_size; j++)
        {
            mTerrainDecal
->quad( i * (x_size+1+ j, i * (x_size+1+ j + 1
                (i 
+ 1* (x_size+1+ j + 1, (i + 1* (x_size+1+ j);
        }
    }

    mTerrainDecal
->end();

}

 

 

posted on 2009-05-20 17:56 王博炜 阅读(2077) 评论(5)  编辑 收藏 引用 所属分类: C\C++D3D

评论

# re: ogre贴花(ManualObject) 2009-05-20 20:27 星绽紫辉
the demo scene's ground is so perfect...   回复  更多评论
  

# re: ogre贴花(ManualObject) 2009-05-21 18:00 魔鬼螳螂
噢,看上去很不错,不搞英雄王座了?  回复  更多评论
  

# re: ogre贴花(ManualObject) 2009-05-27 15:50 王博炜
@魔鬼螳螂


不搞王座了... 用ogre搞mmorog去了. 哎  回复  更多评论
  

# re: ogre贴花(ManualObject) 2009-05-28 22:19 李锦俊
看上去好眼熟。这terrain不就是Editable Terrain Manager么?
一个静态贴花不难,难的是大量动态的贴花的效率问题如何保证。
还有在mesh上如何贴贴花?要在mesh上贴贴花,恐怕要用到静态碰撞检测算法来查询模型上哪些三角形是在这个贴花范围中,再渲染这些三角形。
当在大型场景中的时候,这种碰撞算法效率会下降很快,此时又要考虑碰撞体的场景管理。
有了场景管理,又涉及到动态的场景物件,比如电梯什么的。。。。
一个小小的贴花,好麻烦啊~
欢迎到我blog作客:http://www.lijinjun.com  回复  更多评论
  

# re: ogre贴花(ManualObject) 2009-06-03 15:29 魔鬼螳螂
@王博炜
你们公司决定放弃用王座来搞了吗?明智的决择啊!  回复  更多评论
  


专题:Android  iPad jQuery Chrome OS

博客园首页  IT新闻  知识库  学英语  C++程序员招聘
标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
每天10分钟,轻松学英语
网站导航: