Public(86)
-
법선 벡터 계산하기: 외적
법선 벡터(normal vector)는 표면에 수직인 벡터다. 표면(삼각형 등)의 법선 벡터를 계산하면 3D 게임에서 매우 도움이 된다. 예를들어 6장 '3D 그래픽스'에서 설명하는 광원 모델은 법선 벡터의 계산이 필요하다. 평행하지 않은 2개의 3D 벡터가 주어지면 두 벡터를 포함하는 평면은 반드시 존재한다. 외적은 그림 3.9에서 보여주듯이 그 평면에 수직한 벡터를 구한다. (즉 벡터의 두 벡터의 외적을 계산하면 법선 벡터가 나온다.) 외적은 2D 벡터에서는 동작하지 않는다. 그러나 2D 벡터를 3D 벡터로 변환하면 사용할 수 있다. 2D 벡터를 3D 벡터로 변환하려면 z 요소값 0을 2D 벡터에 추가하면 된다. 기술적으로는 그림 3.9에서 평면에 수직인 두 번째 벡터 -c가 존재할 수 있다. 평면에..
2023.07.22 -
두 벡터 사이의 각도 구하기: 내적
두 벡터 사이의 내적(dot product)결과는 단일 스칼라 값이다. 게임에서 내적을 사용하는 가장 일반적인 경우는 두 벡터 사이의 각도를 찾는 것이다. 내가 정리한 벡터정리글 벡터의 크기(길이)는 이중 수직선으로 표기한다. 예를 들어 u의 크기 ||u|| 다음 방정식은 벡터 a와 b의 내적을 계산한다. 또한 내적은 각의 코사인(cosine)과 관계가 있다. 그래서 두 벡터 사이의 각도는 다음과 같이 표현할 수 있다. 그림 3.8에 나와 있는 공식은 코사인 법칙을 토대로 한 것이다. 이 공식을 사용하면 세타를 구할 수 있다. 두 벡터 a,b가 단위 벡터라면 각 벡터의 길이가 1이므로 분모를 생략할 수 있다. 단위 벡터를 사용했으므로 식이 단순해졌는데, 방향만이 중요하다면 미리 벡터를 정규화해두는 것이 ..
2023.07.22 -
벡터를 각도로 변환: 아크탄젠트(2D추천)
벡터가 주어졌을 때 이 벡터를 각도로 변환하려 한다. 탄젠트(tangent) 함수가 각도를 인자로 받고 삼각형의 밑변과 높이의 비율값을 반환했던 걸 떠올리자. 이제 액터의 새로운 전방 벡터로부터 회전 멤버 변수에 해당하는 각도를 구한다고 가정해본다. 이 경우에는 그림 3.7처럼 새로운 전방 벡터 v와 x축으로 직각 삼각형을 구성하면 된다. 이 삼각형에서 전방 벡터의 x요소는 삼각형의 밑변의 길이다. 그리고 전방 벡터의 y요소는 삼각형 높이다. 이 요소들의 비율값을 이용하면 아크 탄젠트 함수를 사용해서 각도 세타를 계산하는 것이 가능하다. 프로그래밍에서 선호되는 아크탄젠트 함수는 atan2함수다. 이 함수는 파라미터로 2개의 인자를 받는다.(삼각형의 높이와 밑변의 길이) 그리고 [- π, π] 범위의 각도..
2023.07.18 -
더블 버퍼링,수직동기화
주로 컴퓨터 그래픽에서 사용되는 용어로서 비디오 메모리만을 사용한 싱글 버퍼링으로 그래픽을 그릴 경우 데이터를 저장하는 동안에는 다음 그림의 데이터를 전송할 수 없기 때문에 지우고 그리고 지우고 그리고 할 경우 필연적으로 발생하는 깜빡임, 찢어짐 등의 상황을 막기 위해서 사용되는 기법이다. 싱글 버퍼링은 비디오 메모리(프론트 버퍼)만을 사용하는데 반하여 예비 버퍼(백 버퍼)를 두어 먼저 버퍼2에 그림을 보내고 그것을 다시 버퍼1로 보낸 다음 버퍼 1의 데이터를 처리하는 동안 다시 버퍼 2에 그림을 보내면 데이터의 전송과 처리가 막히는 일이 없어져서 깜빡임 현상이 사라지게 되는 것이다. 그래서 비단 게임 뿐만이 아니라 그림을 띄워야 하는 프로그래밍을 해야 할 경우에는 반드시 더블버퍼링 API를 찾아보고 적..
2023.06.25 -
색상버퍼(ColorBuffer),색상깊이(ColorDepth),RGBA
색상은 색상을 혼합해서 각 픽셀에 대한 특정 색상을 생성한다. 색깔 혼합에 대한 일반적인 방법은 빨강,녹색,파랑 (RGB)이 3가지 색상을 함께 섞는 것이다. 이 RGB 색깔의 다양한 세기가 결합해 색상의 범위가 결정된다. 현대의 수많은 디스플레이가 RGB외의 다양한 색상 포맷을 지원하지만, 대부분의 비디오 게임은 RGB로 최종 색상을 산출한다. RGB값이 모니터 디스플레이에서 다른 색상 포맷으로 변경되는지 또한 그렇지 않은지는 게임 프로그래머가 다룰 수 있는 영역 밖에 있다. 그런데 여러 게임은 내부적으로 게임 그래픽 계산을 위해 다양한 색상 표현을 사용한다. 예를 들어 수많은 게임은 내부적으로 투명도를 지원하기 위해 알파(Alpha)값을 사용한다. 약어인 RGBA는 RGB색상에 알파값을 추가해서 참조..
2023.06.25 -
레스터 그래픽스 - raster graphics (벡터,래스터)
컴퓨터 과학에서 래스터 그래픽스 이미지 또는 비트맵(비트의 지도라는 뜻 : map of bits)은 일반적으로 직사각형 격자의 화소, 점의 색을 모니터, 종이 등의 매체에 표시하는 자료 구조이다. 오늘날 사용하는 대부분의 디스플레이는 랫터 그래픽스를 사용한다. 래스터 그래픽스는 디스플레이가 2차원 격자 형태의 그림 요소(픽셀)를 갖고 있음을 뜻한다. 이 픽셀은 다양한 색상뿐만 아니라 다양한 빛을 나타낼 수 있다. 이 픽셀들의 색상과 세기의 결합을 통해, 디스플레이를 보는 사람은 이를 연속적인 이미지로 지각하게 된다. 래스터 이미지 : 정사각형 모양의 픽셀(pixel)들이 모여 이미지를 구성한다. 이미지에 표현해야할 물체들이 많이 있어도 속도 저하가 일어나지 않기 때문에(아무리 복잡한 물체가 있는 이미지라..
2023.06.25