터레인이 평평해서 큐브가 잘 돌아다니는거 같다.
터레인에 높이를 만들어보자.
랜드를 이용해 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 |
완성
반응형
'Programming > DirectX' 카테고리의 다른 글
터레인 최적화(Quad Tree - LevelOfDetail) (0) | 2017.01.06 |
---|---|
절두체(Frustum) 컬링 (0) | 2017.01.04 |
DirectX9 애니메이션 컨트롤 해보기(상체,하체) (4) | 2016.09.26 |
터레인에 높이맵 텍스처 적용하기 (0) | 2016.08.13 |
SkyBox 만들어보기 (0) | 2016.08.04 |
메쉬를 불러와 출력 해보기 (1) | 2016.07.06 |
텍스쳐 출력 해보기 (0) | 2016.07.05 |
머티리얼 & 라이트 & 법선벡터 (0) | 2016.07.03 |