Loading...
2010. 5. 23. 13:07

TextureAddressMode

텍스쳐 좌표가 [0,1]의 범위를 벗어날 경우의 처리방법을 텍스쳐 번지모드(Texture addressing mode)라고 한다. wrap mode : 텍스쳐 좌표 길이 1마다 반복. mirror mode : 매 행 또는 열이 이전 행 또는 열의 미러 clamp mode : [0,1]의 범위 외의 텍스쳐 좌표에 대해서는 동일 행 또는 열의 에지 필셀에서의 컬러를 사용. 0보다 작은 텍스쳐 좌표에 대해서는 0에서의 텍스쳐 컬러를, 1보다 큰 텍스쳐 좌표에 대해서는 1에서의 좌표 사용. border mode : [0,1]의 범위 외의 텍스쳐 좌표에 대해서는 테두리 컬러로 지정된 컬러를 사용한다. 어플에서 어드레스 모드를 설정해 줄 수 도 있지만 쉐이더해주는게 좀 더 간단하다. .cpp D3D10_SAMPLE..

2010. 5. 18. 01:02

좌표변환 (로컬 <-> 화면)

// 스크린좌표로부터 로컬좌표를 계산함. 변환된 후의 로컬좌표의 z축좌표는 입력인자로 전달됨. void ScreenToLocal( D3DXMATRIX* matWorld, D3DXMATRIX* matView, D3DXMATRIX* matProjection, D3D10_VIEWPORT* viewport, D3DXVECTOR3* localCoord, D3DXVECTOR3* screenCoord, float localZ ) { float px = ((2.0f*screenCoord->x/viewport->Width) - 1.0f)/(*matProjection)(0, 0); float py = ((-2.0f*screenCoord->y/viewport->Height) + 1.0f)/(*matProjection)(1,..

2010. 5. 16. 07:26

텍스쳐 매핑.

기억하기 : d3d 에서 텍스쳐는 세이더 자원으로 취급된다. 세이더 자원은 세이더 자원뷰의 형태로 세이더에게 전달되며 이미 생성된 텍스쳐 자원이나 텍스쳐 파일을 직접로드하여 세이더 자원뷰를 생성할 수 있다. 텍스쳐 자원으로 부터 세이더자원뷰의 생성. ID3D10ShaderResourceView* textureView = NULL; ID3D10EffectShaderResourceVariable* texDiffuseVariable = NULL; D3DX10CreateShaderResourceViewFromFile(device, L"back.jpg", NULL, NULL, &textureView, NULL); 그 후에는 세이더 텍스쳐 상수버퍼 변수에 대한 효과변수 포인터를 얻어 세이더 자원뷰를 지정한다. te..

2010. 5. 15. 22:32

Texture load

하나하나 차근차근....조금해하지말고... 기억하기 : __uuidof The __uuidof keyword retrieves the GUID attached to the expression. The expression can be a type name, a pointer, reference, or array of that type, a template specialized on these types, or a variable of these types. The argument is valid as long as the compiler can use it to find the attached GUID. A special case of this intrinsic is when either 0 or NULL..

2010. 5. 15. 20:22

방향성광원, 점광원

이번엔 거의 할 부분이 없군. float diffuseColor; [branch] switch(lightType) { case 1: // dir light diffuseColor = saturate(dot(input.normal, - lightdirection); break; case 2: // point light diffuseColor = saturate(dot(input.normal, normalize(lightPosition - input.worldPos))); break; default: // no light diffuseColor = 1; } [branch] if(textureOn) { return texDiffuse.Sample(texureSampler, input.tex) * diffuse..

2010. 5. 15. 19:54

광원(확산, 정반사, 환경)

기억하기 : 텍스쳐 매핑이 되는 경우에는 텍스쳐로부터 샘플링된 컬러를 재질컬러에 반영. [branch] if 동적분기 변수값에 따라서 명령이 분기. 동적분기는 실행되는 명령어의 갯수를 줄이는 기능을 제공해서 쉐이더 실행시간을 높일 수 있다. 책 소스의 틀린부분 : light position 쉐이더 전달인자에 eye값을 넣는데 eyeposition에 넣어 전달해야 한다.

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