Loading...
2010. 6. 2. 22:21

shadow volume

한 광원에 의해 생성되는 그림자 영역. 광원이 여러개일 경우에는 각 광원에 대해서 고려해야 한다. - 전체장면을 일반적인 기법으로 렌더링 - 주어진 광원에 대해서 물체의 글미자볼륨의 실루엣들을 그린다. - 렌더타겟에 그리는것이 아니라 스텐실 버퍼를 갱신하기 위해 그리는 것이므로 후면버퍼와 깊이버퍼는 쓰기금지시킨다. - 실루엣들을 그릴 때에 전면에 대해서는 스텐실값 증가, 후면에 대해서는 스텐실값 감소. GSShadow_Input VS_Shadow(VSShadow_Input input) // 입력정점을 월드공간으로 변환한다. { GSShadow_Input output; output.pos = mul(float4(input.pos,1), matWorld); output.pos /= output.pos.w; ..

2010. 6. 2. 13:32

평면 그림자

평면그림자는 일반적으로 렌더링 후에 그림자를 위한 블렌딩을 추가하여 만든다. 그림자가 평면이 아닌 임의의 곡면에 맺히는 경우도 처리하고자 한다면 그림자볼륨을 써야 한다. D3DXMatrixShadow는 그림자 평면을 정규화 하고 그림자 평면과 광원의 방향으로부터 그림자변환 행렬을 계산한다. 광원타입이 방향광원인지 점광원인지에 따라 인자값이 다르다. lw(마지막인자)값이 0인것은 방향벡터이며 방향광원이다. lw(마지막인자)값이 1인것은 위치벡터이며 점광원이다. 장면의 모든 물체들을 일반적인 방법으로 그린다. 그 후에 그림자 변환행렬을 사용하여 삼각형들을 그림자가 맺힐 평면으로 납작하게 변환한다. 변환된 삼각형을 어둡게 반투명 블렌딩하여 그림자를 그린다. 그런데 여러개의 납작하게 변환된 그림자 삼각형들은 그..

D3D에서 이용가능한 텍스처 메모리의 의미

출처 : http://blog.naver.com/lifeisforu/80022419898 현재 필자의 그래픽카드의 스펙은 다음과 같다. 칩종류 : Geforce 6200 DAC 종류 : Integrated RAMDAC 메모리 크기 : 256 MB 어댑터 문자열 : Geforace 6200 BIOS 정보 : Version 5.44.A2.10.00 이제 IDirect3DDevice::GetAvailableTextureMem 메서드를 호출하면 그 결과는 다음과 같다. 509607936 Direct3D API 도움말에는 IDirect3DDevice::GetAvailableTextureMem 에 대해서 다음과 같이 기술하고 있다. 인용: 반환값은 가장 가까운 MB 근처의 값이다. 이것은 비디오 메모리가 추정하는 ..

IDirect3DDevice9::GetAvailableTextureMem

사용 가능한 텍스처 메모리의 양의 추정값을 돌려준다. 구문 UINT GetAvailableTextureMem(VOID); 반환값 이 함수는, 사용 가능한 텍스처 메모리의 추정값을 돌려준다. 주의 돌려받는 값은, 가장 가까운 MB 에 말 수 있다. 이러한 처리를 하는 것은, 특정의 리소스에 의한 비디오 메모리의 소비에 영향을 주는 alignment나 다른 문제에 의해, 비디오 메모리의 추정값을 정확하게 요구할 수가 없기 때문이다. 애플리케이션에서는, 이 값을 사용해, 이용할 수 있는 메모리의 대범한 양을 추정해, 할당하려고 하는밉맵의 레벨수와 같은 리소스에 관한 거시적인 결정을 내릴 수 있지만, 다른 리소스를 할당하는데 충분한 메모리가 남아 있는지 등 작은 스케일의 결정에 사용할 수 없다.

메모리 정보 가져오기

메모리 정보 가져오기 메모리를 자주 사용하는 프로그램의 경우, out of memory를 일으키지 않도록 하기위해, 메모리를 체크해야합니다. 꼭 이럴 경우가 아니더라도, 기본적으로, 메모리의 이용은 어플리케이션의 부피가 커질수록 문제가 되겠죠. 여기서 API함수를 이용하여, 메모리의 상태를 얻어오는 방법을 알아보겠습니다. 먼저 사용될 API함수와 그 구조를 알아봅시다. void WINAPI GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer); MEMORYSTATUS는 아래와 같은 구조를 갖게 됩니다. DWORD dwLength 32 고정 DWORD dwMemoryLoad 사용할 수 있는 메모리 비율 DWORD dwTotalPhys 물리적 메모리양 DWORD dwAvailPhys..

2010. 6. 1. 07:21

깊이와 스텐실

후하후하..이번에 삽질좀 했군.ㅜㅜ. 기억하기. 깊이테스트든 스텐실 테스트든 결국 그리기의 여부를 판단하는 연산. 스텐실버퍼와 깊이버퍼는 물리적으로 하나의 버퍼를 나누어 사용한다. // 깊이스텐실 텍스처를 생성함. D3D10_TEXTURE2D_DESC descDepth; descDepth.Width = scd->BufferDesc.Width; descDepth.Height = scd->BufferDesc.Height; descDepth.MipLevels = 1; descDepth.ArraySize = 1; descDepth.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; //스텐실도 포함. descDepth.SampleDesc.Count = 1; descDepth.SampleDes..

비디오 메모리, 시스템 메모리 체크하는법

출처 : http://gpgstudy.com/forum/viewtopic.php?t=2744 대충 이렇네요.. 코드: view source print? #include ... m_MaxAllocMem = m_pDevice->GetAvailableTextureMem(); ///// LPDIRECTDRAW7 lpDD = NULL; DDSCAPS2 ddsCaps2; DWORD dwTotal; DWORD dwFree; HRESULT hr; hr = DirectDrawCreateEx(NULL, (VOID**)&lpDD, IID_IDirectDraw7, NULL ); if (FAILED(hr)) return FALSE; // Initialize the structure. ZeroMemory(&ddsCaps2, si..

D3D10_SHADER Constants

D3D10_SHADER Constants HLSL compile options. #define Description D3D10_SHADER_AVOID_FLOW_CONTROL Tell compiler to not allow flow-control (when possible). D3D10_SHADER_DEBUG Insert debug file/line/type/symbol information. D3D10_SHADER_ENABLE_STRICTNESS By default, the HLSL compiler disables strictness on deprecated syntax. Specifying this flag enables strictness which may not allow for legacy syn..