★행렬(matrix)이란?


m개의 행(row) 과 n개의 열(column)으로 이루어진것입니다.

행렬을 m by n matrix라 읽습니다


이미지 출처 : 위키백과

이미지 검색결과


★상등행렬

행렬의 같은 꼴 : 행의 개수와 열의 개수가 각각 같은 행렬

행렬의 상등 : 같은 꼴이면서 대응하는 각 성분이 서로 같은 것


★정방행렬

행의 수 == 열의 수 인 것을 정방 행렬이라고 합니다.

n개의 행과 n개의 열을 가진 정방 행렬은 차수가 n이라고 하고

n 정방 행렬 (n by n Matrix) 라고 합니다.


★단위행렬(항등행렬,Identity Matrix)

이미지출처 : http://mp3119.tistory.com/entry/%ED%96%89%EB%A0%AC


단위 행렬은 어떤 행렬을 곱해도 같은 값이 나오는 행렬입니다.



★전치행렬

n by n 의 원소에 대칭되게 전치를 시켜준 행렬입니다.


★벡터과 행렬

벡터는 하나의 행 or 하나의 열로 표현할 수 있습니다.


행과 열로 표현한 행렬식



★행렬 연산




행렬의 곱





(벡터의 내적을 모아놓은것과 행렬의 곱셈은 같습니다)



★행렬의 성질



★행렬식(Determinant)



행렬식 구하는 법 - 소행렬식


그외 다른 방법들: http://twlab.tistory.com/41



★역행렬

( 이 역행렬을 배우기 위해 앞에 있던 것을 배웠다 해도 과언이 아닙니다. 그만큼 중요합니다)




 




★역행렬의 성질


'프로그래밍 > 게임수학' 카테고리의 다른 글

1. Vector (벡터)  (0) 2018.01.03
Posted by Dongkey
,

벡터는 방향+크기로 이루어져 있습니다.

게임에서 방향은 매우 소중합니다. 기본적으로 캐릭터가 이동을 하기 위해선 방향이 필요하기 때문이죠. 방향을 알기 위해 벡터를 알아보겠습니다.



★Vector 의 정의

Vector (벡터)  : 크기 + 방향에 의해 결정되는 양

Scalar (스칼라) : 벡터의 크기에 의해서만 결정되는 양


시점 (P) : 벡터가 시작되는 화살표의 꼬리

종점 (Q) : 벡터가 마지막 부분인 화살표의 머리

크기(P와 Q사이의 거리) : 방향과 상관없는 화살표의 길이


★Vector 의 크기

이미지 출처 : https://www.slideshare.net/QuentinKang/1-52920181

3차원 벡터의 크기
v = (vx, vy, vz)
||v|| = v2
x + v2
y + v2
z
vy
l1
l
l1
vx
vz
vy
(vx, vy, vz)
l2
1 = v2
x + v2
z
l2
= l2
1 + v2
...


벡터의 크기는 |V| 로 표기하며

V = (x,y,z)라 하면 피타고라스의 증명에 의하여

|V| = √x^2 + y^2  + z^2 이 됩니다



★Unit Vector (단위 벡터)

단위 벡터 : 벡터의 크기가 1인 벡터

벡터의 크기를 1로 만드는 행위를 Normalize(정규화) 라고 합니다.

 Uv = V / |V| 입니다.



★Vector 의 사칙 연산

덧셈 : 각각의 성분을 더해주면 됩니다. 

스칼라곱 : 각각의 성분에 스칼라를 곱하면  됩니다.

뺄셈 :  각각 성분을 빼주시면 됩니다.




★Vector 의 내적 (Dot)

내적(Dot product,Inner product,Scalar product)라고 합니다.

A ● B = A.x * B.x + A.y * B.y + A.z * B.z = |A||B|cosθ 입니다.


(증명은 생략하겠습니다.)


Vector에서 내적은 두 벡터의 사이각을 구할수 있기 때문에 매우 중요합니다. ★★★★★★★★★

A.x * B.x + A.y * B.y + A.z * B.z / |A||B| = cosθ 로

벡터 A와 B가 단위 벡터라면

A.x * B.x + A.y * B.y + A.z * B.z = cosθ 로 빠르게 각도를 구할 수 있습니다.

그래서 게임에서 캐릭터클래스가 방향을 가지고 있다면 주로 단위벡터로 방향만을 가지고 있습니다.


이미지 출처 : http://blog.naver.com/PostView.nhn?blogId=push1104&logNo=220863257036&parentCategoryNo=&categoryNo=20&viewDate=&isShowPopularPosts=false&from=postView


cos그래프에 대한 이미지 검색결과

A ● B > 0 이면 예각

A ● B = 0 이면 직각

A ● B < 0 이면 둔각 이라는 것을 알수 있습니다.


또한 내적으로 빛의 계산을 할 수 있으며 ( 이번 파트에는 다루지 않고 넘어 가겠습니다.)

투영 벡터를 구할 수 있습니다.



★벡터의 외적 (Cross)

벡터의 외적 : 두 벡터 모두에 수직인 벡터


벡터의 외적으로 법선 벡터를 구하여 평면의 앞과 뒤를 구분할 수 있습니다.


'프로그래밍 > 게임수학' 카테고리의 다른 글

2.Matrix (행렬)  (0) 2018.01.08
Posted by Dongkey
,

[선따기]루피

취미 생활 2018. 1. 3. 02:12


'취미 생활' 카테고리의 다른 글

[선따기] 토니토니쵸파  (0) 2017.12.30
Posted by Dongkey
,

STL 이란? 


STL( Standard Template Library ) 로 C++ 표준 라이브러리 입니다.

표준으로 정해져있으므로 매우 안전하며 개발시간을 단축하기 위해서 많이 사용합니다.

STL 을 알기 전에 자료구조가 무엇인지 알고 가는게 좋습니다.


STL은 C++의 Template 로 구현되어져 있습니다.


게임에서 주로 사용하는 STL 들은 list,vector,map 등이 있습니다.


STL의 구성요소에는 크게 컨테이너,할당기,반복자,어댑터,알고리즘,함수 객체로 이뤄져 있으며


컨테이너,알고리즘,반복자가 가장 중요한 요소입니다.


Containter (컨테이너)


 - 객체를 저장하는 객체,자료구조 라고도 합니다.클래스 템플릿으로 구현되어 있습니다.

 - 컨테이너는 크게 Sequence Container 와 Associative Container로 나뉩니다.


 Sequence Container ( 연속된 컨테이너 ) : array ( c++ 11 ) , vector , list , deque

 Associative Container ( 연관된 컨테이너 ) : set,multiset,map,multimap


Iterator (반복자)

- 컨테이너를 순회하는 방법과 컨테이너의 한 요소를 참조하는 방법을 획일화 함으로써 알고리즘들이 컨테이너 내부 구조에 대해 독립성을 가지도록 한 것입니다.

- 컨테이너 종류에 따라 접근 방식이 다릅니다.

- 컨테이너의 요소 하나를 가리키는 기본적인 열할

- 가리키는 지점의 요소를 읽고 쓸 수 있습니다.

- 증감에 의해 주변요소로 이동가능합니다(++.-- 연산자 오버로딩)


Algorism (알고리즘)

- STL의 알고리즘 함수들은 대부분 특정 컨테이너의 멤버함수가 아닌 일반 전역 함수로 작성되어있습니다.

 - 






'프로그래밍 > STL & 자료구조' 카테고리의 다른 글

0. 자료구조란?  (0) 2017.12.30
Posted by Dongkey
,

출처 : http://hyeonstorage.tistory.com/256#recentComments [개발이 하고 싶어요]


STL에 들어가기 전에 자료구조라는 건 무엇인지 한번 살펴보겠습니다.


자료구조란?


자료(Data)란 현실 세계로부터 수집한 사실,개념의 값 또는 집합입니다.

흔히 가공되지않은 것을 부르며 자료를 가공된 것을 정보(Information) 이라고 부릅니다.


자료구조(Data Structure)란 자료의 집합을 의미합니다.

각 원소들 사이의 관계가 논리적으로 정의된 일정한 규칙에 의하여 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 조직적,체계적으로 구분하여 표현한 것을 말합니다.


자료 구조는 작업의 효율성,추상화,재사용성을 증가시키기 위하여 상황에 따른 적절한 자료구조를 선택하여 사용해야 합니다.

자료의 처리를 좀 더 효율적으로 하기 위해선 


자료의 처리시간

자료의 크기

자료의 활용 빈도

자료의 갱신 정도

프로그램의 용이성


을 따져야 합니다.


자료 구조는 크게 선형구조와 비선형 구조로 나뉘어져 있습니다.


선형 구조 : 배열,연결리스트,스택,큐,데크

비선형 구조 : 트리,그래프





'프로그래밍 > STL & 자료구조' 카테고리의 다른 글

1. STL 이란?  (0) 2017.12.30
Posted by Dongkey
,


'취미 생활' 카테고리의 다른 글

[선따기]루피  (0) 2018.01.03
Posted by Dongkey
,

https://www.slideshare.net/msparkms/ssao-15650492 참고했습니다.


SSAO는(Screen Space Ambient Occlusion, SSAO) 의 약자입니다.

AO의 결과값을 실시간으로 효율적으로 예측하는 기법입니다. 

이 기법은 크라이텍의 블라디미르 카잘린에 의해 개발되었습니다.


Screen Space ( 화면 공간 ) 이란 화면에 표시되는(모니터로 보는) 공간을 나타내는 것입니다.

즉 화면 공간만 AO 계산을 하기 때문에 AO 의 무거운 계산을 많이 덜 수가 있습니다.

SSAO는 텍스처에 저장된 씬은 깊이 버퍼를 분석하여 AO의 근사치를 계산합니다.


이제 SSAO 의 알고리즘을 살펴 보겠습니다.



카메라 ( Screen) 기준으로 깊이 버퍼를 비교합니다.

주변픽셸의 depth buffer 데이터를 비교해 AO의 알고리즘을 적용 시킵니다.



알고리즘을 구한뒤 경계부분은 유지를 하면서 노이즈를 부드럽게 변환 시키면



이런 결과값을 구할 수 있습니다.



다른 이미지와 잘 섞으면 훨씬 현실감있는 이미지를 만들 수 있습니다.



SSAO의 장점

씬이 아무리 복잡해도 독립적입니다.

데이터 전처리가 불필요하며 시스템 메모리의 할당이나 로딩 시간이 없습니다.

동적 씬과 동작합니다.

화면의 모든 화소마다 동일하고 일정한 방법으로 동작합니다.


이번장은 여기까지 알아보겠습니다. 




Posted by Dongkey
,

Ambient Occlusion 이란?


빛의 차폐로 인한 감쇠 근사치를 구하는 이펙트입니다.

쉽게 말해서 구석진 부분을 훨씬 더 어둡게 하여 더욱 자연스럽고 사실적인 느낌을 낼 수 있도록 하는 것입니다.여기에 이미지 설명을 입력하십시오.


출처 : https://gamedev.stackexchange.com/questions/23/what-is-ambient-occlusion


AO의 알고리즘

출처 : http://blog.naver.com/PostView.nhn?blogId=daehuck&logNo=220449224224&parentCategoryNo=&categoryNo=34&viewDate=&isShowPopularPosts=true&from=search


한 점(P) 로 노말기준 반원을 그립니다(뒤는 오브젝트들이 연결되어 있으니)

A의 경우보다 B의 경우게 차폐되는 양이 늘어나므로 더 구석진 곳으로 되어있다는 것을 알수가 있습니다. 그러므로 차폐의 양에 따라 더 어둡게 처리를 해주면 구석진 곳이 어두워 지게 됩니다.


AO의 알고리즘은 정확하게 계산할수록

퀄리티 Up 이 되고 퍼포먼스는 Down이 됩니다.

(이론상은 가능하지만 실시간 렌더링하기엔 매우 무거움)


AO(Ambient Occulusion)를 실시간 렌더링을 하기에는 매우 무거운 작업입니다.

보통 회색조(0~1) 텍스처 또는 정점 색을 통해 조절을 했었습니다.

현재에는 많은 기법들이 나와있습니다. SSAO,HBAO,HBAO+ 등이 있지만 

이번 장은 AO에 대해서만 알아보겠습니다. 


다음 장은 SSAO 에 대해서 더 알아보겠습니다.


Posted by Dongkey
,

일반적으로 어플리케이션은 각 운영체제의 특정 플렛폼 전용의 네이티브 코드로 만들어야 합니다.

동일한 프로그램을 여러 플랫폼으로 돌아가게 만들려면 해당 플랫폼의 맞는 네이티브 코드로 다시 작성을 해야하는 문제점이 있었습니다.

 이러한 문제점을 해결하기 위해 2002년 MS에서 닷넷 프레임워크(.Net Framework)를 발표합니다.


.NET Framework 란?

 - MS에서 개발한 윈도우 프로그램 개발 및 실행 환경입니다.네트워크 작업,인터페이스 등의 많은 작업을 캡슐화하였고, 공통 언어 런타임이라는 이름의 가상 머신 위에서 작동합니다.


공통 언어 런타임 ( Common Language Runtime , CLR )

 - 가상 머신


공통 언어 기반 ( Common Language Infrastructure , CLI )

 - 어플리케이션의 개발과 실행 시 언어에 종속적이지 않은 플랫폼을 제공합니다.


XML 지원

Posted by Dongkey
,

프로그램 실행 시 운영체제에 의해서 마련되는 메모리의 구조는 크게 네 개의 영역으로 구분되어 있습니다.


코드 영역 ( Code Area  ) : 프로그램의 코드가 저장되는 메모리 공간. CPU는 코드 영역에 저장된 명령문들을 하나씩 가져가서 실행을 합니다.


데이터 영역 ( Data Area ) : 전역변수와 static 변수가 할당됩니다. 즉, 이 영역에 할당되는 변수들은 프로그램 종료 시까지 남아있게 된다는 특징이 있습니다.


힙 영역 ( Heap Area ) : 데이터 영역에 할당되는 변수와 스택 영역에 할당되는 변수들은 생성과 소멸의 시점이 이미 결정되어 있습니다. 프로그래머가 원하는 시점에 변수를 할당하고 또 소멸하도록 지원을 하는 변수들이 할당되는 영역이 힙 영역입니다. 런 타임에 크기가 결정됩니다.


스택 영역 ( Stack Area ) : 스택 영역에는 지역변수와 매개변수가 할당됩니다. 함수를 빠져나가면 소멸된다는 특징이 있습니다. 컴파일 타임에 크기가 결정됩니다.

 

Posted by Dongkey
,