728x90
728x90
728x90

이번에 Volume Rendering을 접할 기회가 생겨서 데이터를 모으고 공부하면서 작업을 완료 하였다.

 

우선 Marching Cube 방식으로 렌더링하는 방법이 있는데, 이건 이미 회사에서 구현이 완료되어있는 상태라 그대로 놔두고 Raycasting 방식으로 렌더링을 하는 것을 목표로 개발하였다.

 

이미 TransferFunction, Histogram 등 기본적으로 필요한 부분은 다 구현이 되어 있었기 때문에 오직 렌더링만 작업을 했다.

 

아래의 사진이 Marching Cube로 렌더링되는 기본 모습이다.

 

아래의 사진은 Raycasting으로 처음 렌더링을 했던 모습이다. 물론 기본적으로 TransferFunction은 적용이 되어 있는 상태이고 Lighting을 먹일 방법을 찾고 있을 때의 모습이다.

 

Blinn Phong Shader를 적용한 모습이다. Raycast에서 각각의 Voxel마다 Normal을 계산해야하는데, 하는 방법을 겨우 찾아서 처음 적용시켰을 때의 모습이다.

 

아래 사진은 최종 완성된 모습이다. Sampling마다 Light값이 중첩이 되다보니 위와 같이 메탈 재질이 나왔던 것이었고, 그 부분을 수정했더니 아래와 같이 해골다운 모습이 나왔다.

 

여러 회사를 다니다보니 Volume Rendering을 접해보네...

기본적으로 국내 자료는 부족하고, 논문에도 소스코드가 있는건 아니다보니 삽질을 굉장히 많이 한 것 같다.

그래도 석사출신의 동료직원이 C코드를 이용하여 CPU에서 Volume Raycasting 처리를 해본적이 있어서 다행이었다. 없었으면 못만들뻔...

 

MarcusJonsson.pdf
0.44MB
VolumeRendering.ppt
2.99MB

 

 

728x90
728x90

DirectX SDK (June 2010) 을 Windows 7 이상의 버전에서 설치하다보면 Error Code S1023이 뜬다.


이것은 결론을 먼저 말하면 무시해도 상관은 없다. 하지만 이게 거슬리고 원인이 궁금해서 찾아보았다.


일단 이것들을 먼저 삭제하고 DirectX SDK 를 다시 설치하면 된다.

MsiExec.exe /passive /X{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
MsiExec.exe /passive /X{1D8E6291-B0D5-35EC-8441-6616F567A0F7}


참고 자료 : http://stackoverflow.com/questions/4102259/directx-sdk-june-2010-installation-problems-error-code-s1023

728x90
728x90

Windows에서 할 일 


CreateWindow()를 한 이후에 SetLayeredWindowAttributes()를 호출 할 것.


WS_EX_LAYERED를 꼭 넣어야 한다.


DWORD dwWindowStyle = WS_POPUPWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;

hWnd = CreateWindow(this->m_lpszTitle, this->m_lpszTitle, dwWindowStyle,

  nStartX, nStartY, nWidth, nHeight, NULL, NULL, hInstance, NULL);


if (!hWnd)

{

    return FALSE;

}

 

::SetWindowLong(hWnd, GWL_EXSTYLE, ::GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED | WS_EX_TOPMOST);

::SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);

::SetLayeredWindowAttributes(hWnd, 0x0000ff00, 255, LWA_COLORKEY);





DirectX9에서 할 일


CreateOffscreenPlainSurface()로 Surface를 생성.


Clear()를 할 때에는 SetLayeredWindowAttributes()에서 지정한 색상으로 할 것.


Present() 사용하지 말 것.


BitBlt()을 이용하여 윈도우 DC에 RenderTarget DC를 그릴 것.


소스 코드 : 

Banner_dx9_test.zip


728x90

+ Recent posts