728x90

게임개발 245

DirectX 11 스터디 - MeshRenderer 컴포넌트 (GameObject 완)

렌더링 관련 처리를 담당해줄 MeshRenderer 컴포넌트를 생성. GameObject 에 몰려있던 Device, DeviceContext를 모두 MeshRenderer 로 이동시켜주고 MeshRenderer 의 Render() 함수를 호출해서 렌더링 처리를 하게 해준다. 이제 GameObject 는 DirectX COM 객체를 가질 필요가 없어짐. class GameObject : public enable_shared_from_this { public: GameObject(); ~GameObject() {} void Awake(); void Start(); void Update(); void LateUpdate(); void FixedUpdate(); shared_ptr GetFixedComponen..

DirectX 11 스터디 - Camera 컴포넌트

Camera 컴포넌트를 생성해서 View, Projection Matrix 를 갱신하고, 갱신한 값을 셰이더에서 참조, 연산하도록 수정. 먼저 기존에 GameObject 에서 TransformData 를 갱신하던 코드. Transform클래스의 UpdateTransform 함수에서 World좌표계 변환 Matrix를 만들었다. void GameObject::Update() { _transformData.matWorld = _transform->GetWorldMatrix(); _constantBuffer->CopyDate(_transformData); } void Transform::UpdateTransform() { Matrix matScale = Matrix::CreateScale(_localScale..

DirectX 11 스터디 - GameObject 의 첫 컴포넌트 Transform

GameObject 의 Scale, Rotation, Translation 을 처리할 컴포넌트를 생성해서 코드를 모듈화 해본다. Component 클래스를 만들고, 이 클래스를 상속받아 Transform 컴포넌트를 생성해줌. 유니티의 그것과 동일한 네이밍. 동일한 기능을 만들어본다. Transform 클래스를 만들고, GameObject 가 들고있던 _localScale, _localRotation, _localPosition 을 옮겨줌. 관련 Get/Set 메소드들도 모두 만들어준다. 로컬좌표계의 SRT 변환을 처리해줄 행렬 Matrix _matLocal 을 생성해주고, 이 행렬을 활용해서 월드좌표를 계산할 메소드 UpdateTransform() 함수를 만들어준다. #include "Component...

DirectX 11 스터디 - 고유 물체를 정의할 GameObject 만들기

여기까지 개발한 렌더링 처리 객체인 Pipeline, 그리고 물체마다 고유한 값을 가질 수 있는 객체들을 모아서 GameObject 를 만들어본다. 방향성은, 유니티 엔진의 GameObject 스타일로 만들고, Transform 처리는 컴포넌트 형태로 만들어 붙여보는 순서로 진행. 한번에 몰아서 구현하던 Game 클래스에서, 물체마다 고유한 값을 가져야 하는 객체들을 모두 GameObject 로 옮겨서 구현. class GameObject { public: GameObject(ComPtr device, ComPtr deviceContext); ~GameObject() {} void Update(); void Render(shared_ptr pipeline); private: ComPtr _device; ..

DirectX 11 스터디 - 모듈화 (2), 렌더링을 책임질 Pipeline클래스 작성

앞에서 Geometry, VertexData 부터 Output Merger 의 BlendState까지 모두 모듈화 해서 DX COM객체를 캡슐화 했고, 이번엔 모듈화한 객체들을 가지고 Rendering Pipeline 을 실제 수행하는 객체를 작성해본다. 파이프라인에서 고유하게 존재하고 사용되어야 하는 모듈들과, 3D 물체마다 값/설정이 변경되어야 하는 모듈을 구분한다. 3D 물체마다 설정이 변경되어야 하는 객체들을 별도로 그룹화 해서 PipelineInfo 구조체로 묶어준다. 렌더링 파이프라인에 이 구조체를 기준으로 설정을 바꿔서 태워주면 새로운 물체를 그릴 수 있게 됨. PipelineInfo 는 아래 구성 요소가 포함됨. 여기서 ConstantBuffer는 3D 메시마다 필요할 수도, 필요하지 않을..

DirectX 11 스터디 - 모듈화 (1)

앞선 스터디 과정에서는 하나의 클래스에 DirectX 객체들을 모두 모아서 구현했었음. 한 클래스에 모아서 구현했던 객체들과 개념, 동작들은 아래와 같음. DirectX 핵심 객체 : Device, DeviceContext, SwapChain Render Target : SwapChain 에서 백버퍼를 가져와서 RenderTarget 생성 RenderBegin : 렌더타겟뷰 셋팅, 클리어. 뷰포트 셋팅. RenderEnd : 에서 SwapChain->Present 호출해서 백버퍼 고속복사로 화면 갱신. Geometry 데이터 생성 및 관리 Vertex Buffer, Index Buffer 생성 Input Layout 생성 및 설정 Vertex Shader, Pixel Shader Texture 로드, S..

일본 유니티 개발자가 언리얼 엔진에 입문하면서 느낀 생각의 차이점

일본에서 10년간 유니티를 사용하다가 UE 를 이제 막 시작해서 1주일 정도 사용해본 분의 경험담. 표현 중 기억에 남는 재밌는 글이 있어서 스크랩. (원문 내용을 부분부분 스크랩 한 글이라 존댓말이 섞여있음.) 구성 - 원문 핵심 정리 - 전체 요약 원문 핵심 정리 결론부터 언리얼 엔진은 simple가 아니라 easy이다. 언리얼 엔진은 "(FPS|TPS|3D 액션 게임) 쯔꾸르"이다. 여기서 쯔꾸르 특성 참고. RPG를 만드는데 필요한 기능은 모두 갖추어져 있으며, 그 안에서 완결되는 것이라면 간단(easy)으로 만들 수 있습니다. 하지만, 아오오니 등이 유명한 것처럼 RPG 이외에도 만들 수 있습니다. 조금 힘들지만. 그래서 UE도 FPS/TPS/3D 액션 게임을 만드는 데 특화된 게임 엔진이라고 ..

유니티 덕분(?)에 핫해진 고도 엔진(Godot Engine)을 간단하고 빠르게 알아보자

유니티 엔진(Unitye Engine) 덕(?)분에 고도 엔진(Godot Engine)이 요즘 주변에서 많이 언급되고 있습니다. 어제 유니티의 새 가격 정책이 공개된 여파인 것 같습니다. (아래 링크) (유니티 엔진 새로운 요금 정책! 다운로드 수만큼 돈 내라? https://blog.naver.com/sorang226/223210350857 유니티 엔진 새로운 요금 정책! 다운로드 수만큼 돈 내라? 좀, 아니 많이 충격적입니다. 유니티로 개발한 게임에서 발생한 다운로드 수만큼 수수료를 더 지불하라니요... blog.naver.com 저도 아직 제대로 사용해 보진 않은 엔진인데요. 이번 기회에 조금 알아보면서 수집하고 정리한 내용들, 빠르게 공유해 봅니다. 이름의 유래부터, 무료인지 유료인지, 사용 언어..

행렬(Matrix) 스터디 - 실습 및 SimpleMath for DirectXMath

DirectX 행렬식 계산 편의를 위해 DirectXTK 의 DirectXMath 랩핑 모듈이 필요. SimpleMath.h/.cpp/.iln 파일들. 아래에서 다운로드 받을 수 있음. https://github.com/microsoft/DirectXTK/blob/3b3fd6cfc962c7ffdd03c311a6f6d6364ce96b0a/Inc/SimpleMath.inl SimpleMath.h 를 보면 아래와 같이랩핑한 DirectX 하위 클래스들을 확인할 수 있음. 여기서 Vector 시리즈와 Matrix 가 앞에서 학습한 행렬 수식과 관련된 클래스들. Matrix 메소드를 보면 앞에서 다뤘던 역행렬, 전치, Translation, Scale, Rotation 행렬 생성 시리즈들을 모두 볼 수 있음. 해..

행렬(Matrix) 스터디 - 개요, 기초, SRT(Scale, Rotation, Translation) 변환 행렬

행렬에 대한 스터디 노트 항등행렬 (Identity Matrix) 주어진 행렬과 곱했을 때 아무 변화도 주지 않는 정사각 행렬. 역행렬 Inverse Matrix) 곱했을 때 항등행렬이 되는 역할을 하는 행렬. 우측 상단에 -1 로 표기. 전치행렬 (Transpose Matrix) 원래 행렬의 행과 열을 바꾼 새로운 행렬. 우측 상단에 T 로 표기. (Transpose) 직교행렬 (Orthogonal Matrix) 행렬의 행끼리 또는 열끼리 서로 수직(직교)하고 크기가 1인 행렬. (직교행렬의 역행렬은 전치행렬과 같다) A 1x4 행렬과 B 4x4 행렬의 곱셈 C[1,1] = A[1,1]*B[1,1] + A[1,2]*B[2,1] + A[1,3]*B[3,1] + A[1,4]*B[4,1] C[1,2] = A..

728x90
반응형