IRiS nX
114 ARTICLES / 235 REPLIES [1:2]
=ADMIN=


NAME / EMAIL
URL
SUBJECT
MESSAGE
ATTACH
ATTACH STYLE COOKIE  
#188. 순돌이 [REPLY]
3D 타일 붙이기 II 2006/01/19 (Thu)

마우스움직일때마다 타일위에 표시를 하고 싶어요.
3d-2d간 좌표변환이 필요한것 같은데요.
어떻게 하면 되나요.
감사합니다.

#188-1. 안영기 2006/01/22 (Sun)
오브젝트 피킹에 대한 것은..
http://www.gamza.net/ 의
Algorithm & Math 에 들어 가시면
'Pick된 곳의 3차원좌표 계산법'이라는 강좌가 있는데 이것을 보시면 됩니다.

#188-2. 순돌이 2006/01/24 (Tue)
그곳에 있는 몇줄
g_pD3DDevice.GetViewport(vp);
g_pD3DDevice.GetTransform( D3DTS_PROJECTION, matProj );
GetCursorPos( ptCursor );
ScreenToClient( hWindow, ptCursor );

v.x := (( (((ptCursor.x-vp.X)*2.0/vp.Width ) - 1.0)) - matProj._31 ) / matProj._11;
v.y := ((- (((ptCursor.y-vp.Y)*2.0/vp.Height) - 1.0)) - matProj._32 ) / matProj._22;
v.z := 1.0;

g_pD3DDevice.GetTransform( D3DTS_VIEW, matView );
D3DXMatrixInverse( m, nil, matView );
vPickRayDir.x := v.x*m._11 + v.y*m._21 + v.z*m._31;
vPickRayDir.y := v.x*m._12 + v.y*m._22 + v.z*m._32;
vPickRayDir.z := v.x*m._13 + v.y*m._23 + v.z*m._33;
vPickRayOrig.x := m._41;
vPickRayOrig.y := m._42;
vPickRayOrig.z := m._43;
t := 1.0 / D3DXVec3Length( vPickRayDir ) ;
//vPickRayDir,vPickRayOrig:TD3DVector;
ppp.x:=vPickRayOrig.x + vPickRayDir.x * t ;
ppp.y:=vPickRayOrig.y + vPickRayDir.y * t ;
ppp.z:=vPickRayOrig.z + vPickRayDir.z * t ;

이런식으로 하니까 ppp값이 -4,3,0으로만
나오네요.
마우스가 움직이면 해당타일을 테두리가 쳐진 타일로 바꾸려고 하거든요.
어떻게 해야 하는지요.

#188-3. 안영기 2006/01/27 (Fri)
소스가 이상한데요.
t := 1.0 / D3DXVec3Length( vPickRayDir ); 가 여기에 들어가면 안됩니다.

제일 마지막의 공식에서보면 t는 거리를 나타내는 factor로 보이는데, 이 값은 출력되고 있는 모든 폴리곤중에 광선의 방향과 교차하는 것에 대해 거리를 조사한 후 t 값이 카메라에 가장 가까운 하나(triangle)를 골라내는 과정이 있어야 합니다. 그런 과정이 없이 위처럼 쓰면 항상 값은 값이 나오는 것이 당연하지요.


#175. 순돌이 [REPLY]
3D 타일 붙이기요 2006/01/02 (Mon)

캐릭터를 두개 만들어 놓고 카메라를
돌려보니 캐릭터가 가려지는데요.
해결방법이 없을까요?
항상 감사합니다....

#175-1. 안영기 2006/01/02 (Mon)
컬러키 설정 때문에 그렇습니다.
이 예제에 빌보드를 찍을 때 스프라이트 처리를 안해서 그헐습니다. 제대로 가려지게 하려면,

InitD3D() 함수에서, SetRenderState() 함수들이 있는 마지막에

g_pD3DDevice.SetRenderState(D3DRS_ALPHATESTENABLE, 1);
g_pD3DDevice.SetRenderState(D3DRS_ALPHAREF, $00);
g_pD3DDevice.SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER);

를 추가하면 제대로 될 겁니다. 이 설정의 의미는 'color key를 설정하되 alpah 값이 0 보다 큰 경우에만 픽셀을 출력하라'입니다.

#175-2. 순돌이 2006/01/02 (Mon)
감사합니다. ^^
되네요.. 하하.. 감사합니다. ^^


#167. 전봉훈 [REPLY]
취직자리를 알아보다 문득... 2005/12/28 (Wed)

안녕하세요. 취직자리를 알아보다...
문득 안영기님이 떠올라서 왔습니다. =)

다름이 아니라.. 제가 볼 때 안영기님은 게임제작을 너무나 좋아하고, 또 잘 하셨고, 그렇기 때문에 게임쪽 취직도 쉽게 좋은 곳으로 갈 수 있었을텐데요.. 삼성에 들어가신 특별한 이유라도 있나요? 일반적으로 생각해 보면.. 대기업이고 안정적이기 때문에 들어갔다고 보이지만.. 또 다르게 삼성보다 게임프로그래머로 취직했을때의 단점같은것이 있었을텐데요. 어떤것이 있는지 알고 싶어요.

#167-1. 안영기 2005/12/29 (Thu)
어렵고도 간단한 답변을 하자면..
'학벌 및 경력 세탁'입니다.

제가 갈 당시만 해도 IT가 거품이 팽배했기 때문에 대기업이 크게 유리하지는 않았습니다. 게가 들어갈 당시만 해도 돈을 적게 줘서 다른 벤쳐로 이직하는 사람이 많았거든요 (당시 대졸 초봉 1850). 당시 몇 개의 진로가 있었는데 나름대로의 최선을 선택했습니다.


#166. 조영칠 [REPLY]
좋은자료 감사드립니다...잘보고 갑니다... 2005/12/28 (Wed)

directmusic에관한 자료를 찾던중 방문하게 되었습니다... 좋은자료 이렇게 공유해주신거 감사합니다.


#159. 박성준 http://www.cyworld.com/popo8402 [REPLY]
본 소스는 어떤의미인지? 2005/12/18 (Sun)

function TDDCanvas.DrawingAllowed : boolean ;

기초적인 질문인것같지만...
좋은답변 부탁드리겠습니다. ^^ 꾸벅~

#159-1. 안영기 2005/12/20 (Tue)
기본 문법부터 공부하셔야겠습니다.
저것은 pascal이나 delphi에서 class의 멤버 함수를 선언하는 가장 기본적인 부분입니다.

일단 기본을 익히신 후 질문을 하는 것이 순서인 것 같습니다.

#159-2. 박성준 http://www.cyworld.com/popo8402 2005/12/24 (Sat)
죄송합니다.
인터넷에서 질문을 하다보니...
너무 성의없이 질문을 한것 같습니다.
좀더 공부를 하고 모르는것 있음 그때
다시 방문하여 질문하도록 하겠습니다.

Merry Christas!!
Happy New Year!!


#156. 박성준 http://www.cyworld.com/popo8402 [REPLY]
FSurface.. 아무리 찾아봐도... 2005/12/15 (Thu)

검색능력이 떨어지는건지 모르겠지만...
FSurface 아무리 찾아봐도 뭔지 잘...
알려주시길 부탁드리며, 메신의 게임이요.
SKT... 다운받아서 게임하면 패킷요금 안
들어가나요?

#156-1. 안영기 2005/12/16 (Fri)
FSurface는
변수 이름입니다. 변수 이름을 검색해봤자 아무 것도 찾을 수 없고, 그것이 IDrectDrawSurface7 정도 된다면 그것을 MSDN 사이트에서 찾아 보면 됩니다.

(참고로 델파이는 private member 변수의 앞에는 'F'를 붙이는 것이 관례입니다)

#156-2. 박성준 http://www.cyworld.com/popo8402 2005/12/16 (Fri)
헉... 답장이 아래에...
답장이 아래 달렸네여
좀 헤깔려서... ㅡ.ㅡ


#154. 박성준 http://www.cyworld.com/popo8402 [REPLY]
DDraw Unit이 뭔가요? 2005/12/06 (Tue)

소스를 분석하고 있습니다.
DDraw Unit이 뭔지 몰라서요.
어디에 쓰이는 Unit이며,
DDraw가 Direct Draw가 맞나요?
Draw라면 그리는 유닛인가? ;;;

#154-1. 안영기 2005/12/07 (Wed)
DirectDraw 관련이겠지요.
자세한 것은 검색을...

#154-2. 박성준 http://www.cyworld.com/popo8402 2005/12/16 (Fri)
Surface가 뭔지 MSDN에서 찾아봐야 겠네요.
Surface가 뭔지 MSDSN에서 찾아보려구여
모르는건 못참는 성격이라...
언제부터 이런 고약한 성격이 나왔는지는
저도 잘 모르겠어요.

영기님!
음. 갠적으로는 예전에 대변파이터부터
줄곧 이름을 알아왔었습니다. 남은 2005년
잘 마무리하시길 바랄께요...!!!


#153. 박성준 http://www.cyworld.com/popo8402 [REPLY]
IDirectDrawSurface 2005/12/04 (Sun)

DDCanvas.pas파일을 분석중입니다.
IDirectDrawSurface란 내용이 나오던데..
어떤 뜻인가요? 답 부탁드립니다.

#153-1. 안영기 2005/12/04 (Sun)
음.................
그건 DirectX의 DirectDraw의 interface 중의 하나인데, 화면을 이루는 메모리의 영역을 나타내는 interface입니다.

더 자세한 내용은 DirectX SDK 문서를 참고하세요. 최신버전인 9에는 DIrectDraw가 없고, IDirect3DSurface9이란 이름의 것이 있긴한데 조금 다릅니다.


#152. 욱이 [REPLY]
3D 타일 붙이기 2005/11/12 (Sat)

캐릭터를 화면 중앙에 위치시키기 위해

tile := map[(hLoop+mapy-8)*mapTPL+wLoop+mapx-8] and $FFFF;
height := map[(hLoop+mapy-8)*mapTPL+wLoop+mapx-8] shr 16;

Map2Vertives함수에서 키를 누를때마다 mapx, mapy만 바꿔서 맵을 이동하고 캐릭터좌표를 갱신했습니다.

그런데 movex, movey가 0.02씩 1.0이 될때까지 움직이려고 하니 문제가 생기네요.

inc(numVertices, MakeVertexXYZ(movex-0.5+x*1.0, 0.0, -0.5+z*1.0, movey+0.5+x*1.0, 0.0, 0.5+z*1.0, tile, vertices[numVertices]));

movex, movey가 같을때만 앞뒤로 부드럽게 이동하고 옆으로는 안되네요.

어찌하면 되는지 좀 가르쳐주세요.

#152-1. 안영기 2005/11/13 (Sun)
아래의 질문도 그렇고 이 질문도 그렇고...
제가 내용을 이해하기가 좀 어렵네요.

그리고 그런 문제를 떠나서 저의 소스 자체를 이해하신다면 변경 또는 확장이 별로 어려운 것은 아니라고 생각합니다.

그 샘플은 화면 출력 방식만 3D일뿐이지 실제로는 2D 타입맵 형식의 내부 구조를 가지고 있습니다. 따라서 2D에서 캐릭터 이동을 해보셨다면 그것을 그대로 응용하시면 됩니다. (만약 2D에서 구현 해본 적이 없으시다면 2D에서 먼저 구현을 하는 것이 순서일 것입니다)

그리고 이 샘플이 캐릭터를 움직이기 위해 만든 구조는 아니기 때문에 원래 샘플의 구조에서 뭔가를 변경해서 원하는 결과를 나오게 하려 한다면 약간의 무리가 따릅니다. 그냥 새로 구조를 설계 하시는 것이 더 빠를지도 모르겠습니다.

#152-2. 박성준 http://www.cyworld.com/popo8402 2005/12/05 (Mon)
감사합니다.
감사합니다.


#151. 욱이 [REPLY]
3D 타일 붙이기 2005/11/10 (Thu)

지도를 크게 하니(256x256) 느려지던데....
어쩔 수 없는 건가요?
적당한 각도로만 고정해 느려지지 않게 하는 방법은 없을까요?
또 캐릭터를 중앙에 놓고 움직이게 하고 싶은데요. 어떻게 하는지 좀 가르쳐주세요.
자꾸 귀찮게 해서 죄송합니다.

#151-1. 안영기 2005/11/10 (Thu)
그렇게 크게하면..
모든 것을 다 그리기 때문에 속도가 느려집니다. 보통은 frustum culling을 통해 화면에 나타나는 영역만 표시를 해주어야 속도가 빨라집니다. 또, 제 예제는 2D 형식의 타일 맵을 가지고 있으므로 256*256을 화면상에 보이는 영역에 대해서만 타일 출력을 해도 해결됩니다. (초기의 맵 값이 제가 계산한 보이는 영역의 최대 크기입니다 -fog 적용시-)

#151-2. 욱이 2005/11/11 (Fri)
타일 좌표를 어떻게 구분할 수 있을까요?
가르쳐주신데로 지도도 크게해서 화면상에 보이는 영역만 출력을 했고
캐릭터도 중앙에 배치해 키보드로 움직이게 했는데요.
마우스로 움직이게 하려니 좌표문제가 걸리네요.
타일을 그릴때 어떻게 해야되는것 같은데 힌트좀 주세요.


#149. 욱이 [REPLY]
3D 타일 붙이기에서 캐릭터를 움직이게 하려면 어찌하나요? 2005/10/27 (Thu)

보이는 각도는 놔두고 캐릭터만 이동하려면
소스에서 어떻게 해야 하나요?
x,y x,z, y,z 조합 전부 해봤는데...
공부중인데 영 어렵네요...
그리고 항상 양질의 강좌 정말 감사합니다.

#149-1. 안영기 2005/10/28 (Fri)
그 소스는 캐릭터가 항상 (0,0)으로 되어 있습니다.
움직이시려면... Test()라는 함수 제일 마지막 부분의 20줄을 고치면 되는데요.. vertices[0].position과 vertices[1].position만 수정하면 됩니다. 구체적인 방법은....

vertices[0].position := D3DXVector3(s_chara_x + -0.5 * sin(angle), 1.0, s_chara_y + 0.5 * cos(angle));

처럼 s_chara_x와 s_chara_y를 추가하시고 이것을 사용자 값에 따라 변화시키면 타일 위를 움직입니다. 만약 점프를 하게 하려면 1.0이라는 값에 +/-를 해주면 됩니다. (현재 y축이 높이 방향입니다)


#148. 방문객 [REPLY]
게시판 2005/10/21 (Fri)

작성자가 마음대로 글 수정, 삭제 할 수 있게 좀 바꾸면 안되겠습니까?

글 한번 잘못쓰면 정말 큰일나겠네요...

http://smgal.com/ 의 게시판들은 모두 그런식입니다...

#148-1. 안영기 2005/10/21 (Fri)
현재는 불가능합니다.
그리고 고치려면 제가 직접 글을 열고 하나 하나 수정해야 하니 작업양도 만만찮습니다.

그리고 글을 큰일 날 정도로 잘못 쓴다는 것은 쓰는 사람에게 문제가 있는 것이지요.

#148-2. 안영기 2005/10/21 (Fri)
그러고 보니..
이 글은 이 게시판과 관련이 없으니 며칠 후에 삭제합니다.

#148-3. 방문객 2005/10/21 (Fri)
음...
그렇다면 언젠가 http://smgal.com/ 의 대대적인 개편을 한번 시도해 보시는게 어떻겠습니까?

성인인증시스템도 도입을하고...

그냥 제 의견일 뿐입니다.

안영기님 의지에 맞기겠습니다.

#148-4. 안영기 2005/10/21 (Fri)
글을 쓰는 것도 벅차고
관리를 제대로 할만한 시간도 없는데... 개편할 시간이 있을리가...


#147. 우연히 찾아온 방문객 [REPLY]
안녕하십니까? 2005/10/14 (Fri)

저는 `또다른 지식의 성전`과 `데자뷰`를 지금 열심히 하는 사람인데...

한가지 궁금한게 있습니다.

데자뷰에서부터 등장하는

단어만 타이핑하면

그거에 대한 설명이 다나오는

그 방식은 어떻게 해서 생각해 내신건지요?

조금 흥미있기도 하지만

무슨단어를 입력해야될지 막막해질때도 있고...

이왕이면 단어가 아니라

`칸타리스트로 가려면 어느쪽으로 가야되나요?`

라는 식으로 문장을 입력하는 방식도 괜찮으리라고 생각됩니다만...(그런 방식으로 제작하시려면 힘드시겠지만 그냥 제 의견입니다...)

p.s.그리고 그 머쉬룸크라우드 교도들도 참어리석다고 생각이 드는군요... 팬던트만 있으면 무조건 자기편인줄 알고 착각하니...

#147-1. 안영기 2005/10/14 (Fri)
안녕하세요. 방문객(?)님
단어를 타이핑하면 그것에 대한 설명이 나오는 방식은 아주 예전부터 쓰인 방식입니다. 원류는 텍스트 어드벤쳐가 될 것이고 그것을 롤플레잉에 접목한 것이 울티마4 이후나 그 시절에 나온 유사한 게임들입니다. 절대 데자뷰만의 독창적인 시스템이 아닙니다.

그리고 말씀하신대로 문장을 입력하는 것이 더 좋으나, 각 사람마다 그런 것을 데이터 베이스화 한다는 것은 거의 무리입니다. 구현하기도 힘들고요.


#146. 최명용 [REPLY]
mmx에 대해서 2005/10/09 (Sun)

안녕하세용 ^^
저는 부산 멤버십 14기 최명용입니다.
우연히 데브피아에 선배님의 주소가 있어서 이렇게 찾아 뵙게 되었습니다. 저는 게임도 관심이 있지만 지금 하는 일이 멀티미디어 관련 쪽이라서 그쪽에 cpu의 연산 부하가 무자게 걸려서 MMX를 적용해 보고자 합니다.
하지만 아는 지식도 없고 어셈도 아직 서툴고 해서 걱정입니다. 선배님의 예전에 적어셨던 글들 새삼 저가 부끄러울 따름입니다.
참고로 저가 하고 있는 쪽은 실제 카메라를 이용해서 영상과 카메라의 합성에 관해서 하고 있는대 실시간적인 처리라서 지금 CPU3.0에서도 버벅되고 있습니다. 참고자료나 관련자료 있어시면 메일로 답변 부탁드립니다.
그럼 즐거운 일요일 보내시기 바랍니다.

#146-1. 안영기 2005/10/12 (Wed)

안녕하세요. 처음 뵙겠습니다.

말씀만 가지고는 잘 모르겠네요.. 단지 영상 위에 오버레이로 크로마키 처리한 카메라 영상을 띄우시는 것이라면 속도가 그렇게 안날리도 없고... 혹시 블렌딩 하는 것인가요?

MMX는 CPU를 이용해서 크로마키 처리 또는 short 형 블렌딩을 빠르게 할 수 있는 능력이 있긴 하지만, 아무래도 지금은 DirectX를 사용하는 것이 가장 빠르게 블렌딩이나 크로마키를 처리할 수 있을 것 같습니다. CPU와 GPU의 일을 분리하기 때문에 여러면에서 이득을 얻으실 수 있을 겁니다. 일례로 DirectX9의 DirectShow 예제에 보면 동영상의 각 프레임을 실시간으로 texture 처리해서 3D가속기를 이용할 수 있게 해주는 예제가 있습니다. 만약 원하시는 방식에 부합하는 것이라면 이런 방법도 한 번 고려해 보시는 것이 어떨까 생각됩니다.

(멤버쉽에 안가본지 5년은 된 것 같네요.. -_-;;;;;)


#145. 전봉훈 [REPLY]
안영기님은.. 2005/09/10 (Sat)

A* 클래스같은건.. 눈감고도 순식간에 만드시겠죠?
전 지금 2번째 만드는 중인데 자꾸 에러나고.. 잘안되고..
한번 만들어봤던것도 이모양인건 제 머리가 나빠서 일까요..?

#145-1. 안영기 2005/09/11 (Sun)
설마 그렇겠습니까..
하지만 A*는 '그녀의 기사단'을 만들 때 이미 검증된 class를 만들어 놓았기 때문에 그것을 재사용할 수 있기 때문에 굳이 다시 만들 필요가 없는 것이지요.

그리고 자신이 직접 만들지 않더라도 A*의 경우에는 거의 generic algorithm이기 때문에 다른 사람이 이미 구현 해 놓은 것도 많을 것입니다. 저 역시 처음 할 때는 다른 사람이 만들어 놓은 A+ 알고리즘을 사용하다가, 나중에는 확장된 기능을 사용하려고 그 내용을 이해해서 A*를 자신의 용도에 맞게 costomize한다든지 해서 사용합니다.


#144. 인터넷 왕초보 [REPLY]
하나만 더 물어봐도 될까요? 2005/09/07 (Wed)

이런건 이 게시판 성격에 별로 안맞지만요... 그래도 행패/난동/압박/도배/일기 같은게 아니니까 답변해 주실거라고 믿습니다.
여기 이 http://smgal.com/ 에 접속하면 다른 사이트로 주소창에 직접써서 이동하기 전까지는 계속 주소창에 남아서 다른 링크를 클릭하더라도(http://avej.com/ 같은거...) 계속 http://smgal.com/ 이 남거든요? `새로고침`을 클릭하면 바로 smgal.com메인화면으로 이동되구요... 이런 수법을 쓰려면 어떻게 해야되지요?

#144-1. 안영기 2005/09/09 (Fri)
프레임을 사용하시면 됩니다.
주소창의 주소는 항상 프레임의 주소를 기준으로 하니까 프레임은 그대로 두고, 실제 화면 창과 크기가 같은 서브 프레임을 만들어서 그곳만 갱신하면 됩니다. 서브 프레임이 갱신되다고 해서 IE의 주소창의 주소가 바뀌는 것은 아니니까요.

현재 창에서 IE의 메뉴의 '보기 - 소스'를 해보시면 프레임으로 되어 있는 것이 보이실 겁니다.

#144-2. 왕초보 2005/09/09 (Fri)
정말 감사합니다.
^^;


[PREV] [1][2][3][4][5][6][7] [NEXT]


IRiS nX by NvyU =starry scape=