실행화면 창사이즈를 확인해보세요. 아무래도 사이즈가 달라서 살짝축소되면서 필터가 먹어서 인듯한데요...(올려주신 두번째그림이 살짝 잘려있어서 정확한 사이즈를 알수는 없지만 )
살짝어두워진것도 그렇지만 선명도가 떨어지는게 약간 뭉개져 보이네요.
로딩시 필터옵션을 POINT로 하시고 백버퍼 사이즈와 윈도우의 클라이언트 영역 ( 테두리, 타이틀을 제외한 영역 )의 사이즈를 확인해보세요.
AdjustWindowRect()함수가 있는데 윈도우스타일을 넣어주고 원하는 클라이언트영역을 넣어주면 실제의 윈도우크기( 외곽라인, 타이틀바 모두 포함한 )를 돌려줍니다.
이값으로 CreateWindow에 넣어주시면 클라이언트 영역이 원하는 만큼 잡힐겁니다.
출력시에도 필터옵션을 point로 조정해서 최대한 필터안먹게 하셔야 2d처럼 원하는 이미지를 출력할수 있습니다.
2006.11.02 10:30:26 (*.216.22.37)
자갈공명
또한가지는 이미지가 800*600이므로 2의 제곱이 안됩니다. 1024*1024로 만들어서 (추가공간은 그냥 검정색으로 채운다던가해서 )
출력할때 uv좌표를 800*600만큼 잡아서( 1.0을 넣는게 아니라 800/1024, 600/1024) 출력하시는것도 좀더 선명한 이미지를 얻을수 있습니다.
용량을 줄이자면...512 * 1024에다가 이미지를 여러개로 잘라서 우겨넣고 각각을 별도로 좌표맞춰서 출력하시면 1/2용량으로도 해결이 가능합니다. ( 5-6등분정도 될겁니다. )
2006.11.02 10:57:00 (*.232.96.120)
1ststory
이미지를 출력하기 위한 3D 공간에서의 정점의 색값 + 광원연산 + 텍스쳐 = 최종 픽셀.... 이죠 'ㅅ'?
광원 연산을 할 필요가 없다면 끄고, 정점의 색을 0xffffffff로 맞춰보세요.
2006.11.02 11:05:43 (*.67.220.110)
랩하는좀비
일단 답변 감사드리고요=_= 제가 사용하는 방법이 말이죠..
윈도우 창의 크기는 800*600으로 맞춰 놓았습니다. 백버퍼의 크기랑 윈도우크기는 일단 같습니다. 같은 변수를 사용하니까요.
문제는 800*600으로 설정을 해 놓고 카메라를 200*150의 텍스쳐가 전체에 잡히도록 위치해 놓았습니다. 그러니까 200*150의 이미지가 800*600의 창의 전체에 나타나도록 했다는 의미지요(사실, 그림의 크기랑 창의 크기를 같게 하는 법을 모르겠습니다. 그래서 꽁수로 생각해서 해 놓은 것이에요. 다른 방법이 있다면 살짝 알려주십시오. 2D는 걍 이미지만 띄우면 되었었는데 3D 기반으로 하려니 머리가 아프군요)
그렇게 해 놓고 불러오니까 저렇게 되더군요=_=;;
자갈공명님께 질문한가지. 이미지가 2의 제곱이 되어야 하는 이유가 있나요? ...너무 기초적인건가-ㅁ-;; 답변 부탁드리겠습니다.
2006.11.02 11:31:14 (*.67.220.110)
랩하는좀비
잠시 수업좀 다녀와서 이해하도록 하겠습니다. 워매 늦었다-ㅁ-;;
2006.11.02 14:59:59 (*.67.220.110)
랩하는좀비
이해 했습니다. 그래서 여러가지 적용해 봤는데 말이죠(...)
일단은 조명이 잘못되어 있었습니다. 살짝 어둡게 되어 있더군요. 그래서 밝게해서 텍스쳐를 더 밝게 했습니다.
point로 필터는 적용해봤는데 밝기와는 상관없이 경계선만 거칠어지더군요.(복합적으로 해야 하는데 귀찮아서(...))
뭐, 일단은 만족하고 있습니다. 자갈공명님 덕분에 좋은 거 배웠습니다.(2의 제곱이라던지 기타 등등 말이죠=_=) 답변 감사드리구요
1ststory님의 답변도 도움 많이 되었습니다 감사드려요=_=)~
2006.11.02 15:03:27 (*.54.72.237)
자갈공명
//중간중간 오타가 있어서 다시 작성했습니다
윈도우와 백버퍼에 같은 사이즈를 사용했다는 이야기가 CreateWindow에 넣으신 값과 백버퍼 생성시의 값이 같다는 뜻이라면
실제 이미지가 출력되는 "클라이언트영역"은 좀더 작게 잡혀버립니다. 800*600의 백버퍼를 79x*58x정도의 영역에 복사하게
되기 때문에 살짝 뭉개지게 됩니다. ( 출력된 결과물의 글자들을 보면 약간 흐릿하죠 )
GetWindowRect와 GetClientRect를 비교해보세요. GetClientRect의 사이즈가 백버퍼사이즈와 같아야 정확히 백버퍼를 확대/축소
없이 화면에 출력할수가 있습니다. 그리고 2D이미지를 출력할때는 RHW로 출력하는게 편합니다. 카메라움직임에 전혀
영향을 받지 않거든요. DX튜토리얼2번을 참고해보세요.
그리고 2의 제곱을 써야하는 이유는
텍스쳐는 2의 제곱사이즈로 밖에 안만들어집니다. (최신 그래픽카드중에서는 이것을 지키지 않아도 되는 게 몇개있긴합니다만..)
해서 D3DXCreateTextureFromFile류의 함수는 강제로 크기를 늘려서 텍스쳐를 생성합니다. 800*600이므로 1024*1024로 만들게되죠
텍스쳐의 정보를 받아서 사이즈를 한번체크해보세요 ( 제곱을 지키지 않으셨다면 생각한것보다 더 많은 메모리를 사용하고 있을겁니다. )
그리고 이때 이미지가 확대되고 화면에 출력할때 다시 축소되므로 이미지가 뭉게지게 됩니다.
지금 다시보고 중간에 올리신 글을 보니 제가 지금까지 얘기한것은 화면이 약간 흐릿해지는 이유이고 어두워지는 이유의 해결책은 안되겠네요.
RHW로 안하셧다면 혹시 노말이 들어있다면 빛에 영향을 받아서 어두워졌을것 같은데
SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
로 설정하시면 텍스쳐의 색을 쓰겠다 이므로 빛의 영향은 안받게 됩니다.
2006.11.02 15:39:56 (*.67.220.110)
랩하는좀비
흐릿해지는 것도 좀 많이 있네요. 게임할 때 살짝 무리가 갈 것이라고 생각이 되서 연구중에 있습니다.
백버퍼와 클라이언트영역을 동일화하고
텍스쳐의 이미지를 2의 제곱으로 하라는 것. 숙지하겠습니다.
...일단 백버퍼와 클라이언트 영역을 일치시켜야겠군요. =_=)~
자갈공명님 복받으실 겝니다.(씨익)
2006.11.11 01:19:40 (*.107.176.36)
Alucard
DX9 버젼이시면 D3DXCreateTextureFromFileEX 옵션에서 D3DX_DEFAULT_NONPOW2 , D3DX_FILTER_NONE 만 써주시면 사이즈 제한없이 깔끔한 2D 이미지를 보실수 있습니다. 근데 D3DX_DEFAULT_NONPOW2 <- 이옵션이 2배수로 맞춰주는 기능을 꺼주는 옵션인데 그래픽카드에 따라 지원유무가 있다고 합니다. 아마추어게임 만들때 UI때문에 삽질했던 문제인데 작년일이라 가물가물하네요. 뭐 별 문제는 없는걸로;;;
if(FAILED(D3DXCreateTextureFromFileEx(m_pDevice,Tex, D3DX_DEFAULT_NONPOW2 ,D3DX_DEFAULT_NONPOW2,
1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED,D3DX_FILTER_NONE, D3DX_FILTER_NONE,0, 0,NULL,&m_pPointTexure[TempNum])))
귀차니즘으로 작년에 썻던 코드를 고대로 ctrl+c,ctrl+v
2013.06.29 17:04:59 (*.89.36.160)
django
Those who tend not to proper care the way they seem or maybe if their particular sunglasses are
살짝어두워진것도 그렇지만 선명도가 떨어지는게 약간 뭉개져 보이네요.
로딩시 필터옵션을 POINT로 하시고 백버퍼 사이즈와 윈도우의 클라이언트 영역 ( 테두리, 타이틀을 제외한 영역 )의 사이즈를 확인해보세요.
AdjustWindowRect()함수가 있는데 윈도우스타일을 넣어주고 원하는 클라이언트영역을 넣어주면 실제의 윈도우크기( 외곽라인, 타이틀바 모두 포함한 )를 돌려줍니다.
이값으로 CreateWindow에 넣어주시면 클라이언트 영역이 원하는 만큼 잡힐겁니다.
출력시에도 필터옵션을 point로 조정해서 최대한 필터안먹게 하셔야 2d처럼 원하는 이미지를 출력할수 있습니다.