본문 바로가기

예전/3D

(50)
[3D] 픽킹 (Picking) 픽킹이란 2D 스크린 좌표를 3D 좌표로 변경한 후 동일한 공간 내에서 교차 판정 하는 것이다. 여기서 중요한 것은 2D 좌표를 3D 좌표로 변경한다는 것이고, 동일한 공간! 내에서 교차판정한다는 것이다.동일한 공간이 중요하다.지형의 좌표가 존재하는 공간이 월드 공간이기 때문에 반드시 월드 공간으로 바꿔줘야한다. 과정을 간단히 말하자면,1. 윈도우 좌표를 3D 좌표로 변경시킨다.2. 폴리곤과 충돌체크를 한다. (IntersectTriangle)이다. 픽킹이 처음에 어렵게 느껴지는 이유는 이 IntersectTriangle 함수가 프로그램을 위해 최적화된 함수로 몇몇 과정들이 축소되어있기 때문이다. ( Picking에 관한 코드는 Dx SampleBrowser에도 존재 하니 그걸 참고하세용 ~ 저도 그걸 ..
[3D] 알파 블렌딩 (ALPHABLEND) 알파 블렌딩 이란 픽셀을 조합하는 기술이다.Dest(대상)에 Src(원본) 을 변경 조합해서 픽셀 색을 조정한다. 알파 블렌딩을 할 때 주의 사항은 현재 그려져 있는 대상과 렌더링할 폴리곤의 색을 합성하는 것이기 때문에 불투명 오브젝트를 렌더링 해야한다. 알파 블렌딩을 할 때는 1. 블렌딩을 하지 않는 물체를 먼저 그리고, 2. 블렌딩을 할 물체를 카메라와의 거리에 따라 정렬한다.3. 블렌딩을 이용하는 물체들을 뒤에서 앞 순서로 그려나간다. 알파 블렌딩은 부하가 심한 작업이므로 렌더링이 끝나면 꺼줘야 한다. 또한 블렌딩이 필요한 폴리곤들을 한번에 처리해 하나의 프레임에서 여러 번 블렌딩을 켜고 끄는 일은 피하는 것이 좋다. 키고 끄는 방법은 g_pd3dDevice->SetRenderState(D3DRS_..
[3D] 컬링 모드 3D 의 컬링 모드에 3가지 인줄 알았는데 알고보니 4가지가 있다. typedef enum _D3DCULL { D3DCULL_NONE = 1, D3DCULL_CW = 2, D3DCULL_CCW = 3, D3DCULL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */} D3DCULL; D3DCULL_NONE 뒷면의 컬링(Culling)는 하지 않는다.D3DCULL_CW뒷면을 우회전으로 컬링(Culling) 한다. (시계)D3DCULL_CCW뒷면을 왼쪽 회전으로 컬링(Culling) 한다. (반시계)D3DCULL_FORCE_DWORD이 열거형을 강제적으로 32 비트 사이즈에 컴파일 한다. 이 값은 사용되지 않았다. g_pd3dDevice->SetRenderSt..
[3D] SetSamplerState 텍스쳐는 스크린 좌표에서 삼각형에 입혀진다. 텍스쳐와 폴리곤의 크기가 다른경우 축소 혹은 확대 되어 적용된다. 이때 왜곡이 발생하는데 필터링을 통해 이러한 왜곡현상을 줄이기 위해 SetSamplerState 함수를 사용한다. HRESULT SetSamplerState( DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value );Sampler[in] 샘플러 스테이지 인덱스.Type[in] 이 파라미터에는,D3DSAMPLERSTATETYPE 열거형의 임의의 멤버를 지정할 수 있다.Value[in] 설정하는 스테이트값. 이 값의 의미는 Type 파라미터에 의해 정해진다. 성공했을 경우는,D3D_OK 를 돌려준다.실패했을 경우는,D3DERR_INVALIDCALL 를 돌려준..
[3D] 절두체 컬링의 종류 절두체 컬링의 종류화 간단한 이해를 적은 글로 GPG 5권 1.6 개선된 절두체 선별을 보고 공부한 후 작성했습니다. 컬링이란 게임 내의 물체를 적절히 관리해 렌더링을 효과적으로 하기 위한 일로쉽게 말하면 부하가 심해져서 프로그램에 렉이 걸리지 않기위해 하는 것이다. 절두체란 시야에 보이는 영역을 표현한 입체로 카메라 투영행렬로 나타낼 수 있다. 1. 6 평면 방식 - 가장 일반적인 방법의 컬링이 절두체의 6 평면을 이용한 것인데,한 정점이 절두체 안에 있는지 알기 위해 평면 방정식으로 판단하는 것으로 6 평면 모두를 판단 한다. 단점은 모든 평면의 평면 방정식을 만족해야 안심할 수 있다는 것이다.또한 절두체의 위치나 방향을 얻는데 드는 비용이 상당하기 때문에 카메라 이동 시 마다 계산한다고 해도 불필요..
[3D] 지형에서 지형에서 Vertex 버퍼로 만들 때 필요한 Vertex의 수는(w-1)*(h-1)*6 셀의 수는(w-1)*(h-1) Index 버퍼로 만들 때 필요한 Vertex의 수는w*h Index 버퍼의 수는(w-1)*(h-1)*2
[3D] 3D 물체 중심으로 카메라 회전 (RPG 카메라) 아 ...구글링아무리 해도 안나와서 화났는데어쩌다 됬어 이게 더화나!!!!!!!!!!!!!ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 아 멘붕ㅇㅅㅇ 결론적으로 http://www.gpgstudy.com/forum/viewtopic.php?t=14612 여기서 참고 했는데, 카메라의 모든 벡터들 즉 Look,Up,Right,Eye 를 각도에 따라 회전시켜줘야한다. ... 그러면 엄청 잘됨 ... // LookAt을 중심으로 회전 voidJB_RPGCam::RotateLR(const float& fAngle) { D3DXMATRIXA16matRot; D3DXMatrixRotationY(&matRot, fAngle); D3DXVec3TransformCoord(&m_vLookAt,&m_vLookAt,&matRot); D3DXVec3Tr..
LOD http://blog.naver.com/song2201?Redirect=Log&logNo=100172176072 http://kin3d.tistory.com/entry/Geo-Mipmap%EB%B0%A9%EC%8B%9D%EC%9D%98-%EC%A7%80%ED%98%95-Static-LOD http://www.cyworld.com/vanil1asky/9292193