Programming/DirectX
터레인에 언덕 만들어서 돌아다니기~
휘탱
2016. 8. 5. 15:46
터레인이 평평해서 큐브가 잘 돌아다니는거 같다.
터레인에 높이를 만들어보자.
랜드를 이용해 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 |
완성
반응형