본문 바로가기
학원

DirectX 3D XMLSaveLoad

by Srff5123 2023. 10. 27.
728x90

 

 

Emissive 발광 (가짜 조명) 를 넣는방법

우선 GlobalBuffer.h의 MaterialBuffer로 이동한다

Float4로 emissive를 추가해준다. 다른 것들과는 다르게 default값을 1아닌 0으로 준다.

 

다음 PixelHeader.h로 이동하여 mEmissive 추가

 

다음 NormalMapping.hlsl로 들어가 diffuse에 더해주기만 하면 된다.

빛의 덧셈은 특정 빛을 밝게해주는 역할

 

다음 Material.cpp로 이동하여

ImGui에 똑같이조절이 가능하도록 수정한다.

실행을 하면 값을 조절할떄 마다 물체의 밝기가 올라가게되어 빛이난다

피격 효과를 줄때 조금 다양하게 쓰인다.

 

다음 저번 save load를 깔끔하게 수정을 하기

Material헤더에 dialog 설정하여 경로를 적고 다른이름으로 저장할수있도록 함

 

다음 Shader를 선택할 함수를 만들어준다.

 

특정파일 받아서 로드하는 함수 만들기

 

member변수로 shader파일을 따로 넣어준다.

 

다음 cpp파일의 GUIRender로 이동하여

어떤 쉐이더를 쓰고있는지 알기위해 text 표

 

SetShader로 이동하여 세팅할때마다 ADD

 

 

Shaderselect

imGui로 Button 만들어주고 openDialog로 key값을 받고 확장자를 받는다.

다음 if 문으로 해당되는 key값으로 열어주고

다음 if로 ok Button 을 눌렀을때

file을 getfilepathname으로 뽑아주고

 

현재 파일이 절대 경로이기 떄문에

캐릭터형 배열을 만들어

getCurrentDirectoryA로 프로젝트의 경로 길이를 넣어주고

문자열 temp에  경로길이 + /shaders/를 해주고

file을 substr로 잘라주어 확장자명만 남긴다.

 

다음 setshader로 넣어주고

close 닫기

 

이제 다음 GUI마지막 부분에 save와 load 넣어주기

 

 

XML 방법으로 저장 구현하기

tinyxml2 구글에 검색하여 깃허브에서 다운 및 포함

다음 Framework에 헤더파일 추가

 

XML하기전에 비

Binary 방식은 속도면에서 save load할때 빠르고 보안성이 좋다 하지만 단점은 접근성이 부족하다

어떤 하나의 데이터만 뽑고싶을때 그것이 안된다. 무조건 순서대로 뽑아줘야만 한다.

하지만 XML은 html웹데이터 처리와 비슷하여 트리형태로 데이터를 구조적으로 저장을 해주는 파일 형식이다.

특정데이터를 뽑을때도 좋다. 단 보안성은 좋지않다.

하지만 재질정보같은 경우는 보안이 필요가없이 바로 뽑아서 확인하는 것이 좋기 때문에 XML로 저장하는 

방법을 활용을 해본다

 

이제 Save로 이동하여 코드를 짠다.

 

tinyxml2를 만들어준다. (new가 붙은 것들은 그 때에만 메모리가 할당이 된다.)

다음 tiny2에 문서에 material(요소)를 넣어주고, 테스트를 위해

 

아까만든 SelectShader함수에 있는 코드를 복사하여 SaveDialog에 넣어준다.

코드를 살짝 수정을 해주고

 

실행을하여 잘저장이 되는지 확인 (중간중간 확인해야 어디서 오류가 났는지 금방 알수있다.)

실행을하고 저장을한다음 확인을하면 파일이 하나 생긴것을 알수있다.

 

대략 정보들을 이런식으로 넣을 예정이다.

 

이런식으로 하나씩 넣는다. 다시 Metrial의 Save로 이동한다.

다음 데이터를 넣을건데 Atrribute (속성) - 이름, 다음 으로는 shader를 넣어주고

트리형식이기 때문에 intsertFirstchild 이용하여 데이터 자식을 준다.

이렇게 수정을하고 확인을 하면 이런식으로 저장이 된다.

 

이제 다시 Save로 이동하여 Texture정보를 넣어보자

Texture 헤더에 file뽑기도 만들어준다

string으로  파일이름을 뽑고 Attribute속성에 DM(diffuseMap)을 넣어준다.

다음 diffuseMap은 Texture의 마지막 자식이기때문에 insertEndChild로 설정해주고

이런식으로 SpecularMap과 NormalMap도 추가해준다. 그다음 material에 추가하면

이런식으로 저장이 된다

 

이제 다음 diffuse, specular , ambient, emissive 넣어주기

Attribute에 RGBA값 하나씩 넣어주고

insetEnd를 위에부터 순서대로  설정해주고

 

Shininess와 HasNormalMap 넣어주고

property로 end설정

하고  실행하여 임의로 값을조정하여 변경해주고 저장하면

이런식으로 데이터가 트리형태로 들어가게 된다.

 

 

이제 다음 이 데이터를 로드할 차례이다.

Load()함수로 이동하여 file을 받아주고

NextSiblingElement는 다음 원소를 가리키는 역할을 하는데 이것을 활용하여

하나씩 뽑아서 읽어준다.

 

다음 LoadDialog로 이동하여 Save Dialog 에 있는 코드를 가져와서 살짝 수정하여 사용한다.

 

이제 실행을 하여테스트를 해본다. 경로를 따라 파일을 클릭해주면 아까 임의로 저장을 하였던 파일을

읽어와 적용을하여 출력해준다.

 

 

이렇게 XML파일로 Save와 Load하는 방법을 알아보았다.

 

 

 

 

 

 

 

 

 

728x90

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

DirectX 3D ShootingGame(1)  (1) 2023.10.30
DirectX 3D SphereCollision  (1) 2023.10.28
DirectX 3D Material & Save,Load(Camera)  (0) 2023.10.27
DirectX 3D Sphere & NormalMapping  (1) 2023.10.27
DirectX 3D Specular  (0) 2023.10.25