본문 바로가기

예전/3D

[3D] Texture 함수



D3DXCreateTextureFromFileEx


그림 파일에서 텍스쳐를 읽어오는 함수이다.


HRESULT D3DXCreateTextureFromFileEx(          

    LPDIRECT3DDEVICE9 pDevice,           

    LPCTSTR pSrcFile,                        // 파일명

    UINT Width,

    UINT Height,

    UINT MipLevels,

    DWORD Usage,                             // 렌더링 타겟으로 사용 (D3DUSAGE_RENDERTARGET, D3DUSAGE_DYNAMIC ,                                                             D3DUSAGE_RENDERTARGET)

    D3DFORMAT Format,

    D3DPOOL Pool,                             // 텍스처의 배치처가 되는 메모리 클래스를 기술

    DWORD Filter,

    DWORD MipFilter,                          // 필터

    D3DCOLOR ColorKey,                    // 투명이 되는 D3DCOLOR의 값

    D3DXIMAGE_INFO *pSrcInfo,          // 텍스트 이미지 파일 내의 데이터 기술을 저장하는 D3DXIMAGE_INFO의 구조체 포인터

    PALETTEENTRY *pPalette,             // 256 색 팔레트를 나타내는 구조체 포인터 OR NULL

    LPDIRECT3DTEXTURE9 *ppTexture  // 생성된 큐브 텍스처 개체를 나타내는 텍스쳐포인터 주소

);


하지만 이 함수를 이용해 생성한 텍스쳐의 경우 화면이 뭉게져서 나오게 된다. 

400 * 300 의 이미지를 사용하면 이런 텍스쳐를 생성하는 것이 아니라 512 * 512 의 텍스쳐가 생성된다.
하지만 필터 옵션을 주게되면 원본을 저 SIZE 로 늘려서 필터링을 거쳐 로딩을 한다.

하지만, 필터 옵션을 NONE으로 주면 512 * 512 중 400 * 300 만 사용하고 왜곡없이 로딩된다.

이 때문에 UV좌표 계산을 새롭게 해줘야 한다.


Sprite는 절대좌표 방식과 상대좌표 방식 두가지 모두를 사용한다. 상대 좌표용 Sprite는 메트릭스로 텍셀과 픽셀 오차를 줄여주는게 포인트이다.

http://bklist.egloos.com/4066349



텍스쳐를 로드하여 Sprite로 출력할 수도 있다. MipLevels를 1로 설정하면 텍스쳐를 불러올때마다 밉맵 체인을 형성하지 않으 로드 속도가 빨라진다.








http://blog.naver.com/PostView.nhn?blogId=kor_secom&logNo=70137836340



http://3dapi.com/bs11_2d_basic/



텍스쳐는 디바이스를 통해 생성된다. 


만약 텍스쳐가 파일로 되어있다면      D3DXCreateTextureFromFileEx()  

메모리에 저장된 이미지라면             D3DXCreateTextureFromMemory() 

리소스에 있다면                             D3DXCreateTextureFromResource()  

실시간으로 메모리에 생성하려면       D3DXCreateTexture()


이다.


D3DXCreateTextureFromFile() 함수는 D3DXCreateTextureFromFileEx() 함수의 간소화된 사용으로 2D에서는 사용하지 않는 것이 좋다.

왜냐하면 2D인 경우 픽셀을 대부분 도트 작업을 통해서 만들고 또는 텍스쳐를 확대하거나 축소해도 픽셀 사이를 포간하는 필터링을 

안 거치게 하는 것이 보통인데 D3DXCreateTextureFromFile() 함수는 필터링 옵션이 디폴트여서 2D 게임에는 적합하지 않다.



반면, D3DXCreateTextureFromFileEx() 는 많은 인수를 사용하는데 2D에서는 이중 몇가지만 설정하고 나머지는 디폴트인게 보통이다. 




D3DXCreateTextureFromFileInMemoryEx






Sprite의 Draw 함수를 사용하려면 반드시 디바이스의 BeginScene() 과 EndScene() 사이에 스프라이트 객체의 Begin() 함수와 End() 함수 사이에 Draw() 함수를 호출해야 한다.



첫 번째 인수는 텍스쳐 포인터 이다. 


두 번째 인수는 그릴 텍스쳐의 영역이고, 만약 영역이 텍스쳐의 크기보다 크다면 텍스쳐의 각 x,y의 마지막 색상으로 채워진다.


세 번째 인수는 중심 위치이다. 만역 NULL을 주면 (0,0,0)으로 설정이 된다. 


네 번째 인수는 위치로 최종 위치는 이 위치 값과 중심 위치를 가지고 구한다.


마지막 인수는 칼라 값으로 텍스쳐 전체에 어떤 색상을 곱할 것인가라는 것이다. 이 값은 반투면 처리나 특정 색 추출을 할 때 사용되는 중요한 것이다.

D3DXCOLOR(float,float,float,float) 로 구성된 구조체로 0.0f~1.0f 사이의 값으로 설정한다. 또한 DWORD 형 casting 연산자가 재 정의되어 있어 

DWORD 값으로 자동으로 계산을 통한 형 변환을 해준다. 






'예전 > 3D' 카테고리의 다른 글

[3D] 문자 집합  (0) 2012.10.12
[3D] Font 관련  (0) 2012.10.11
[3D] 밉맵  (0) 2012.10.11
[3D] GetTransform과 GetViewport  (0) 2012.09.27
2D 좌표를 3D좌표로 바꾸는 함수  (0) 2012.09.27