Loading...
2009. 11. 11. 15:24

Alternatives to Using Z-Bias to Fix Z-Fighting Issues

Z 충돌 이슈를 수정하기 위해 Z 바이어스를 사용하는 것에 대한 대안들 소개 By Matt McClellan and Kipp Owens 3D 응용프로그램 내에는 두 개의 폴리곤들이 같은 평면 상에 놓여 있는 많은 인스턴스들이 존재한다. 예를 들면 총알 자국이나 벽의 포스터와 같은 이펙트의 경우이다. 이런 폴리곤들은 같은 평면상에 놓여 있기 때문에 그것들은 같은 z-buffer 값을 공유하며, 이것은 "z-fighting" 이슈를 발생시킬 수 있다. 이것은 렌더링 순서에 의해서 다양하게 나타날 수 있다. 과거에는 DirectX* 가 개발자가 "z-bias" 를 동일 평면상의 폴리곤에 적용할 수 있게 함으로써 z-fighting 이슈를 해결할 수 있게 해 주었다. z-bias 를 적용하는 것은 효율적인 해결..

2009. 9. 13. 21:43

Surface Texture Mapping

Surface 의 특질을 제대로 표현하기 위해서는 Texture mapping 기술에 대하여 제대로알아 둘 필요가 있습니다.. Surface 의 특질을 표현하기 위하여 각각의 surface 는 blue, red, green 등의 컬러의 집합체에 의하여 정의 되어진다고 생각해도 크게 틀리지 않을 것 입니다.. 실제 세계에서는 많은 surface 들이 여러가지 색깔을 가지고 있습니다.. 나무는 나뭇결의 변화 있는 모습을 보여 주고 있고.. 옷감의 경우는 또 다른 예를 보여 주게 되는데.. 이것은 종종 다색 이라기 보다는 단색의 반복적인 patterns 으로 나타나게 되어지는 경우도 있습니다.. 대부분의 기본적인 Texture mapping 의 종류는 Three - dimensional model 의 surf..

shader version 맞춰주기.

vs2.0과 ps3.0은 안된다.. 이렇게 해도 컴파일러가 에러를 뱉어주지 않으니까 되는줄 알고 초낸 삽질했는데.. 이녀석들은 맞춰주는게 좋다.

2009. 8. 24. 22:29

not use lock, unlock version font system

회사에 들어와서 처음으로 만든 기능이 폰트 시스템이다. TTF파일을 사용하기 때문에 예쁜 폰트를 사용 할 수 있다. 기본적으로 그림자 효과와 외곽선 효과를 지원한다. 2d 폰트야 머 어차피 카메라에 영향을 받지 않으니까 상관이 없다. 3d 폰트는 처음에는 위와 같이 3d 느낌을 주기 위해 회전등을 지원했지만. 게임상에서 어차피 z만 필요하다고 해서 빌보드로 때웠다. 사실 빌보드도 아니고 위치값만 갱신하고 나머지 행렬은 무시한 것 뿐......ㅡㅡ;... 수정요망. 1. 기존 2d는 float4 전역변수에 위치.xy와 텍스쳐.uv 를 넣어서 전달했기 때문에 최대한 많은 갯수를 넘길 수 있어 절약이 가능 했지만 3d 폰트는 위치값이 xyz를 필요로 한다. ㄴ 결론은 다 넘기던지 색상처럼 꾹꾹눌러담아서 블록단..

shader에서의 dword

shader에는 dword형이 존재하지 않는다. 하지만 우리가 입력스트림으로 칼라값을 설정해서 넘길때 보통 dword를 많이 사용한다. struct VS_INPUT { float4 Pos : POSITION; float2 Tex : TEXCOORD0; }; 그리고 argb로 해서 값을 넘긴다. 즉, 빨간색이라면 d3dcolor_argb(255, 255, 0, 0) 이런식으로 설정해 넘긴다. 이렇게 해도 shader 내부에서는 입력스트림일 경우 dword를 float4로 치환하여 사용하기 때문에 문제가 없다. 문제는 입력스트림이 아닌 전역상수로 넘기고자 할 때이다. 전역상수에 float4 vColor;이라고 설정하고 이곳에 SetValue로 값을 넘길때 dword를 넘기면 에러가 난다. 이 경우에는 직접 ..

float4에 마지막 w의 값...1이냐 0이냐....

오늘도 역시나 개삽질을했다. position값을 버텍스버퍼를 생성해서 셰이더에 넘겨줄때를 생각해 보자. position값은 물론 원래라면 x,y,z,w를 고려한 d3dxvector4가 디폴트 지만 보통은 그냥 귀찮아서 d3dxvector3으로 설정을 해서 넘긴다. 그러면 우리의 위대한 셰이더 님은 입력으로 들어오는 vector가 3짜리이고 셰이더 내의 입력 구조체의 vector가 4짜리라면 마지막 값은 자동으로 1로 채워준다. 그런데 너무나 당연하지만 전역변수는 0으로 값이 채워진다. 이 사실을 간과한 것이 커다란 삽질의 시초였다. 버텍스버퍼로 락, 언락을 걸어서 넣는 방식이 아니라 셰이더 파일 내에 전역변수 어레이를 두어서 이곳에서 찾아서 쓰게 하는 구조로 만들고 있었다. 그런데 이아이가 항상 화면의 ..

2009. 8. 8. 17:10

shader SetValue

ID3DXBaseEffect::SetValue Set the value of an arbitrary parameter or annotation, including simple types, structs, arrays, strings, shaders and textures. HRESULT SetValue( D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes );그래그래.. 분명 msdn에는 setvalue함수에 어레이가 가능하다고 적혀있단 말이야.그래서 난 큐브를 찍기 위해 아래와 같이 정점을 만들었지.D3DXVECTOR3 vertices[] = { D3DXVECTOR3( -1, 1, 1), /// v0 D3DXVECTOR3( 1, 1, 1), /// v1 D3DXVEC..

Directx9 셰이더 프로그래밍 예제 수정방법.

세가지 오류가 발생한다. 1. error C2061: 구문 오류 : 식별자 'LPDIRECTXFILEDATA' d3dfile.h 폴더에 #include 를 추가한다. 2. error C2664: 'D3DXLoadMeshFromXof' : 매개 변수 1을(를) 'LPDIRECTXFILEDATA'에서 'LPD3DXFILEDATA'(으)로 변환할 수 없습니다. d3dfile.cpp 파일에서 아래 부분을 고쳐준다. if( FAILED( hr = D3DXLoadMeshFromXof( (LPD3DXFILEDATA)pFileData, D3DXMESH_SYSTEMMEM, pd3dDevice, &pAdjacencyBuffer, &pMtrlBuffer, NULL, &m_dwNumMaterials, &m_pSysMemMes..