블로그는 나의 힘!
[ Programing ]/OpenGL2009. 12. 23. 23:55
[OpenGL Move]
 
#include <math.h>
 // open GL VECTOR Normalize
 VECTOR* Normalize( VECTOR *pOut, const VECTOR *pV )
 {
     //REAL32 len = pV->x * pV->x + pV->y * pV->y + pV->z * pV->z;
     float len = pV->x * pV->x + pV->y * pV->y + pV->z * pV->z;

     if( len > 0.000001f )
     {
         len = Math::Sqrt( len );
         pOut->x = pV->x / len;
         pOut->y = pV->y / len;
         pOut->z = pV->z / len;
     }
     else
     {
         pOut->x = 0.f;
         pOut->y = 0.f;
         pOut->z = 0.f;
     }

     return ( VEC3D* )pOut;
}
 

// open GL VECTOR 길이 구하기
float Lenght( const VEC3D *pV )
{
     return Math::Sqrt( ( pV->x * pV->x ) + ( pV->y * pV->y ) + ( pV->z * pV->z ) );
}



 - openGL 이동. DirectX랑 차이점이라면, Callback으로 환경을 설정하고, Push()로 값을 넣고 Pop()으로 닫아 
   종료하는 형태가 인상적이다.
- DirectX와 달리 VECTOR 가 바뀐 값은 보관하고 있지 않는다. 직접 데이터 담을 구조체를 만들어 데이터를 보관하고
  있어야 한다. 다시 돌아오면 openGL의 값은 0으로 초기화.
- openGL은 말 그대로 3D를 지원하는 util 일뿐. DirectX 처럼 vertex 지원은 아주 미미.
- 하지만 DirectX보다 Render 쪽은 더 깔끔한 편.
Posted by Mister_Q
[ Programing ]/C++2009. 12. 23. 20:01

 [동적 메모리 해제 매크로] SAFE_DELETE();

====================================================================================
#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=0; } }
#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p);   (p)=0; } }
#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=0; } }
 
void main() {
    int* pi = NULL;
    pi = new int();
    
    ASSERT( pi );
    *pi = 3.141592f;
    TRACE( "pi = %i \n", *pi );
    SAFE_DELTE( pi );
}
 
// 차이점은 해제하려는 동적 메모리 포인터가 NULL인지를 검사한 후 해제 한다.

 - 동적 메모리 해제 매크로이다.
 - 포인터가 NULL 인 경우의 crash를 막기 위해, 해제하려는 포인터가 NULL 인지를 검사.
 - 해제 후에는 포인터를 NULL로 초기화

라벨 수정: 2006. 6월호 마이크로소프트웨어 - C++ 99% 활용법 생성자,소멸자 활용하기 p317

 
Posted by Mister_Q