본문 바로가기

All250

[UE4] 언리얼 엔진 Pitch Yaw Roll 그래픽스에서 회전각을 나타내는 방법 중 오일러 각을 사용하는 pitch yaw roll이 있다. DirectX에선 다음과 같은 좌표계를 가졌고 x축 기준, y축 기준, z축 기준 회전각이 각각 pitch, yaw, roll이었다. 언리얼에선 좌표축이 다음과 같으며 DX와 마찬가지로 왼손 좌표계이다. 정면이 x, 우측이 y, 상단이 z이다. 축만 바뀌었을 뿐, 좌우 축을 기준으로 한 회전각은 pitch, 상하 축을 기준으로 한 회전각은 yaw, 앞뒤를 기준으로 한 회전각은 roll은 변함이 없다. 따라서 pitch는 y축 회전각, yaw는 z축 회전각, roll은 x축 회전각이 된다. x,y,z 신경쓰지 말고 상하 축을 기준으로 한 회전각은 yaw 이런 식으로 생각하는 것이 이해하기 쉽다. 2021. 7. 21.
[UE4] AController::Possess() overriding error // DEPRECATED(4.22, "Posssess is marked virtual final as you should now be overriding OnPossess instead") 해당 함수는 컨트롤러가 pawn을 possess할 때 호출되는 함수이다. 4.22부터 하위 클래스에서 오버라이딩을 못하도록 해놓았으므로, OnPossess() 함수를 대신 사용하라고 한다. 이름만 제외하면 시그내쳐는 동일하다. 2021. 7. 20.
현재 라이팅 문제점 (1) 현재 라이팅 문제점 1 기존엔 정점 셰이더(VS)에서 Diffuse를 계산하고, 픽셀 셰이더(PS)에서 Specular를 계산하였다. 그런데 한 가지 문제점이 존재한다. 큐브를 렌더링 한다고 할 때 인덱스 버퍼를 이용한다면, 다음과 같이 윗면에 대한 정점 4개, 밑면에 대한 정점 4개로 모든 면의 구성이 가능하다. CubeVertex Cube::m_Vertices[] = { // Bottom // {vertex, color, normal} { XMFLOAT3(0.0f, 0.0f, 0.0f), XMFLOAT3(0.3f, 0.5f, 0.6f), XMFLOAT3(0.f, -1.f, 0.f) }, { XMFLOAT3(0.f, 0.f, 20.0f), XMFLOAT3(0.3f, 0.5f, 0.6f), XMFLOAT.. 2021. 7. 17.
Geometry Shader Signature Geometry Shader란? GS(Geometry Shader)는 VS, PS와 같은 셰이더의 한 종류이다. 실행 순서는 VS->GS->(Rasterizer)->PS 순이다. VS가 하나의 정점에 대해 어떤 동작을 수행하는 프로그램이였다면, GS는 하나의 프리미티브에 대해 어떤 동작을 수행하는 프로그램이다. 즉 하나의 점(Point)도 입력이 될 수 있고 라인(Line)도 입력이 될 수 있고 삼각형(Triangle)도 입력이 될 수 있다. GS는 입력으로 들어온 프리미티브를 변경(modify) 및 제거(remove) 할 수 있고, 새로운 프리미티브를 생성(create)할 수도 있다. VS, PS와 달리 작성을 하지 않아도 실행하는 데는 문제가 없다. Shader Signature GS를 작성하는 방법.. 2021. 7. 14.
체스 - 기본 행마법 기본 행마법 서로 다른 기물은 서로 다른 행마법을 가진다. 기물들은 상대의 기물을 잡기 위한 경우를 제외하곤 비어있는 칸으로만 이동할 수 있다. 나이트를 제외한 모든 기물들은 서로를 넘어다닐 수 없다. 한 기물이 상대의 기물에 의해 대체 되고, 체스 보드 밖으로 내보내지면 이 기물은 "잡힌" 것이다. (앙파상 예외) 앙파상의 경우 공격하는 폰이 잡힌 폰이 있던 자리에 위치하지 않는다. 킹은 체크를 당하거나 체크 메이트를 당할 수는 있지만 잡힐 수는 없다. 킹(King) 상하좌우, 대각선 방향으로 각각 1칸씩만 움직일 수 있다. 룩(Rook) 상하좌우 방향으로 기물이 없는 칸에 한해서 칸수의 제한 없이 움직일 수 있다. 룩은 캐슬링을 할 때 따라 움직인다. 비숍(Bishop) 대각선 방향으로 기물이 없는 .. 2021. 7. 2.
비동기 소켓과 멀티 스레딩을 활용한 소켓 함수 사용의 차이 비동기 소켓 혹은 멀티 스레딩으로 소켓 함수를 제어하는 것의 차이점 1개의 서버에 5개의 클라이언트가 있다고 가정해보면, 서버는 5개의 클라이언트에 대한 소켓을 각각 가지고 있을 것이다. 만약 5개의 클라이언트로부터 패킷을 받기 위해 recv를 호출한다고 생각해보자. recv는 기본적으로 블로킹 모드이므로 패킷을 받지 못하면 호출 스레드는 블로킹 상태에 빠진다. 즉 현재 작업을 완료하기 전까지 다른 소켓에 대해 recv를 수행할 수 없다. 때문에 각 소켓마다 스레드를 할당하여 recv를 담당하도록 해야 한다. 이는 클라이언트 수가 증가할 수록 서버가 대처하기 힘들어진다. 스레드가 많아지면 다루기 힘들어 질 뿐만 아니라 context switch 비용도 고려해야 한다고 생각된다. 한편, 비동기 소켓은 다수.. 2021. 5. 30.