본문 바로가기
학원

DirectX 3D Terrain

by Srff5123 2023. 10. 25.
728x90

Imgui 간단한 예제 +

 

Transform 헤 파일 이동

함수 GUIRender 생성

imgui가 같은 이름으로 하면 이슈가 많이 생기기 떄문에 protected에 string tag 추가

또한 tag를 받아서 세팅해줄 SetTag 함수 생성

 

if 조건문사용 Imgui TreeNode (묶어주는 기능)

 

위치 변경

DragFloat3 드래그 기능으로 조절 

0.1f 속도  조절할 경우 드래그를 할때 0.1 단위로 설정     

1.0f로 할경우 1단위로 조절

 

각도 변경

lotaion값이 현재 radian값으로 되어있기 떄문에

XMConvertToDegrees 함수이용

Float3 rot로 x,z,y Degree 값 만들어주고

DragFloat3로 바뀐 값으로 Degree 조절한 다음

 

다시 Radian값으로 바꿔줌

XMConvertToRadians 함수 이용

 

스케일 변경

 

TreePop으로 TreeNode 끝남 선언

다음 잘 동작하는지 확인을 위해 TutorialScene cpp 파일 에서 큐브 세팅을 해주고

 

TutorialScene의 GUIRender 함수로 이동하여

큐브에 GUIRender를 호출

 

오른쪽에 있는 ImGUI를 통하여 위치 각도 스케일 값  마우스 드래그를 이용하여 변경 가능

 

오늘의 작업

h
cpp

Object 폴더의 Basic 폴더에 GameObject 헤더파일 생성 

겹치는 함수들 관리

큐브에서 겹치던 함수들 제외 및 정리

 

 

Scene폴더에 새로운 TerrainScene 헤더 파일 생성

GameManager cpp 파일로 이동하여 기존에 쓰던 TutorialScene을 주석을 달고

TerrainScene 헤더 추가 및 교체

 

지역을 만들 예정이라 Object폴더에 LandScape 폴더 생성 후  Terrain 헤더 추가

정점 변경이 많기 때문에 VertexUV VertexType 생성

 

메쉬를 만들 함수 MakeMesh() 선언

 

출력을 위한  Mesh<VertexType>* mesh;  선언

 

Terrain  cpp 생성 및 파일로 이동

meterial로 texture를 받고

mesh생성

 

메쉬를 만들기 위해 MakeMesh함수에서

 

Vertices값을 mesh로 받은다음

vertices를 reserve를 이용하여 넓이와 높이만큼 범위를 지정 

이중 for문을 돌려 vertices 정점 설정

 

 

Indices 값을 mesh를 통하여 받고

reserve로 indices도 범위 설정  칸 갯수이기 때문에 높이 넓이에서 1을 뺴주고 곱한값에

폴리곤은 한칸에 두개이기 때문에 폴리곤하나에 indices 3개로 6을 곱해준값이 들어간다.

이중 for문으로 시계방향으로 돌림

 

다음 테스트를 위해 TerrainScene cpp파일로 이동하여 Render와 delete만들어주기

 

평면으로 된 맵 완성

 

디버그 창에 warning뜨는 이유

Tutorial.hlsl파일에 SamplerState를 0번을 넣어주기로 하였는데 안넣었다고 뜨는 상태 넣어주는것이 좋기 때문에 state를 추가해주어야함 FrameWork 폴더에 state 폴더를 만들어준 후 

SamplerState.h
SamplerState.cpp

Filter 확대 또는 축소 할경우 필터링을 통하여 처리하는 역할

LINEAR는 주변의 색깔을 비교하여 중간의 색깔을 섞어서 부드럽게 표현

POINT는 찍어서 선명하게 표현

 

Address UVW

UV 조절하여 여러가지의 효과를 줄수있음

 

LOD( Level Of Detail)

카메라의 거리에 따라서 퀄리티를 다르게 하는 기능

물체가 멀리 있을땐 Low로 가까이있을 경우엔 High출력

 

 

RasterizerState.h
RasterizerState.cpp

CullMode

none으로 설정할시 양면 출력기능

특정 상황에서는 반대로 출력하여 깔끔하게 보여주는 것이 가능

 

FillMode 

폴리곤을 어떻게 찍는지 확인을 할경우 사용하여 와이어 프레임으로 보여줌

 

 

Texture의 Pixel정보를 뽑아내는 함수 만들기

 

 

texture 헤더로 이동

public에 ReadPixels를 float4 배열 매개변수로 받아 선언

 

 

color를 uint로 하여 image.GetPixels 값 받아오기

size 에는 image.GetPixelsSize() 통하여 Pixel 갯수 받기

 

pixels에 resize로 size /4 를 하면 컬러의 갯수가 나옴

 

float scale로 1 / 255를 미리잡아줌  나눗셈보다  곱셈 계산이 빠르기 때문

연산이 편함

 

Texture의 컬러값 알아냄

다음 Texture 폴더에서 HightMaps 폴더

컬러에 따라 지역의 맵높이를 조절할수있는 사진 파일

 

다시 Texture 헤더로 와서 Float2 GetSize 함수 선언

이미지의 넓이와 높이 가져오기

 

다음 Terrain 헤더에 

heightMap 추가

 

cpp파일로 이동하여

heightmap에 맵사진 가져오기

 

 Terrain의 Makemesh()함수에서

넓이와 높이값 받아오고

ReadPixels로 Pixel읽어오기

 

 

지형 높이 설정

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

'학원' 카테고리의 다른 글

DirectX 3D Specular  (0) 2023.10.25
DirectX 3D Camera  (1) 2023.10.25
DirectX 3D ImGui  (1) 2023.10.24
DirectX 3D Grid  (1) 2023.10.19
DirectX 3D 큐브 이용하여 태양계 간략하게 만들기  (0) 2023.10.18