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..

일정한 크기의 빌보드.

너무 오래동안 삽질했다..젝1.!!!!!!! 카메라 거리에 따른 스케일량 공식 (카메라 FOV * 0.5f) * 카메라와의 거리 카메라와의 거리 D3DXVECTOR3 vLen = D3DXVECTOR3(m_pkRenderer->GetEyePos()->x - pkEntityFont->GetFontPos()->x, m_pkRenderer->GetEyePos()->y - pkEntityFont->GetFontPos()->y, m_pkRenderer->GetEyePos()->z - pkEntityFont->GetFontPos()->z); float fLen = D3DXVec3Length(&vLen); 스케일 값 float scale = tan(m_pkRenderer->GetFov()/2)*fLen*0.4f; 가장..

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,..

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에 넣어 전달해야 한다.