3D로 된 케릭터와 배경 사이에 2D 이미지를 렌더할수 없나요?

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

Moderator: 류광

Locked
ayoyo22
Posts: 8
Joined: 2007-06-28 16:54
Location: JCE

3D로 된 케릭터와 배경 사이에 2D 이미지를 렌더할수 없나요?

Post by ayoyo22 »

알려주세요~~~
열정은 최고의 경쟁력이다!
lancekun
Posts: 62
Joined: 2008-06-06 02:04
Location: 호드
Contact:

Post by lancekun »

만약 D3D스프라이트로 2D이미지를 렌더링하신다면

g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(128,128,128), 0.0f, 0);
g_pd3dDevice->BeginScene();

// 배경렌더링

g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);

// 2D 이미지렌더링

g_pSprite->End();

// 3D 메쉬렌더링

g_pd3dDevice->EndScene();
g_pd3dDevice->Present(NULL, NULL, NULL, NULL);

이렇게 해주면 되지않을까요??
안녕하세요~ 랜스군입니다. 모두 열프 '_'

랜스군의 게임공작소
http://lancekun.com/
Avatar
Posts: 19
Joined: 2009-01-11 14:23

depth 기능.

Post by Avatar »

배경이 뒤에 3d물체가 앞에 보이도록 렌더가 되는 상태라고 가정을 한다면.

그 사이에 2d 이미지를 렌더링 하기 위해서는

1.

먼저 배경을 렌더링 (3d건 2d건 간에)



2.

2d 이미지 렌더링에 필요한 갖가지 요건등을 설정해주시고 (직교행렬이라던가 등등등)

2d이미지는 무조건 배경앞에 렌더링을 해야되니 이전에 그려진 픽셀의 깊이를 측정하여 렌더링 여부를 따지는

depth test기능을 꺼주시고

그리고 2d 이미지 앞에 무조건 3d물체를 렌더링 해야되니 이미지가 렌더링 되는 해당 픽셀의 위치에

이러이러한 깊이의 값이 있다는 흔적을 남기지 않기 위해서 depth write기능도 꺼주시고

2d이미지를 렌더링

(근데 depth test, write가 이걸 뜻하는지는 확실히 모르겠네요 이것에 대해서 따로 검색하시는게 좀 더 공부가 되실듯.)



3.

다시 2개의 depth 기능등을 활성화 시킨다음 3d물체를 렌더링



이렇게 해주시면 되지 않을까요?



혹은 그냥 depth 기능은 건드리지 않으시고 하실려면 2d 이미지의 4개의 버텍스 깊이 값이

3d물체보다 깊고 배경보다는 얕어야(?) 겠죠.


그런데 만약 배경과 3d물체 사이에 그리는 2d 이미지가 여러개인 동시에 서로 곂칠 때

depth test기능을 끈상태에서 렌더링하실 경우라면 이미지의 깊이에 따라

정렬한 뒤 순서대로 그려주는 방법외에는 저는 잘 모르겠네요.


lancekun //

저는 d3d를 써본적이 없어서 잘 모르겠지만

g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);
g_pSprite->End();

이 2개의 함수가 자동적으로 depth기능을 설정합니까?

명색이 sprite이니 3d와 타협할 만한 깊이값은 가지고 있을 것 같진 않고...

궁금하네요.
윽 2009/11/12
lancekun
Posts: 62
Joined: 2008-06-06 02:04
Location: 호드
Contact:

Post by lancekun »

아아.. 다시 읽어보니 질문의 요지가 애매하군요 :cry:

Avatar님이 쓰신걸보니 아바타님은 질문을 보고 빌보드를 생각하신것같고

저같은경우 지금 gui 관련작업중이여가지고 3D배경위에 2D이미지(스테이터스창)속에 캐릭터3D를 생각해서요.

:oops:
안녕하세요~ 랜스군입니다. 모두 열프 '_'

랜스군의 게임공작소
http://lancekun.com/
Avatar
Posts: 19
Joined: 2009-01-11 14:23

Post by Avatar »

lancekun //

제가 이미지의 깊이값과 4개의 버텍스라고 한걸 보시고 빌보드에 대해서 설명한줄 알고

생각한 모양이신 것 같은데 저도 2d이미지를 생각한 겁니다.

3d에서 2d이미지를 출력하기 위해선 4개의 버텍스마다 위치와 텍스쳐 좌표등이 필요하지요.

(2d를 3d 상으로 그리는 이유는 제 지식의 범위내에선 3d 가속을 노리는 정도로 생각하고 있네요.)

하지만 2d이기 때문에 투영행렬에 perspective 행렬이 아닌 orthographic 행렬로 변환시켜야하구요...

(아마 다렉스프라이트가 내부적으로 3d상으로 그려진다면 g_sprite->begin()과 end() 사이에도 이러한 설정을 하는 기능이 포함되어있을 겁니다.)

4개의 버텍스를 이용한 2d이미지 렌더링은 엄연히 3d이지만 orthographic 행렬 때문에 깊이 z값에 차이 없이

2d 이미지로 보이는 겁니다.

(아, 물론 모델뷰 행렬이 Identity상태에서 렌더링 했을 때 말이죠.)

다만 이미지의 z값과 이미 그려진 z버퍼의 값에 따라 무엇이 위에있는지 달라지기 때문에 depth기능을 이용하여

배경과 3d 물체사이의 2d 이미지 렌더링 방법에 대해 설명 드린겁니다.

아무튼 질문의 요지가 애매한건 아닙니다.
윽 2009/11/12
Locked