터레인이 평평해서 큐브가 잘 돌아다니는거 같다.

터레인에 높이를 만들어보자.


랜드를 이용해 y값을 랜덤하게 줬더니...

매우 이상함.


다른방법이 뭐가 있을까 찾아보다가 코사인곡선을 이용해봤다,

오ㅋㅋ 지형이 그럴듯하게 됨.


큐브y에 터레인 y 적용하기.

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
void CGround::TerrainHeightApplied( CGameObject* _pTarget )
{
    int conut = 128;
    int size = 1;
    Vector3 TargetPosition = _pTarget->transform->position;
 
    int nX = int(TargetPosition.x / size);
    int nZ = int(TargetPosition.z / size);
 
    if(nX < 0 || nX >= conut || nZ < 0 || nZ >= conut)
        return;
 
    int _0 = nX + 0 + (conut+1* (nZ+0);
    int _1 = nX + 0 + (conut+1* (nZ+1);
    int _2 = nX + 1 + (conut+1* (nZ+0);
    int _3 = nX + 1 + (conut+1* (nZ+1);
 
    float dX = TargetPosition.x - nX * size;
    float dZ = TargetPosition.z - nZ * size;
 
    Vector3 vcX;
    Vector3 vcZ;
    Vector3 vcOut;
    VERTEX_TEXTURE* pVB = m_pModel->GetVertexBegine();
 
    if((dX+dZ) <= size// 아래 쪽 삼각형
    {
        vcX = pVB[_2].position - pVB[_0].position;
        vcZ = pVB[_1].position - pVB[_0].position;
 
        vcOut = vcX * dX / float(size+ vcZ * dZ / float(size);
        vcOut += pVB[_0].position;
    }
    else // 위 쪽 삼각형
    {
        dX = pVB[_3].position.x - TargetPosition.x;
        dZ = pVB[_3].position.z - TargetPosition.z;
 
        vcX = pVB[_1].position - pVB[_3].position;
        vcZ = pVB[_2].position - pVB[_3].position;
 
        vcOut = vcX * dX / float(size+ vcZ * dZ / float(size);
        vcOut += pVB[_3].position;
    }
    _pTarget->transform->position = Vector3(TargetPosition.x, vcOut.y+1, TargetPosition.z);
    m_pModel->GetVertexEnd();
}
cs


완성

반응형