Loading...

3d 좌표를 2d로 바꾸는 법.

[출처] 3D 좌표 2D 좌표로 바꾸기 |작성자 하이요 //CONVERT_3DTO2D_POINT (함수) POINT CAppForm::CONVERT_3DTO2D_POINT ( const D3DVIEWPORT9& vp, const D3DXMATRIX& matView, const D3DXMATRIX& matProj, D3DXVECTOR3 v ) { D3DXMATRIXA16 matCombine = matView * matProj; D3DXVec3TransformCoord ( &v, &v, &matCombine ); v.x += 1.0f; v.y += 1.0f; v.x = ( vp.Width * (v.x ) ) / 2.0f + vp.X; v.y = ( vp.Height * (2.0f-v.y) ) / 2.0f +..

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

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; /* 카메라 공간에서 피킹광선 계산 피킹광선은 카메라..