목록Categories (1104)
KoreanFoodie's Study

DirectX 11 2D 게임 프로그래밍 - 14. Texture 설정과 이미지 띄우기 화면에 이미지 띄우기 - ID3D11ShaderResourceView를 사용하여 텍스쳐 자원 생성 - 텍스쳐 좌표계는 좌측 상단이 시작점이고, 0~1 범위로 정규화되어 있음 - HLSL에서는 Texture2D 자료형으로 텍스쳐 자원을 받는다 - 해당 픽셀이 그려낼 텍스쳐 색상을 추출하기 위해 Sample 함수를 사용한다 투명한 픽셀 제거하기 - clip() 함수를 이용해 제거할 수 있다. - if 문과 discard 키워드를 이용해 제거할 수 있다. Execute.h 먼저 헤더 파일에서 ID3D11ShaderResourceView를 만들어 준다. struct VertexTexture { D3DXVECTOR3 posit..

친해지고 싶은 사람은 어떤 사람일까? 모난 사람, 둥글둥글한 사람, 날카로운 사람, 포근한 사람. 세상에는 참 다양한 사람들이 있다. 하지만 '친해지고 싶은 사람'이 되는 것은 쉬운 일이 아니다. 실제로 많은 사람들에게서 사랑받는 사람들을 살펴보면, 대개 성격이 유하고 고집이 세지 않다는 것을 확인할 수 있다. 혹은 특정 부분에서 매력이 넘쳐 흐르거나. 음식도 마찬가지다. 사람도 음식도 자기 주장이 너무 강한 것은 사랑받기 힘든 법. 그런 의미에서 나는 파프리카가 싫다. 물론 파프리카를 좋아하는 분들도 많이 계시겠지만, 나는 대부분의 요리에서 파프리카의 향이 다른 재료들과의 조화를 이루지 못한다고 생각한다. 다만 몇가지의 예외가 있는데, 중식 요리에서 쓰이는 파프리카가 바로 그 중 하나이다. 팔보채나 중..

DirectX 11 2D 게임 프로그래밍 - 13. Rasterizer state과 좌표계 Rasterizer State 설정하기 - FillMode는 정점들로 인해 만들어진 영역을 어떻게 채울 것인가에 대한 정보이다 - CullMode는 어떤 면을 보이지 않게 할 것인가에 대한 정보이다 - FrontCounterClockWise는 정점이 그려지는 순서에 따라 앞면과 뒷면을 정해주는 값이다. Culling 과 Cliping DirectX vs OpenGL 좌표계 Execute.cpp 먼저 Execute.h에서 rasterizer_state를 선언해 준 후, Execute.cpp에서 D3DX... 에 해당하는 값들을 세팅해준다. ID3D11RasterizerState* rasterizer_state = n..

DirectX 11 2D 게임 프로그래밍 - 12. 행렬 결합 : 이동과 회전 행렬 결합하기 - 스케일 행렬에는 0이 들어가면 절대 안 된다 - 행렬은 교환 법칙이 성립하지 않는다 - 행렬 결합 순서는 스! 자! 이! 공! 부! (스케일, 자전, 이동, 공전, 부모) Execute.cpp D3DXMATRIX를 이용해서 행렬 연산을 통해 공간의 크기와 위치를 바꾸고, 회전을 시켜보자! // World : Scaling은 공간의 크기를 바꿀 수 있다. D3DXMATRIX S; D3DXMatrixScaling(&S, 100, 100, 1); std::cout

DirectX 11 2D 게임 프로그래밍 - 11. Constant Buffer 개념과 응용 Constant Buffer - HLSL에서 cbuffer타입으로 받을 수 있다. - 상수 버퍼는 반드시 16byte 단위로 정렬되어야 한다. - D3D11_USAGE_DYNAMIC은 GPU가 읽고, CPU가 쓰는 방식이다. World, View, Projection 행렬 적용하기 - Vertex Shader에서 mul() 함수를 통해 위치 벡터를 행렬과 곱하여 공간 변환시킬 수 있다. - DirectX는 행 우선, HLSL은 열 우선 방식으로 행렬을 생성한다. - HLSL에서는 row_maor 키워드로, DirectX에서는 Transpose로 행렬 생성 방식을 맞춰 줄 수 있다. Execute.cpp 먼저 Co..

부자가 될 수 있는 '진짜 방법'에 대해 알려드립니다 : 부의 추월차선 사실 이책은 정말 정말 유명한 책으로, 나는 이 책을 군대에서 처음 접하게 되었다. 사실 그당시에는 표지를 보고 '뭔가 사짜같은 이야기를 하는 걸까?' '여타 자기계발서처럼 뻔한 이야기를 써놓은거 아니야?' 같은 지레짐작과 함께 책을 펼쳐보지도 않았었다. 하지만 시간이 지나 이 이책을 읽고 난 후로, 내 인생은 상당히 많이 바뀌었다.(수정 : 바뀔 것이라고 생각했지만, 현 시점에서 보면 크게 달라지지 않았다) 부의 추월차선은 부자가 되길 원하지만 마음가짐과 방법론에 대해 어려움을 겪는 사람들이 꼭 읽어봤으면 하는 책이라고 생각한다. 최근에는 자청 추천도서로도 알려져 있는 듯하다. 자세한 내용을 이야기하기 전에, 많은 사람들이 표지만 ..

DirectX 11 2D 게임 프로그래밍 - 10. 행렬을 이용한 공간 생성(view, projection) D3DXMATRIX를 활용한 공간 생성 - D3DXMATRIX는 총 16개의 float형 데이터로 구성되어 있다. (정의 확인) - 행렬은 항상 단위행렬로 초기화해야 한다. (D3DXIdentityMatrix 함수) - 공간이 커지거나 이동하면 내부의 데이터도 동일하게 변형된다. (위치나 벡터 데이터 크기) Projection 알아보기 - 원근투영은 절두체 모양의 시야 공간을 가진다 - 직교투영은 직육면체 모양의 시야 공간을 가진다 단축키 - 영역 지정 후 Ctrl + H 단축키를 누르면 해당 범위의 특정 단어들을 바꿀 수 있다. (Alt + A 누르면 모두 바뀜) 좌표계 - OpenGL : RH..

DirectX 11 2D 게임 프로그래밍 - 9. Index Buffer & 공간 변환 Index Buffer 만들고 세팅하기 : 중복되는 정점을 제거하기 위해 사용한다. 공간이란 무엇인가? : 공간은 행렬로 표현됨. Local - World - View - Projection 순으로 흘러감. 이때 Projection은 3D 데이터를 2D 데이터로 변환시키는 작업임. (더 자세한 내용은 주석으로) 참고 : Index Buffer를 활용해 원 그려보기 index buffer : 요즘은 4바이트, index는 unsinged int 형. 중복 정점을 줄이기 위해 사용. D3D11_USAGE_IMMUTABLE : GPU - Read, CPU - 접근 불가 Execute.cpp 지난 글에서 삼각형 2개를 이용해..

DirectX 11 2D 게임 프로그래밍 - 8. Pixel Shader Stage & 도형 그리기 Rasterizer : 3D 데이터를 2D 데이터로 바꿔주는 것. VS 단계에서 정규화한 공간을 다시 보여줄 영역만큼 다시 늘려준다. 또한 Pixel Shader 단계로 넘어갈 픽셀들을 지정해준다. PixelShader 생성과 연결 : SV_Target 시멘틱을 사용하여 현재 세팅된 메인렌더 타깃을 사용하라고 알려주어야 한다. 화면에 픽셀 단위로 생상을 출력하는데, Pixel Shader는 Rasterizer가 지정한 픽셀 개수만큼 호출된다. 사각형 만들기 : 사각형을 만들기 위해서는 정점 6개가 필요하다. 왜냐하면 삼각형 2개를 붙여 만드는 형태이기 때문! 여러 줄 동시에 편집하기 : Shift + Al..

DirectX 11 2D 게임 프로그래밍 - 7. Vertex Shader Stage 이번 글에서는 hlsl을 이용해 간단한 Vertex Shaer를 만드는 실습을 해 보도록 하겠다. HLSL은 High Level Shader Language로, 예전에 어셈블리어로 만들던 것을 더 사람이 보기 쉽게 표현한 언어라고 보면 된다. 프로젝트에 HLSl탭으로 생성한 후, 프로젝트에서 제외시켜서 사용한다. (컴파일에 용이) 알아두어야 할 개념 : 1. Semantic : Semantic은 데이터의 출처와 역할에 대한 분명한 의미를 부여하기 위한 키워드이다. Color.hlsl struct VertexInput { // float4는 vector4와 같음 // Semantic : 데이터의 출처와 역할에 대한 분명한..