본문 바로가기

카테고리 없음

14. 브러쉬 기능부여


이번 작업에서는 2d에서 3d로 즉, 마우스따라 다니던 브러쉬의 기능을 부여하는데 집중을 했다.
작업 순서로는 항상 내스타일인 아주 작은 단계부터 살을 붙이며...

브러쉬가 마우스를 따라다니는가? -> 클릭하면 높이가 변형되는가? -> 얼마나 주변으로 높이가 변형되는가? ->
높이 변형은 어떤방법을 썻는가? ->그 높이 주변을 표현하는 값이 브러쉬의 크기와 동일한가? -> 브러쉬의 크기조율 및 표현이 가능하게했는가?

에 대해서 이정도로 하였다. 


마우스월드좌표는 다음과 같은 좌표에 놓여져있다.


휠로도 브러쉬의 반지름을 넓히거나 줄일 수 있다. 좌측 상단 붉은 텍스트는 그 수치를 알게 끔 한다.



그림2보다 좀 작게 브러쉬크기를 조율하고, 적당한 지점에 브러쉬를 이용하면 다음과 같은 볼록거리는 곡선이 생긴다. 즉, 브러쉬의 위치와 가까울수록 정점이 0 ~ 브러쉬의 위치와 멀수록 정점수치는 넓어진다.
이점에 대해서 참 졸작때나 2d좌표 표현도 마찬가지로 벡터길이는 자주쓰이기에 쉽게 연출 했다.
뭐 이걸 소스로 하자면 다음과 같겠지..

  D3DXVECTOR3 vtPos = D3DXVECTOR3(m_pVertices[i].x,m_pVertices[i].y,m_pVertices[i].z);
  D3DXVECTOR3 vecLength = vtPos - pos;
  float fLength = ::D3DXVec3Length(&vecLength);

  if(fLength <= m_fBrushRadius)
  {
   //0일땐 0도 , f값이 x일땐 90도로 설정
   m_pVertices[i].y += cos(fLength / m_fBrushRadius * 90 * 3.14/180);
   m_vecObject[i].pos.y = m_pVertices[i].y; //벡터에있는 정점표시 메쉬도 위치값도 수정
  }



물론 브러쉬 크기 수정 및 다른위치에 클릭해도 잘 나온다.


이런식으로 기능은 점점 추가가 되겠지.


휠사용도 그렇지만 mfc도 참 쓰면 쓸수록 편하긴하다고 느낀다.

이번작업은  높이조절관련하여 메뉴도 수정하고 해야겠지만 그거야 뭐 이제는 변수바꿈정도밖에안되니
다 된거나 다름없다고 본다. 지금의 코사인을 램버트코사인으로 바꿔보는것이 끝마무리가 될듯하다.


그리고 이 다음 부분은 절두체컬링과 쿼드트리, 쿼드트리는 일단 생략하고 지나갈 생각이다.

절두체컬링은 참고하고 있는 해골책의 설명을 이해 후 마무리를 지어야겠다.
해골책의 설명과 그리고 해골책에서 제공하는 클래스를 그대로 쓸 계획이다. 다소 필요하다면 살을 붙여나갈것이지만... 
절두체컬링관련 클래스는 그렇게 무겁지는 않다. 다만 차후의 조명, 텍스쳐에 빨리 다가서기위해서 이부분은 빨리하고 넘어가야할듯 하다.