방향키를 눌렀을 때 물체를 보는 각도를 바꿔보자3
2018, Aug 14
이전까지 방향키를 눌렀을 때 MIP 를 회전하면서 보여주는 기능을 만들었다. 여기에는 문제가 있다.
아무런 동작을 취하지 않고 방향키만 눌렀을 때 MIP 가 보여진다.
이 버그를 MIP 를 실행했을 때, 방향키가 눌러지면 회전하는 것으로 수정하자.
VolumeRendererDoc.cpp
void CVolumeRendererDoc::DirKeyDownRendering(int DirKey)
{
m_DirKey = DirKey;
/// Renderer 클래스에 CurMode 변수를 추가할 것이다.
/// 값에 따라서 동작을 다르게 한다.
int CurMode = m_pRenderer->GetCurMode();
switch (CurMode)
{
case SLICE:
break;
case MIP:
OnMiprenderingAnydirection();
break;
case VR:
break;
default:
break;
}
}
...
/// MIP 뿐 아니라 모든 기능에 Renderer 클래스의
/// 새로 추가한 멤버변수를 세팅하는 로직을 만든다.
void CVolumeRendererDoc::OnMiprenderingAnydirection()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
int img_width = 256;
int img_height = 256;
printf("MIP AnyDirection \n");
shared_ptr<unsigned char> image =
shared_ptr<unsigned char>(new unsigned char[img_width*img_height]);
memset(image.get(), 0, sizeof(unsigned char)*img_width*img_height);
QueryPerformanceFrequency(&Frequency);
QueryPerformanceCounter(&BeginTime);
/// MIP 이므로 MIP로 세팅한다.
m_pRenderer->SetCurMode(MIP);
m_pRenderer->RenderMIPAnyDirection(image.get(), img_width, img_height,m_DirKey);
QueryPerformanceCounter(&Endtime);
int elapsed = Endtime.QuadPart - BeginTime.QuadPart;
double duringtime = (double)elapsed / (double)Frequency.QuadPart;
printf("MIP AnyDirection time : %f\n", duringtime);
CVolumeRendererView* pView =
(CVolumeRendererView*)((CMainFrame*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
pView->SetDrawImage(image.get(), img_width, img_height, 1);
pView->OnInitialUpdate();
printf("MIP AnyDirection End \n");
}
Renderer.cpp
/// enum, m_CurMode 을 추가한다.
enum{
SLICE, MIP, VR
}
class ...
{
...
private:
int m_CurMode;
public:
int GetCurMode();
void SetCurMode(int CurMode);
}
/// 새로만든 변수를 초기화하고 기능을 구현한다.
Renderer::Renderer
{
...
m_CurMode = -1;
}
Renderer::Renderer(unsigned char* volume, int width, int height, int depth)
{
...
m_CurMode = -1;
}
int Renderer::GetCurMode()
{
retunr m_CurMode;
}
void Renderer::SetCurMode(int CurMode)
{
m_CurMode = CurMode;
}