1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#include"Terrain.h"
void Terrain::Init(LPDIRECT3DDEVICE9 D3DDEV)
{
d3ddev = D3DDEV;
D3DXCreateTextureFromFile(D3DDEV,"C:\\Program Files (x86)\\3D\\Bodensteine12.JPG",&tex);
D3DDEV->SetTexture(0,tex);
CUSTOMVERTEX vertices[(MAP_WIDTH+1)*(MAP_HEIGHT+1)];
for(int x = 0;x < MAP_WIDTH+1;x++)
{
for(int z = 0;z < MAP_HEIGHT+1;z++)
{
vertices[x+z*(MAP_WIDTH+1)].x = x;
vertices[x+z*(MAP_WIDTH+1)].y = 0;
vertices[x+z*(MAP_WIDTH+1)].z = z;
vertices[x+z*(MAP_WIDTH+1)].u = x;
vertices[x+z*(MAP_WIDTH+1)].v = z;
}
}
D3DDEV->CreateVertexBuffer((MAP_WIDTH+1)*(MAP_HEIGHT+1)*sizeof(CUSTOMVERTEX),0,D3DFVF_XYZ | D3DFVF_TEX1,D3DPOOL_DEFAULT,&v_buffer,NULL);
VOID* pVoid;
v_buffer->Lock(0,0,(void**)&pVoid,0);
memcpy(pVoid,vertices,sizeof(vertices));
v_buffer->Unlock();
int index = 0;
short indices[MAP_WIDTH*MAP_HEIGHT*6];
for(int x = 0;x < MAP_WIDTH;x++)
{
for(int z = 0;z < MAP_HEIGHT;z++)
{
short downLeft = x + z * (MAP_WIDTH+1);
short downRight = (x+1) + z * (MAP_WIDTH+1);
short upLeft = x + (z+1) * (MAP_WIDTH+1);
short upRight = (x+1) + (z+1) * (MAP_WIDTH+1);
indices[index++] = downLeft;
indices[index++] = upLeft;
indices[index++] = downRight;
indices[index++] = downRight;
indices[index++] = upLeft;
indices[index++] = upRight;
}
}
D3DDEV->CreateIndexBuffer(MAP_WIDTH*MAP_HEIGHT*6*sizeof(short),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&i_buffer,NULL);
i_buffer->Lock(0,0,&pVoid,0);
memcpy(pVoid,indices,sizeof(indices));
i_buffer->Unlock();
}
void Terrain::Render(void)
{
d3ddev->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1);
d3ddev->SetStreamSource(0,v_buffer,0,sizeof(CUSTOMVERTEX));
d3ddev->SetIndices(i_buffer);
d3ddev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,(MAP_WIDTH+1)*(MAP_HEIGHT+1),0,MAP_WIDTH*MAP_HEIGHT*2);
}
void Terrain::Clean(void)
{
}
|