XY
第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力第一次写,还不知道写什么,想一想影响力
1
void 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
53
void 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
}