3D 수학 기본 (WinAPI, DirectX 렌더링)

2018. 6. 12. 12:21기술/자체엔진

반응형

홍보

몬스터 키우기 - Google Play 앱

 

몬스터 키우기 - Google Play 앱

귀여운 몬스터를 소환하고 성장 시켜보세요.

play.google.com

본인이 만든 RPG 게임 입니다.

몬스터와 장비를 소환하고 장비를 장착하여 강해지는 게임입니다.

PlayFab 서버가 적용되어 있습니다.

Facebook SDK와 로그인이 적용되어 있습니다.

 

2048 퍼즐 - Google Play 앱

 

2048 퍼즐 - Google Play 앱

2048 퍼즐 게임입니다.

play.google.com

아주 단순한 2048 숫자 퍼즐 맞추기 게임입니다.

3x3, 4x4, 5x5, 6x6, 8x8 모드와 그래픽 컬러감을 좋게 하였습니다.

서버 사용 X, 세계 176개국에 출시하였습니다.

 

 


최대한 근본 원리를 이해하는 것이 목표입니다.

 

3D 수학

벡터와 스칼라

벡터의 덧셈, 뺄셈, 스칼라곱​

벡터의 길이

벡터의 정규화(Normalize)

​벡터를 내적(dot product)

벡터의 외적(cross product)

 

행렬

단위행렬

항등행렬(Identity)

전치행렬(Transpose)

역행렬

이동 행렬

​X, Y, Z축 회전 행렬

크기 변환 행렬

위치 벡터의 행렬 연산(TransformCoord)

방향 벡터의 행렬 연산(TransformNormal)

 

프로그래밍 언어 문제 (C++)

오버로딩과 오버라이딩

연산자 오버로딩

포인터와 레퍼런스

컴퓨터에서 실수(float) 비교 방법

 

 

큐브

정점 좌표를 좌하단 (-1, -1, -1) 우상단 (1, 1, 1) 이렇게 해서 총 8개의 정점을 사용하고 삼각형 인덱스를 총 12개를 만들어서 Windows API로 선을 그려줍니다.

큐브 캐릭터 이동과 점프

 

바닥 그리드 그리기

렌더링 파이프라인

정점들을 로컬 좌표에서 월드 좌표로 변환하고

뷰변환 행렬

투영 변환 행렬

뷰포트 변환 행렬을 거쳐 모니터 화면에 그려줍니다.

모든 것은 CPU 렌더링.

(현재 GPU 셰이더 렌더링을 사용하지는 않습니다.)

 

DirectX9 API

정점(Vertex, Color)을 이용한 컬러 큐브 그리기(Rendering)

정점(Vertex, Normal)을 이용한 빛에 영향받는 큐브 그리기(Rendering)

정점(Vertex, Normal, Texture uv)를 이용한 빛에 영향받는 텍스쳐 큐브 그리기(Rendering)

삼각형의 Normal값은 삼각형의 두 벡터를 외적하여 구합니다. (삼각형 마다 노멀벡터 구할 시)

각 정점 Normal을 구하려면 각 정점에서 중심점을 빼고 길이를 1로 정규화 해서 방향벡터로 만듭니다.

위에서 보라색 평면은 6개의 텍스쳐를 사용한 밉맵필터입니다.

 

3D 수학

벡터와 행렬(Vector, Matrix)에 대한 이해 (크기, 회전, 위치) 설정

캐릭터 이동시 앞방향 벡터를 사용해서 이동시켜 줍니다. 점프 물리 이해

AABB 충돌 처리 (충돌박스의 좌하단이 다른 충돌박스의 우상단 안에 있으면 충돌로 간주합니다.)

 

정육각형을 따라다니는 큐브

두 정점을 선형보간 하고 Z축 벡터와 정육각형의 한 벡터의 내적을 이용하여 각도를 구한 다음 큐브를 회전 시키기

이 이론을 사용하면 웨이포인트를 이용하여 몬스터 이동을 구현하거나 캐릭터가 마우스 클릭 위치로 이동하는 것을 구현할 수 있습니다.

 

카메라 생성과 뷰행렬 프로젝션 행렬 이해

 

캐릭터

캐릭터 생성과 컨트롤 (이동, 점프, 다른 충돌박스 위에 올려두기)

 

캐릭터 구조

Root가 몸통이고 자식객체로 머리, 팔 다리 

(즉, 손에 글러브 큐브를 달아주거나 검 큐브를 달아주어 무기를 들 수 있습니다.)

 

텍스쳐와 u, v좌표 (정점에 u, v좌표값을 대입하여 삼각형을 두개 그리고 텍스쳐 입히기)

렌더링 객체를 리스트 자료구조에 담아 놓고 렌더링을 하는데 머리 메쉬를 교체

 

빛(Light)에 대한 이해와 설치 

태양빛(Directional Lignt), 광원(Point Light), 손전등(Spot Light)

물체 색상(Diffuse), 주변광(Ambient), 반사광(Specular)

 

2차원 배열(Array)을 이용한 소코반 게임

맵에 목표 지점 3개 지정, 맵에 벽 지정, 맵에 옮길 박스 지정

캐릭터는 동, 서, 남, 북을 인식

박스를 이동시 벽이 있거나 다른 박스가 있거나 맵 밖일 경우 이동하지 않음

박스를 이동할 때마다 목표지점에 다다른 박스 수를 세어서 게임 성공 체크

 

엔진 설계 리팩토링

-> Game Object Component System 설계 적용과 셰이더

 

예정 목표

3D수학으로 할 수 있는 것들 구현해보기, 공 포물선 구현, 베지어 곡선 이해와 구현

 

 

 

 


홍보

몬스터 키우기 - Google Play 앱

 

몬스터 키우기 - Google Play 앱

귀여운 몬스터를 소환하고 성장 시켜보세요.

play.google.com

본인이 만든 RPG 게임 입니다.

몬스터와 장비를 소환하고 장비를 장착하여 강해지는 게임입니다.

PlayFab 서버가 적용되어 있습니다.

Facebook SDK와 로그인이 적용되어 있습니다.

 

2048 퍼즐 - Google Play 앱

 

2048 퍼즐 - Google Play 앱

2048 퍼즐 게임입니다.

play.google.com

아주 단순한 2048 숫자 퍼즐 맞추기 게임입니다.

3x3, 4x4, 5x5, 6x6, 8x8 모드와 그래픽 컬러감을 좋게 하였습니다.

서버 사용 X, 세계 176개국에 출시하였습니다.

반응형

'기술 > 자체엔진' 카테고리의 다른 글

셰이더 (Shader)  (0) 2018.07.19
벡터의 외적  (0) 2018.06.29
MaxExporter ASE DirectX  (0) 2018.06.27
Game Object Component System 설계  (0) 2018.06.27