Loading...

dx10 파이프라인.

먼가..요즘은 dx10으로만 코딩을하다보니..정리를.해줄필요가.있는것같아서. dx10은 고정기능 파이프라인은 지원하지 않고 세이더 파이프라인만 지원한다. 왜? 고정기능을 벗은 파이프라인은 이전보다 더 자유롭게 장치를 제어할 수 있고 융통성이 뛰어나니까. 즉, 이전에는 건들지 못했던 것도 건들수 있게 된게지... 물론 이전에 건들수 있는것들조차 제대로 건들어 보지 못하긴 했지만..ㅜㅜ. 우선 세이더를 간단히 정의 내리면 GPU에 의해 실행되는 간단한 프로그램이라고 생각하면 된다. dx10에서의 파이프 라인은 Input Assembler(IA-입력조립기), VertexShader(VS-정점쉐이더), GeometryShader(GS-기하쉐이더), Rasterizer(RS-래스터화), PixelShader(PS..

dx10에서의 multi stream single index rendering & multi stream multi index rendering

Multi-Stream Single-Index Rendering in Direct3D 10 The setup is similar for performing multi-stream single-index rendering in Direct3D 10. The same vertex buffers are created (position, normal, texture coordinates, alternate texture coordinates). The sample then creates and input layout incorporating the separate vertex streams. Again, the purpose is to make the multiple vertex streams look like..

Resource (자원)

dx10에서의 자원은 버퍼와 텍스쳐의 두가지 타입이 있다. msdn을 참고해 보면 아래와 같다. ID3D10Resource Interface A resource interface provides common actions on all resources.IUnknown ID3D10DeviceChild ID3D10Resource 즉, 모든 자원에 대한 공통 기능은 ID3D10Resource 인터페이스로 구현된다는 것을 알 수 있다. 이 인터페이스를 상속받아구현된 인터페이스들로는 ID3DBuffer, ID3D10TextureXD, ID3D10TextureCuber가 있다. 자원은 비디오 메모리에 존재하게 된다. 자원의 생성시에는 Usage와 CPUAcessFlags를 설정할 수 있다. Usage CPU와 GP..

듀얼모니터.. 빌어먹을 dxut

아놔~ 왜 DXUTFindValidDeviceSettings 호출하면..FAIL을 반환하는게냐~!!!!! 이것땜시..완전.캐삽질했는데.결국은.. 내가.듀얼모니터써서..그런건가..ㅡㅡ; DXUTSetMultimonSettings(false); 이 함수를 넣어주니 잘 되는군..헐헐. 이런..아름답지못한.빌어먹을세상같으니라고...캬캬캭~!!!! 이 함수는 dxut의 함수들이 멀티모니터에서 어떻게 작동할지 설정할 수 있다.

IDXGIFactory::MakeWindowAssociation Method (Windows)

IDXGIFactory::MakeWindowAssociation Method Allows DXGI to monitor an application's message queue for the alt-enter key sequence (which causes the application to switch from windowed to fullscreen or vice versa). Syntax Copy HRESULT MakeWindowAssociation( [in] HWND WindowHandle, [in] UINT Flags ); Parameters WindowHandle [in] HWND The handle of the window that is to be monitored. This parameter c..

2010. 6. 4. 01:02

반사

반사는.복잡하지만..평면반사는그다지.어렵지않다. 내부 내용은제꾸고.D2DXMatrixReflect함수를 쓰는게야. D3DXMATRIX T, R; // 반사행렬을 계산. D3DXPLANE plane(0.0f, 0.0f, 1.0f, -5.0f); D3DXMatrixReflect(&R, &plane); matWorld = matObjWorld * R; 반사된 장면을 렌더링할때는 거울내부에만 그려지도록 해야 하는데 이를 위해 스텐실버퍼를 사용해야 한다. - 일반 장면을 그린다. - 스텐실버퍼를 0으로 초기화한다. - 스텐실 버퍼에서 거울에 해당하는 픽셀들만 1의 값을 가지도록 한다. - 거울영역에 반사된 물체들을 그린다. 거울에 해당하는 삼각형을 렌더링할때는 스텐실버퍼만 변경되도록 지정해야 한다. 그릴때에 스텐..

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인것은 위치벡터이며 점광원이다. 장면의 모든 물체들을 일반적인 방법으로 그린다. 그 후에 그림자 변환행렬을 사용하여 삼각형들을 그림자가 맺힐 평면으로 납작하게 변환한다. 변환된 삼각형을 어둡게 반투명 블렌딩하여 그림자를 그린다. 그런데 여러개의 납작하게 변환된 그림자 삼각형들은 그..