Search Results for '게임프로그래밍'

4 POSTS

  1. 2007/08/01 enum
  2. 2007/05/29 알파 블랜딩 + 알파 테스트로 나무그리기
  3. 2007/04/16 [DX] D3DXMatrix
  4. 2007/04/16 [DX] 3D 프로그래밍 기초상식

enum

Posted 2007/08/01 13:30, Filed under: Code Factory
// C4482.cpp
// compile with: /c /W1

struct S {
  enum E { a };
};

int i = S::E::a;   // C4482
int j = S::a;   // OK

enum - 열거체의 경우 잘못된 사용법에 따라 지적을 받았는데,
Gpg에 질의하여 왜 잘못되었는지 알게 되었다.
열거체로 정의했을 경우 SKILL::ICEBALL 같은 것은 오류 라는것!
당연한 이야기만 위와같은 예는 네임스페이스가 아니기 때문이다.
그것을 보안하기 위해 namespace나 위와같이 struct로 감싸는 것이 좋다.

namespace VTX_BOX
{
  enum{ FVF = ~ }
}

Leave a comment


1. 알파블랜딩

m_pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE );
m_pDevice->SetRenderState( D3DRS_SRCBLENDD3DBLEND_SRCALPHA );
m_pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );


사용자 삽입 이미지

오른쪽처럼 뒤쪽에 있는 매쉬부터 그려오면 문제가 없지만, 왼쪽그림처럼 앞쪽이 먼저그려진다면,
치명적인 결과를 불러 일으킨다!! ㅜ_ㅜ.




2. 알파테스트

m_pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
m_pDevice->SetRenderState( D3DRS_ALPHAREF,        0x08 );
m_pDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL );


사용자 삽입 이미지

알파블랜딩처럼 치명적인 위험은 전혀 없지만, 나무 가장자리가 도트수준으로 잘려 두드러져 보인다.
알파채널값은 0x08 로 설정되었고, 이값보다 크거나 같으면 텍셀을 출력하게 된다.


3. 알파블랜딩 + 알파테스트

m_pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE );
m_pDevice->SetRenderState( D3DRS_SRCBLENDD3DBLEND_SRCALPHA );
m_pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
m_pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
m_pDevice->SetRenderState( D3DRS_ALPHAREF,        0x08 );
m_pDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL );

사용자 삽입 이미지


사용자 삽입 이미지

정렬을 신경쓰지 않고 적절히 출력할수 있는 방법이나, 알파테스트로 잘려나가지 않은 부분에선(알파블랜딩)
위그림처럼 보는시점에 따라서 가장자리가 지저분해질 수 있다.



간단한 알파 데모

Leave a comment

[DX] D3DXMatrix

Posted 2007/04/16 18:43, Filed under: 3D Programming/Graphics

D3DXMatrixTranslation : 이동
-  D3DXMatrixTranslation( pOut, x, y, z )
M._41 = x
M._42 = y
M._43 = z
와 동일하고 위의 역행렬은 -x, -y -z를 입력한 행렬과 같다.

D3DXMatrixRotationX / Y / Z : 축 회전
- D3DXMatrixRotationX( pOut, Angle ) // in radian

D3DXMatrixScaling : 크기 변환
- D3DXMatrixScaling( pOut, sx, sy, sz ) // 배율 조정 1.0f 는 변하지 않는다.

M._11 = M._11 * sx
M._22 = M._22 * sy
M._33 = M._33 * sz

역행렬은

M._11 = 1 / sx
M._22 = 1 / sy
M._33 = 1 / sz

D3DXVec3Transform : 3차원 벡터를 4차원 벡터로 변환 행렬과 곱한후, 4차원 벡터로 리턴
- D3DXVec3Transform ( pOut, pV, pM ) vec4 = vec3 * mat

D3DXVec3TransformCoord : 3차원 벡터를 4차원 벡터로 변환 행렬과 곱한후, 3차원 벡터로 리턴
- D3DXVec3TransformCoord ( pOut, pV, pM ) vec3 = vec3 * mat

D3DXVec3TransformArray : D3DXVec3Transform을 배열단위로 연산

Plane : 평면을 4차원 벡터로 표현할수 있는 단위


Leave a comment

[DX] 3D 프로그래밍 기초상식

Posted 2007/04/16 18:38, Filed under: 3D Programming/Graphics
일반적으로 수학에서는

v' = M * v 이다.

v는 4x1 벡터고 M은 4x4 행렬이기 때문이다.

그러나 DX에서는 1x4 벡터를 쓰기 때문에,

v' = v * M

식이 된다.



v' = v * M1

v'' = v' * M2

v''' = v'' * M3

의 식은

v''' = v * M1 * M2 * M3

로 나타낼수 있다.

또한

Mt = M1 * M2 * M3
v''' = v * Mt

로 나타낼수 있고 Mt의 연산은 순서대로 이루어져야 된다.

Homogeneous coordinates

4차원이지만 3차원 벡터처럼 쓰이는 것...

3차원 벡터 -> 4차원 벡터

( x, y, z ) -> ( x, y, z, 1.0f )

4차원 벡터 -> 3차원 벡터

( x, y, z, w ) -> ( x/w, y/w, z/w )

Leave a comment


Recent Posts

  1. [참고자료] 모니터 해상도 도표
  2. [런타임에러] Expression: map/set it..
  3. *. 플러그인 랩퍼 사용하기 ( 3DS MAX..
  4. *. 스키닝 오프셋 벡터 [Offset Vecto..
  5. November 2007 DirectX SDK News

Recent Comments

  1. 관리자만 볼 수 있는 댓글입니다. 06/24

Recent Trackbacks

Calendar

«   2009/11   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

  1. Cafe24
  2. ForTheProgramming
  3. Tatter Tools
  4. 근석이
  5. 진호네

Site Stats

TOTAL 14472 HIT
TODAY 15 HIT
YESTERDAY 16 HIT
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.