语诚

天笑

 

第一篇

                                                                                                                                          XY
         第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力

 1void ManualDecal::createMeshDecal(Ogre::String meshName, Ogre::String matName, Ogre::Real rad)
 2{
 3    mRad = rad;
 4
 5    //manualObject
 6    mMeshDecal = new Ogre::ManualObject(meshName);
 7    mMeshDecal->setCastShadows(false);
 8    mMeshDecal->setDynamic(true);
 9    mMeshDecal->setRenderQueueGroup(RENDER_QUEUE_WORLD_GEOMETRY_2);//非常的靠后
10
11    //位置重要
12    mSceneMgr->getRootSceneNode()->attachObject(mMeshDecal);
13
14    // number of polygons
15    int  x_size = 8;  
16    int  z_size = 8;
17
18    //注意,贴花的mesh使用的财质是Brush
19    //位于D:\DIMINE2009\bin\Media\terrainZone\Crosshairs.material文件
20    //材质使用alpha通道,行成透明效果,但是用这个贴花作地形编辑时仍是方形,只是用它用纹理编辑时是圆形?????
21    //它的纹理就是多个红色的圈那个图片
22    mMeshDecal->begin(matName, Ogre::RenderOperation::OT_TRIANGLE_LIST);
23
24    //
25    for (int i=0; i<=x_size; i++)
26    {
27        for (int j=0; j<=z_size; j++)
28        {
29            mMeshDecal->position(Ogre::Vector3(i, 0, j));
30
31            mMeshDecal->textureCoord((float)i / (float)x_size, (float)j / (float)z_size);
32        }

33    }

34
35    //拓扑
36    for (int i=0; i<x_size; i++)
37    {
38        for (int j=0; j<z_size; j++)
39        {
40            //顺时针四边形
41            mMeshDecal->quad( i * (x_size+1+ j,
42                              i * (x_size+1+ j + 1,
43                             (i + 1* (x_size+1+ j + 1,
44                             (i + 1* (x_size+1+ j);
45        }

46    }

47
48    mMeshDecal->end();
49}
 
50
51//这个函数在movseMove里动态设置贴花的位置, x, z 指的是decal在场景中的实际位置
52//为了让一个静态的mesh具体贴花效果,当然是要将场景中的真实坐标传给mesh,这样mesh才能贴在地形上面, 只是高度 + 1
53void ManualDecal::setMeshDecal(Ogre::Real x, Ogre::Real z)
54{
55    mPos = Ogre::Vector2(x,z);
56
57    //贴花左上角在场景中的实际坐标
58    Ogre::Real x1 = x - mRad;
59    Ogre::Real z1 = z - mRad;
60
61    //由花上的每个顶点在场景中的步长 = 20 * 2 / 8
62    Ogre::Real x_step = mRad * 2 / x_size;
63    Ogre::Real z_step = mRad * 2 / z_size;
64
65    mMeshDecal->beginUpdate(0);
66
67    // redefine vertices, 照样是打 8 * 8 个点,只是点的坐标不同k
68    for (int i=0; i<=x_size; i++)
69    {
70        for (int j=0; j<=z_size; j++)
71        {
72            mMeshDecal->position( Ogre::Vector3(x1, mTerrainInfo->getHeightAt(x1, z1) + 1, z1) );
73            
74            mMeshDecal->textureCoord((float)i / (float)x_size, (float)j / (float)z_size);
75            
76            z1 += z_step;
77        }

78
79        x1 += x_step;    //下一列
80
81        z1 = z - mRad;   //回到列头
82    }

83
84    // redefine quads
85    for (int i=0; i<x_size; i++)
86    {
87        for (int j=0; j<z_size; j++)
88        {
89            mMeshDecal->quad( i * (x_size + 1+ j,
90                              i * (x_size + 1+ j + 1,
91                             (i + 1* (x_size + 1+ j + 1,
92                             (i + 1* (x_size + 1+ j);
93        }

94    }

95
96    mMeshDecal->end();
97}

 

posted on 2009-11-19 22:08 语诚 阅读(107) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理


导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论