Notice
Recent Posts
Recent Comments
Link
헤더파일
Shape Shooter - OpenGL 3D 게임 본문
개발 환경
-
C++
-
OpenGL
게임 소개
-
화살표 모양의화살표 모양의 플레이어가 도형의 면에 총알을 맞추면 같은 무작위 색깔로 바꿉니다.
-
모든 면을 같은 색깔로 만들면 다음 스테이지로 넘어가는 게임입니다.

게임 특징
텍스쳐
FreeImage 라이브러리를 이용해 이미지 파일을 Byte 형태로 변환했습니다. 원하는 너비와 크기로 바꿀 수 있고 Bind 함수를 이용해서 쉐이더에 바인딩할 수 있습니다.
static BYTE* load_image(const char* fileName, GLsizei* width, GLsizei* height, unsigned int* bits)
{
FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
FIBITMAP* dib = nullptr;
fif = FreeImage_GetFileType(fileName, 0);
if (fif == FIF_UNKNOWN)
fif = FreeImage_GetFIFFromFilename(fileName);
if (fif == FIF_UNKNOWN)
return nullptr;
if (FreeImage_FIFSupportsReading(fif))
dib = FreeImage_Load(fif, fileName);
BYTE* result = new BYTE[size];
memcpy(result, pixels, size);
FreeImage_Unload(dib);
return result;
}
void Texture::bind() const
{
glBindTexture(GL_TEXTURE_2D, m_TID);
}
충돌 체크
기본 도형은 사각뿔이고 모든 도형은 피라미드를 조합해서 만듭니다. 각 피라미드는 삼각형 형태의 충돌체 목록을 가집니다.
class Pyramid
{
public:
...
TriangleList* GetCollider();
TriangleList colliderPlane;
};
각 면에 대해 충돌을 처리해야 하기 때문에 평면의 방정식을 이용해서 충돌을 처리했습니다.
bool PlaneCollision(Vector3* param, Vector3 point)
{
Plane plane = PlaneEquation(param);
float condition1 = plane.a*point.x + plane.b*point.y + plane.c*point.z + plane.d;
float condition2 = plane.d;
if (condition1*condition2 < 0)
{
Vector3 line[2];
line[0] = { 0,0,0 };
line[1].x = point.x;
line[1].y = point.y;
line[1].z = point.z;
float target = LineIntersectPlane(plane, line);
float dist = sqrt(pow(point.x, 2) + pow(point.y, 2) + pow(point.z, 2));
//cout << target << endl;
if (dist < target+50)
{
return true;
}
}
return false;
}
'포트폴리오 정리' 카테고리의 다른 글
드론 마스터 - 드론 자격증 시뮬레이터 (0) | 2019.09.15 |
---|---|
Drone Tracks - 드론 레이싱 게임 (2) | 2019.08.26 |
자전거야 놀자 - Open API 를 사용한 파이썬 프로그램 (1) | 2019.08.20 |
랜덤 유닛 디펜스 - 파이썬 2D 게임 (0) | 2019.08.15 |
탱크 러시 - 네트워크 2D 게임 (0) | 2019.08.02 |
Comments