본문 바로가기

All250

Blend state blend는 사전적으로 혼합이란 의미를 가진다. 컴퓨터 그래픽스에서 블렌딩이라 하면 어떠한 두 픽셀 컬러를 섞는 것을 말한다. 이러한 블렌딩은 주로 어떤 두 픽셀이 겹칠 때 주로 행하게 된다. 예를 들어 물체가 하나 있고 그 앞에 반투명한 빨간 색상의 벽이 있다. 물체는 벽 뒤에 있지만 벽이 반투명하기 때문에 보여야 한다. 이때 화면에 보여질 물체의 색상은 물체의 기존 색상과 동일하진 않을 것이다. 아마 이때의 색상은 벽의 색상 50%, 물체의 색상 50%가 혼합된 색상일 것이다. 이처럼 투명도를 나타내기 위해 RGB 색상 외에 알파(Alpha)라는 불투명도를 의미하는 값이 존재한다. RGB와 마찬가지로 보통 8비트를 이용하여 0~255 범위의 값을 사용할 수 있지만, 범용성을 위해 정규화된 0~1사이의.. 2021. 4. 3.
Constant buffer - 16바이트 단위로 정렬! 상수 버퍼(Constant buffer)는 정점 및 픽셀 셰이더에서 사용될 상수를 모아 놓은 버퍼이다. 상수 버퍼 사용을 위해 cpp 코드 영역에 상수 버퍼 타입의 구조체를 정의하고 셰이더에도 동일한 포맷으로 상수 버퍼 구조체를 정의해야 한다. 그리고 시스템 메모리에서 구조체 변수 생성 및 값 설정 후 정점 혹은 픽셀 셰이더에 Set 시킨다. 값 설정 및 set은 보통 매 프레임 실행되는 Render() 함수에 적용한다. 그러면 이 Set 시킨 데이터를 설정한 셰이더에서 사용할 수 있다. 상수 버퍼를 사용하는 이유는 셰이더에서 매번 사용되는 상수, 하지만 cpp 파일에서 전달해주어야 한다고 가정할 때, 개별적으로 하나하나 값을 전달해 주는 것은 대역폭(bandwidth)이 크고 부담이 많이 된다고 한다... 2021. 4. 2.
C 및 C++ UTF-8 text file read/write 하는 법 인코딩이 UTF-8 로 되어 있는 텍스트 파일을 read하거나 write하고 싶을 때 아래와 같은 추가 설정이 필요. C의 경우(fread, fopen과 같은 C 계열 함수 사용시) fopen 시 다음과 같이 3번째 인자를 추가해준다. // read fopen_s(&fp, "file3.txt", "rt+,ccs=UTF-8"); // write fopen_s(&fp, "file3.txt", "wt+,ccs=UTF-8"); 그리고 파일 관련 동작을 수행하기 전 적절한 위치에 다음과 같은 코드를 추가한다. (docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/setlocale-wsetlocale?view=msvc-160) // 아래 세 가지 중 아무거나 하나 .. 2021. 3. 28.
atan2(arctan)을 이용하여 pitch, yaw 구하기 DirectX에선 다음과 같이 보통 왼손 좌표계(Left hand coordinate system)을 사용한다. 우리가 정면을 바라보는 곳이 +z 방향, 오른쪽으로 방향을 틀면 +x 방향, 고개를 위로 들면 +y 방향이다. 우리가 원점에서 노란색 화살표처럼 z축을 바라보고 있다고 가정해보자. 여기서 이동은 하지 않고 단순히 몸의 방향만 오른쪽으로 틀면 그만큼 회전한 각도가 생길 것이다. 이때의 회전각이 yaw이다. 즉 yaw는 y축을 기준으로 회전한 각도를 의미한다. 자신의 몸에 세로로 y축이 있다고 가정하고 몸을 회전해보면 이해가 빠를 것이다. 각 축은 서로 직각을 이루므로 z축 방향에서 90도만큼 회전하면 x축과 일치하게 될 것이다. 이때 yaw는 90도를 라디안(radians) 값으로 나타낸 것을 .. 2021. 3. 25.
카메라(eye) 이동 및 회전 유튜브에서 DirectX 11 엔진 만들기 튜토리얼 영상 보면서 구현해보고 있는 중이다.. 영어라서 완벽히 다 이해하진 못함 아래는 카메라 클래스를 구현해서 카메라 시점을 이동시키는건데, 그냥 이동시키는게 아니라 lookAt지점(바라보는 곳)을 한 점(원점)에 고정시킨 뒤 이동시키는 것이다. 카메라를 앞으로 이동시키면 z 값이 증가하고, 오른쪽으로 이동시키면 x 값이 증가하고, 위로 이동시키면 y값이 증가한다. pitch는 x축 기준 회전 각도이고, yaw는 y축 기준 회전각, roll은 z축 기준 회전각이다. 여기서 각은 모두 라디안(radians) 단위다. 30도가 일반적인 각도(degree), 파이/6 이 라디안. 위 2D 이미지에 lookAt을 고정시킨 뒤 카메라를 위로(x축방향) 이동시키면 y축.. 2021. 3. 24.
XMVECTOR 타입 구조 - SSE SSE란? 다음 링크 참고 ko.wikipedia.org/wiki/%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D_SIMD_%ED%99%95%EC%9E%A5 스트리밍 SIMD 확장 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 스트리밍 SIMD 확장(Streaming SIMD Extensions, SSE)은 x86 아키텍처에 대한 SIMD(단일 명령 다중 데이터) 명령어 집합 확장이며, 인텔이 1999년에 펜티엄 III 시리즈 프로세 ko.wikipedia.org DX에서 자주 사용되는 XMVECTOR는 __m128 타입을 재정의 한 것이다. __m128 타입은 여러 개의 수를 한번에 처리하는 SIMD 연산을 위한 타입이다. SIMD 연산이란 하나의 명령어로 여러.. 2021. 3. 20.