일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Programmers
- 2294
- DirectX11
- 백준
- 오블완
- NRVO
- 줄 세우기
- 언리얼엔진5
- GeeksForGeeks
- 팰린드롬 만들기
- C
- C++
- RootMotion
- const
- 프로그래머스
- UnrealEngine4
- Unreal Engine5
- 티스토리챌린지
- UnrealEngine5
- 1563
- UE5
- Frustum
- algorithm
- RVO
- winapi
- DeferredRendering
- baekjoon
- directx
- IFileDialog
- softeer
- Today
- Total
목록DirectX11 (8)
Game Develop
예전에 2D포폴했을때는 몬스터->플레이어의 방향벡터를 정규화하는 과정에서 nan값이 발생했었다. 분모에 0이 들어가면 안되는데, 몬스터랑 플레이어랑 거의 겹쳐져버리면 x2-x1값도 0, y2-y1값도 0이라 분모에 루트0값이 들어가버려서 nan값이 발생했었다. 근데 이번에도 몬스터가 증발하길래 열심히 추적해서 해결했다. 먼저 여차저차해서 몬스터의 WorldMatrix값에 nan값들이 포함되어있는걸 확인 -> rotation.y가 nan값이 발생되는걸 확인-> assert이용해서 어떤 함수에서 rotation.y에 nan값이 대입되는지 확인 -> 해당함수 벡터값 다 출력찍어봐서 확인 -> cmath::acos 함수에서 nan값이 리턴(!). acos 관련 글 : https://runebook.dev/ko/..
포폴에 너무 인게임컨텐츠가 부실해서(심지어 UI도 구현을 안했었다) 옵저버패턴 활용해서 UI코드를 작성하는 중이다. 인게임에 UI를 배치하면 위치조정을 해야하니 그냥 Transform 클래스에 TRS값 조절(Translation,Rotation,Scale)하는 ImGui윈도우를 렌더하는 함수를 추가했다. ImGui윈도우를 생성할때는 고유이름으로 생성해야하는데, 중복될경우 한개만 렌더가 된다. 꼭 이거때문이 아니더라도 각 오브젝트의 이름을 고유값으로 설정하고 싶었다. 그래서 트랜스폼을 상속받는 객체가 태그네임을 Set할 때 고유한값으로 Set할 수 있도록 코드를 작성했다. 대충 로직은 아래처럼 짰다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23..
툴씬이 아니라 메인씬인데 너무 컨텐츠가 없는것같아서 더 구현중이다. 플레이어캐릭터와 마찬가지로 컬라이더세팅씬에서 바이너리로 저장한 파일을, 하드에웨어인스턴싱을 사용하려는 몬스터클래스에서 로드해서 적용하게 해놨다. 실제 위의 메인씬에서는 엄청 다양한 종류의 몬스터를 집어넣거나 하지는 않겠지만, 그렇게 넣는다는 가정하에 하드코딩 안하게 코드를 짜려고 하고있다. 하드웨어인스턴싱을 하는 오브젝트에 컬라이더를 셋팅하고 렌더하는 코드는 전부 동일하다. 그냥 복붙해도 된다. 미리 조금 확장성있게 짜놓으면 나중에 편하다. (딱히 뭐 대단한 코드를 짠것도 아니다) 다만 그렇다고 처음부터 확장성 있게 짠다고 시간을 너무 쓰지는 말자. 일단 되게 만든다음에 확장성있게 하든 성능최적화를 하든 하자. 내가 이런걸 조절 잘 못해..
1. D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets: Resource being set to OM RenderTarget slot 0 is still bound on input! [ STATE_SETTING WARNING #9: DEVICE_OMSETRENDERTARGETS_HAZARD] 2. D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets[AndUnorderedAccessViews]: Forcing CS shader resource slot 0 to NULL. [ STATE_SETTING WARNING #2097316: DEVICE_CSSETSHADERRESOURCES_HAZARD] 컬러피킹을 해야하기..
컬라이더세팅툴씬에서 컬라이더를 마우스피킹했을 경우 기즈모를 렌더시키고 싶기 때문에 구현해봤다.사실 기존의 반직선피킹을 하더라도 툴씬을 사용하는데에 지장을 줄정도로 프레임저하가 있을거 같진 않긴하다.당장은 컬라이더를 뭐 수십 수백개를 세팅(검사)할것도 아니니까..하지만 여기 말고도 다른 씬에서 사용할 수도 있고, 구현방법은 쉬우면서 효과는 좋기때문에 해봤다.분명 유용할것같긴하다. 픽셀단위로 정확한거치고는 프레임저하가 거의 없다. 다만 두번 그리는것이기 때문에 고해상도일수록 프레임 저하가 좀 더 있을것이다. 영상 이 방법은 예~전에 김포프님께서 올려주신 글을 보고 따라해봤다.(https://blog.popekim.com/ko/2012/12/03/fast-object-picking.html) 포프님께서도 툴..
디퍼드렌더링이 뭔지에 대한 자세한 글이 아니라 실제 코드에서 전체적인 자원이동 흐름이 어떤건지 정말 간략하게 정리해놓은 글이다. 디퍼드렌더링이 뭔지는 대충 검색하면 많이 나오지만, 실제 코드로써 자원정의와 흐름을 모르면 써먹을 수 없기 때문에 예제 보면서 코드 한줄한줄 이해했다. 개인적으로 RenderTarget부분을 제대로 공부안했어서 시간이 좀 걸렸었는데 어쨋든 이기회에 많이 공부해서 다행이다. cpp코드로 hlsl코드 보면서 메모장으로 막 정리한거라 다른사람이 보기에는 많이 불편할것같다. 디퍼드렌더링은 기존의 포워드렌더링의 라이트계산을 압도적으로 줄여놓은 라이팅 최적화기법이다. 포워드렌더링같은 경우 N*M의 라이트계산을 해야한다. 하나하나 일일이 해줘야한다는것. 디퍼드렌더링은 각 오브젝트들의 디퓨즈..
현재 작업중인 프레임워크는 학원에서 배우고 사용했던 프레임워크를 기반으로 내 포트폴리오에 맞춰서 최적화시킬수 있는건 최적화하고 기능 추가하고 하는중이였는데 터레인에디터부분에서 최적화가 많이 필요한걸 느꼈다. 일단 터레인맵의 크기가 클수록 프레임이 기하급수적으로 떨어졌다. 피킹을 하면 터레인크기가 클수록 프레임이 더 떨어지는건 정상이긴하지만 좀 많이 떨어졌다. 떨어졌던 원인 2가지는 아래와 같다. 1. 터레인피킹 2. 터레인피킹으로 좌표를 받아와서 좌표주변의 버텍스 y값 조절을 통해 지형을 수정하는 과정. 피킹자체는 학원에서 배울 때 컴퓨트쉐이더를 이용해서 gpu쪽연산으로 돌렸기 때문에 최적화가 됐다. 그러나 렌더함수쪽에서 피킹으로 값받아오는 연산이 프레임단위로 수행되고 있었기 때문에 터레인크기를 늘리자마..
- 서론 포트폴리오 제작 도중 체력바를 구현하였는데 구현도중엔 헷갈려서 조금 헤맸지만 결국 원하는대로 완성되었다. 어떤 정수나 실수값(이번 예제 같은 경우는 몬스터HP) 과 연동해서 그 값의 증감만큼 조절하는 기능을 구현하는 것이기때문에 사실상 프로그레스바를 구현하는거라고 보면 된다. 일부러 셰이더를 안쓰고 구현해보려는게 아니라 그냥 안쓰고 금방 할줄알고 시도해본거였다. Directx11로 게임을 만들어보시려는 분들은 절대로 저처럼 하지말고 그냥 픽셀셰이더에서 uv.x값 조절해서 출력하면된다. - 체력바구현에 쓰일 이미지. - 사전설명 구현에 앞서 미리 이해하기 편하도록 설명을 하자면, 각 텍스쳐 이미지 객체는 Scale값 조정을 통해 실제 화면에 렌더링되는 크기를 조절할 수 있다. Scale의 x값이 ..