D3DX - 21.11.08

김주현·2021년 11월 8일
0

d3dx9 3D

목록 보기
21/30

m_pGraphic_Device->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW)
-> 시계 방향으로 그려진 모든것들을 그린다.

CCW를 CW로 하면 반시계방향을 그린다.
NONE은 무조건 그린다.(앞 뒷면이 모두 그려진다)

m_pGraphic_Device->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME)
->어떤 방식으로 삼각형을 채우는지

위 두 함수는 한번 호출하면 다시 호출해서 수정하기전까지 적용된다.

ex) 반시계로 그리고싶어서 CW를 호출했다면 꼭 디폴트인 CCW로 변경해주자.

지형

현재 지형 픽셀이 상당히 많이 깨지고있다 -> 이미지가 과하게 확대되어서

지금 한장의 그림으로 0,0 1,1을 채우지만 이제 UV좌표를 0,0 ~ 2,2로 사용하자! 네장의 그림으로 채우자!

UV좌표는 1보다 큰값이 생기면 0부터 시작한다.

UV표를 20으로 해주자.

SetSamplerState함수가있다.(텍스처 세팅을 해주고 호출해주는게 좋다(필수는아님)).
SetSamplerState(0,D3DSAMP_ADDRESSU,D3DTADDRESS_CLAMP);
-> 1보다 크면 무조건 1로인식
SetSamplerState(0,D3DSAMP_ADDRESSU(U,V로 정해줄수 있있음),D3DTADDRESS_WRAP);
-> 1보다 크면 0부터

SetSamplerState(0,D3DSAMP_ADDRESSU(U,V로 정해줄수 있있음),D3DTADDRESS_Mirror);
-> 1보다 크면 1부터 0으로 수렴

멀리있는 텍스처는 선형보간으로 뭉갤수있음
SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
(확대했을때의 처리)
SetSamplerState(0,D3DSAMP_MIPFILTER,D3DTEXF_LINEAR);
(축소했을때의 처리)

지형의 높낮이

이미지를 그레이스케일로 바꿨다 -> RGB가 모두 같다.
0에가까울수록 어두운회색 1에가까울수록 밝은 회색

0~255에 해당하는 4가지 수가 한 픽셀당 담겨있다 -> 이를 데이터로 받아오겠다. 이를 높이로 쓰겠다. 이미지가아닌 데이터파일로 불러와야한다.

CVIBUfferTerrain의 Create 함수릉 오버로딩해주자.
이에 맞게 네컨
프로토도 오버로딩해주자.

비트맵 이미지는 위에서부터 파일헤더,인포헤더,픽셀데이터 로 구분되어 비트맵 이미지가 할당되어있음.

파일헤더 - 이미지의 확장자 명은 무엇인지등등 파일에 대한 정보를 담고있음
인포헤더 - 이미지의 픽셀당크기가 몇비트인지 가로세로 픽셀수는 몇개인지, 현재 이미지에대한 정보를 담고있음
픽셀데이터 - 실제 이미지의 픽셀값을 가지고 있음

네컨 프로토타입(오버로딩한것)
에서 비트맵파일 읽어오자.

CreateFile 함수로 통로 만들고

ReadFile 함수로 파일을 읽어주자.

비트맵 파일헤더 구조체가 선언되어있음 BITMAPFILEHEADER
이를 ReadFile함수의 인자로 넘겨주자.

이어서 핸들을 닫지않고 ReadFile로 BITMAPINFOHEADER도 읽어주자.

인포헤더에 가로사이즈와 높이사이즈가 모두 들어있다.

픽셀 이미지를 저장히기위한 구조체는 없음 직접 만들어줘야함

_ulong pPixel = new _ulong[가로 세로]
(사용후 꼭지워줘야 한다.)

다음 ReadFile로 읽어오자.

다음 y값을 넣어주자. 그냥 값을 쓰면 엄청크니깐 B값만꺼내서 쓰자.

ARG에 해당하는 24비트를 0으로 채워서 AND연산을 해주자0x000000ff
최대값은 255로 표현될것 너무 크니간 0.2를 곱해서 보정해주자.

로더 클래스에서 갯수가아닌 경로를 받아서 함수를 호출해주자.

텍스처 생성

CreateTexture로 텍스처를 만들고

pTexture->LockRect(0,&LockRect,nullptr,0);

Pitch는 가로 한 줄 크기의 전체 픽셀사이즈를 의미한다.

((_ulong*)LockRect.pBits)[LockRect.Pitch 보다 커지면 행이 바뀐거임]

근데 우린이미 129 * 129 라는걸 알고있음

이중 for문을 통해 값을 넣어줄수 있다.

pTexture->UnLockRect(0);

D3DXSaveTextureToFile로 텍스처를 저장할수 있다.

조명

빛을 받는지 안받는지는 빛의 방향벡터가 있어야 알 수있다.

광원 - 모든방향으로 빛을 냄

디렉셔널 라이트 - 하나의 절대적인 광원을 표현하기 위함
해의 위치는 의미가 없고 모든 객체는 해로부터 빛을 받는다.

스포트라이트 광원 - 손전등모양으로 빛을냄

0개의 댓글

관련 채용 정보