All250 깊이스텐실 Desc 중 깊이 func 값 관련 - D3D11_COMPARISON_FUNC DepthStencilState을 생성할 때 D3D11_DEPTH_STENCIL_DESC 구조체가 필요하다. 해당 구조체 멤버 중 DepthFunc이 있는데, 여기에 미리 정의된 매크로 값을 설정해줌으로써 깊이 비교를 어떻게 할 것인지 설정해줄 수 있다. default는 D3D11_COMPARISON_LESS란 값으로 설정되는데, 이는 기존의 z보다 현재 정점의 z가 더 작을 때, 즉 현재 정점이 더 앞에 있을 때만 z값(깊이)를 갱신한다. 만약 두 정점의 z값이 동일하면 갱신하지 않는다. 즉 같은 깊이의 빨간색->초록색 삼각형 순서로 겹쳐서 그리면 겹치는 부분은 그대로 빨간색이다. 이는 원하는 결과일 수도 아닐 수도 있다. 왜냐면 겹치는 부분 중 나중에 그린 삼각형은 같은 깊이임에도 무시되기 때문에.... 2021. 3. 18. 기초적인 라이팅을 위한 정점 및 픽셀 셰이더를 작성해보자 Shader 위 그림은 그래픽스 파이프라인을 간단하게 나타낸 것이다. 그중 1, 3단계인 정점 처리와 프래그먼트 처리 단계가 우리가 직접 작성할 단계이다. 정점 처리를 수행하는 프로그램을 정점 셰이더(vertex shader)라고 하며 프래그먼트 처리를 수행하는 프로그램을 픽셀(프래그먼트) 셰이더(pixel shader)라고 한다. 우리는 3D 오브젝트를 화면에 렌더링하기 위해 정점 셰이더(vertex shader)와 픽셀 셰이더(pixel shader)를 작성해야 한다. 셰이더는 HLSL(High-Level Shading Language)라는 언어로 작성을 하며 C와 거의 비슷한 문법을 가지고 있다. 정점 셰이더 정점 셰이더는 파이프라인의 정점 처리 단계에서 사용자가 작성한 루틴대로 정점을 처리한다. .. 2021. 3. 12. 조명(Lighting) 기초 youtu.be/Kuqm8Y3tUxY 시작하기 전에 위 영상을 한번 보고 시작하는 것도 좋다. Lighting (조명) 현실적인 3D 오브젝트를 표현하기 위해서 빛은 중요한 요소이다. 우리가 눈으로 볼 수 있는 물체들은 그 물체에 부딪힌 빛이 우리 눈에 반사되어 볼 수 있게 되는 것이다. 이러한 빛들은 태양 또는 전등과 같이 광원이 직접 방사하는 직접광과 물체, 먼지 등에 반사되어 생기는 간접광이 있다. 출처: https://kblog.popekim.com/2011/12/04-part-1.html 게임에서 오브젝트에 조명 효과를 주기 위해선, 오브젝트에 닿은 빛이 반사되어 카메라에 들어오는 빛의 세기(양)을 얻을 수 있어야 한다. 이러한 빛은 직접광일 수도, 간접광일 수도 있는데 직접광만을 고려하여 결과.. 2021. 3. 12. [DirectX] Direct3D 11 programming (1) Direct3D MS 문서를 학습하며 작성하는 내용입니다. (틀린 부분이 있을 수 있음) Direct3D는 3차원 그래픽을 다루기 위한 DirectX의 API이다. Direct3D엔 디바이스(Device)라는 개념이 존재한다. 디바이스는 그래픽 카드를 추상화한 객체이다. 쉽게 말하면 그래픽 카드를 다룰 수 있도록 해주는 기본적이고 핵심적인 객체이다. 디바이스는 오브젝트의 할당 및 해제, 렌더링, 그래픽 드라이버 및 하드웨어와의 통신을 담당한다. Direct3D 11 이전엔 디바이스를 의미하는 오브젝트(클래스)가 하나였던 걸로 기억한다. Direct3D 11은 디바이스라는 개념이 2가지로 분리된다. 하나는 디바이스 오브젝트(Device Object)이고, 다른 하나는 디바이스 컨텍스트 오브젝트(Device.. 2021. 3. 5. array를 소유하는 std::shared_ptr, deleter 설정법 C++ 17부터 std::shared_ptr가 [] 연산자를 지원한다. 따라서 ssptr[i]와 같은 연산을 지원한다. 이 의미는 (ssptr.get())[i]와 같은 의미이다. 즉 int* p = new int[5]에서 p[i]와 동일하다. 그러려면 std::shared_ptr ssptr(new int[5], deleter) 와같이 선언한다. 소유하려는 타입이 array일 경우 deleter를 지정하지 않아도 default_deleter가 자동으로 설정된다. deleter는 나중에 소유한 array의 메모리를 해제해준다. deleter를 직접 작성할 순 있지만 형태는 정해져 있는 듯 하다. template struct array_deleter { void operator()(T const* p) { d.. 2021. 2. 25. Lua 스크립트 파일 읽기 및 값 읽어 오기 짧은 기간이지만 클라이언트 개발(라이브팀) 인턴을 하면서 lua 스크립트의 편의성에 대해 배웠다. 찾아보니 게임 업계에선 이미 유명하고 자주 사용되는 스크립트 언어라고 한다. 그래서 DirectDraw로 만들었던 갤러그 비슷한 게임에 아주 간단하게라도 적용해보려고 잠깐 공부했다. 다른 용도로도 사용 가능하지만 우선은 enum 값 대신 사용할 자주 바꿀 것 같은 값들을 설정하고 가져오려 한다. 예를 들면 몬스터의 체력이라던가 등장하는 몬스터의 수 등등.. lua에서 이러한 값들을 설정하는 이유는 실제로 현업에선 기획자가 어려움없이 쉽게 값을 변경해가며 테스트를 해볼 수 있는 환경이 완성되기 때문이다. 실제로 큰 프로젝트를 다뤄보니 빌드하는데 매우 오래 걸린다. 툴을 안쓰면 훨씬 오래 걸릴 것 같고 툴을 써.. 2021. 2. 15. 이전 1 ··· 10 11 12 13 14 15 16 ··· 42 다음