Loading...
2010. 5. 15. 15:40

다수의 광원.

기억할 것 : 광원으로의 방향이 아니라, 광원으로 부터 나온 빛이 향하는 방향. (0,1,0)이면 광원이 +y으로 향한다는 의미이다. 보통 쉐이더에 인자로 넘겨주는 방향은 빛이 광원으로 부터 표면으로 향하는 방향인데 이를 쉐이더에서 -로 하여 사용해야 한다. float3 L = - normalize(lightDirection); 그렇지 않다면 처음 입력부터 지표면에서 광원으로 향하는 방향을 넘겨서 -을 붙이지 않으면 된다. 다수의 광원일 경우에는 각 광원에 대해서 확산성분과 정반사 성분을 각각 계산하여 모두 더하고 환경성분은 전체적으로 한번만 더하면 된다. float4 finalColor = 0; for (int i=0; i

2010. 5. 14. 01:07

쉐이딩 모드

드디어 쉐이더 파트로 넘어온 건가...아 졸라 길었다..ㅜㅜ.. 쉐이더로 넘어오기 위해 책 절반을 읽었구나..ㅎㅎㅎ 딱히 새로운게 추가된 것은 없다. .fx 파일에서는 드디어 지오메트리 쉐이더를 살짝 사용했다. [maxvertexcount(3)] void GS_Flat( triangle VS_Output input[3], inout TriangleStream TriStream ) { VS_Output output; for ( int v=0; v

2010. 5. 13. 23:58

픽킹

3d 게임에서 중요한 부분을 차지하고 있는 픽킹. 이번기회에 다시 한번 정리해보자. 1. 카메라 공간에서 픽킹광선의 계산. // 뷰포트 정보를 얻는다. UINT numViewports = 0; device->RSGetViewports(&numViewports, NULL); // 뷰포트의 갯수를 얻는다. D3D10_VIEWPORT* vp = new D3D10_VIEWPORT[numViewports]; device->RSGetViewports(&numViewports, vp); // 보통 뷰포트는 하나므로 처음것을 가져온다. float vpWidth = (float)vp[0].Width; float vpHeight = (float)vp[0].Height; /* 카메라 공간에서 피킹광선 계산 피킹광선은 카메라..

이미지 정보 (dx)

이미지 파일의 가로, 세로 크기나 포맷정보에 대해 알아봐야 할 경우 // 로드할 이미지 크기로 윈도우 생성 D3DXIMAGE_INFO imginfo; D3DXGetImageInfoFromFile( TEXFILE, &imginfo );

2010. 5. 11. 22:27

경계볼륨 - 경계구, 경계상자

가장 간단한 충돌검사 방법이 경계구와 경계상자이다. 사실 딱히 할말이 없다.. 그냥 구와 상자 메시파일을 읽어들여 기존 주전자 메시파일의 월드에 맞춘것일뿐.

2010. 5. 11. 21:22

3ds mesh file load

3ds 파일포맷은 autodesk의 포맷인데 이 포맷 자체는 오래전의 포맷이고 여러가지 제약(최대 가능 정점 및 삼각형 개수등)이 있어서 사용하는데 불편이 있어 요즘은 많이 쓰지 않는다. 3ds파일을 조각(chunk)이라는 데이터 블록들의 나열로 구성된다. 각 조각은 내부에 부조각을 포함할 수 있는 계층구조를 이룬다. 한 조각은 정점 데이터, 삼각형 데이터, 텍스쳐 데이터 등의 정보를 표현한다. 3ds를 로드하는 Mesh3DS 클래스는 애니메이션은 지원이 되지 않고 텍스쳐 매핑까지만 지원이 가능하도록 제작되었다. .fx파일은 그다지 바뀐것이 없다. shader 공부하고싶어 시작한 공부인데 shader는 언제즘 해보는걸까...헐.

2010. 5. 11. 01:09

mesh 생성

이전 작업이 파일로부터 mesh를 읽어들이는 것이었다면 이번 작업은 mesh를 구성하는것이다. 기본적으로는 dx9 같이 몇몇개의 서브셋으로 구성되어져 있다. 하지만 생성하는 절차와 사용하는 api가 조금 다르다. ID3DX10Mesh* mesh = NULL; // 메시 - (정점, 인덱스, 속성버퍼를 가진다) 1. 정점 구조체의 형식을 결정하고 d3d10_input_element_desc 구조체를 준비하고 입력레이아웃을 생성 D3D10_INPUT_ELEMENT_DESC elements[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, { "NORMAL", 0, DXGI_FORMAT_R32G3..

2010. 5. 9. 01:51

3ds 로드, 가상트랙볼

가상트랙볼 - 마우스의 위치는 트랙볼의 표면에서의 한 위치에 대응, 마우스가 움직이면 트랙볼이 움직이는 것처럼 구현. - 구 표면에서의 각 지점이 카메라의 방향에 해당, 카메라의 회전은 구 표면에서의 한 점이 표면의 다른 점으로 이동하는 것에 해당. - 반경이 1이고 항상 윈도우의 중심에 있다고 가정. 사실 가상트랙볼 쿼터니온 공식은 온전히 다 이해하지를 못하겠다..ㅡㅡ;.. 3d mesh - 3ds file load http://mgun.tistory.com/401 를 참조하자. .fx 도 딱히 달라진점이 없다.