안녕하세요 이번 강의를 잘 이해했나 의문이 들어서 질문 남깁니다 먼저 제가 이해한 내용을 설명해보자면 Normal Map이란 어떤 물체의 세부적 표현을 정점의 추가 없이 표현하기 위해서 나온 기술?이고 해당 Map의 각 픽셀의 RGB 값을 x, y, z로 해석하여 float4 map = NormalMap.Sample(LinearSampler, uv); [0, 1] 구간으로 변환 후 3D 세상에서 표현하기 위해 [-1,1]구간으로 변환 한다 float3 tangentSpaceNormal = (map.rgb * 2.0f - 1.0f); 그리고 이 값을 World좌표계로 변환하기위해 탄젠트 스페이서에서의 t,b,n을 좌표 변환 공식?에 의해 [tx, ty, tz] [bx, by, bz] [nx, ny, nz] 행렬이 나오게 되고 이러한 TBN 행렬을 이용해서 World 좌표로 치환할 수 있다 이렇게 정리해봤는데 잘못 이해하거나 누락된 부분이 있을까요?
안녕하세요 제가 알기로는 output.normal = mul(input.normal, (float3x3)World); 이렇게만 해줘도 월드 좌표에서의 단위벡터로 만들어 주는걸로 알고 있는데 GeometryHelper.cpp 파일에서 CreateSphere 메서드에서 v.normal = v.position; v.normal.Normalize(); Normal.fx 에서 normalize(input.normal) 위 1, 2 부분에서의 normalize를 안해도 별 차이 없지 않나요? 혹시 차이가 있다면 어떤 부분에서 차이가 있을까요? 아니면 제 개념이 틀렸을까요?
vector<VertexTextureData>& v = const_cast<vector<VertexTextureData>&>(_geometry->GetVertices()); for (int32 z = 0; z < height; z++) { for (int32 x = 0; x < width; x++) { int32 idx = width * z + x; uint8 height = pixelBuffer[idx] / 255.f * 25.f; v[idx].position.y = height; // 높이 보정 } } 이 부분을 계속 돌려봐도 이해가 안되는데 높이보정할 때 왜 저 식이 나오는건가요?
pragma comment로 불러오는 다른 lib들은 다 에러 없이 넘어가는데요, 정작 걱정했던 DirectXTex 들은 조용하지만 LNK1104 'd3dcompiler.lib' 파일을 열 수 없습니다. 저 d3dcompiler친구만 오류를 뿜뿜합니다ㅠ 이를 어쩌면 좋을까요 선생님 😣
안녕하세요 공부하다가 몇가지 궁금한게 생겨 여쭤봅니다. 질문1) D3D12_DESCRIPTOR_RANGE ranges[2] = { { D3D12_DESCRIPTOR_RANGE_TYPE_CBV, 5, 0, 0, D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND }, // b0 ~ b4 { D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 5, 0, 0, D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND } // t0 ~ t4 }; CD3DX12_ROOT_PARAMETER rootParameters[1] = {}; rootParameters[0].InitAsDescriptorTable(_countof(ranges), ranges, D3D12_SHADER_VISIBILITY_ALL); 와 같이 루트시그니처에서 테이블의 사용범위를 넓게잡아두고 사용할때만 Shader 에서 buffer를 정의 ( ex :cbuffer WVP: register(b0 )해서 사용해주고있는데 테이블힙의 메모리 낭비를 제외하면 성능에 큰 악영향이 있을까요? 런타임에 터지거나 하는 오류는 현재 없는데 궁금해서 여쭤봅니다. 질문2) 제가 이해한게 맞는건지 모르겠습니다. 현재 영천님 의 코드처럼 pool 방식으로 디스크럽터를 넓게만들어두고 할당받는 방식으로 코드를 만들어보고있는데 질문1의 방식처럼 rootSignature 를 만들었다고 하였을때 , SetGraphicsRootDescriptorTable 함수인자에 핸들값을 넣을때 그림에 빨간 화살표에 있는 선두에 있는 handle 값만 넣어주면 RootSignature 에서는 b0~b5 ,t0~t5 의 총10개를 사용한다고 서명했기떄문에 , DX에서 읽을때 10개단위로 읽어주기 때문에 10개가 모두 테이블에 바인딩되는 구조인가요? 다음 오브젝트를 그릴때는 , 오프셋 10칸을 건너뛴 다음 b0 부터 할당받아서 테이블에 바인딩해주고
미리 컴파일된 헤더로 설정해 놓은 pch.h 파일에서 유독 #include "Transform.h" 를 못 받아들이는 것 같습니다. 계속해서 "'Transform': 선언되지 않은 식별자입니다." 라는 오류가 발생하고 신기한 건 #include "Transform.h"의 위치를 윗줄로 옮기면 그 밑에서 include 해주는 헤더파일도 동일하게 못받아들이고 "선언되지 않은 식별자입니다" 라고 에러를 뱉고 있습니다. 이런 경우는 어떤 해결 방법이 있을까요?ㅜㅜㅜㅜㅜㅜㅜㅜㅜ
강의 잘 듣고 하나씩 적용 해 보고 있습니다. 그런데, 그림자에 궁금증이 생겨서 질문드립니다. 최종적으로 적용하고, 이런 느낌으로 되었는데, 그림자 적용 범위가 좁은 것 같아서, 바운딩 스피어의 Radius를 넓히는 식으로 해봤지만 범위는 넓어져도 그림자 농도가 너무 옅어지거나, 수치가 커지면 거의 안 보이는 수준이 되던데, 혹시 해결 방법이 있을까요? 텍스처 크기만 늘린다고 되는 문제는 아닌 거 같아서 질문 드립니다.
섹션 1. DirectX11 입문 (1주차) 기본 프레임워크에서 DirectXTex_debug.lib 파일을 구하기 위하여 DirectXTex_Desktop_2022 솔루션을 Visual Studio 2022에서 디버그 모드로 빌드를 해도 파일이 보이지 않습니다. 빌드할 때 빌드 구성(Configuration)을 ‘Debug’로 설정하고, 플랫폼을 ‘x64’ 로 선택 후 빌드하였습니다. 빌드 과정에서 에러는 없었구요. DirectXTex_debug.lib 이 파일은 어떻게 얻을 수 있나요.
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 리소스를 보면 groundColor라고 디퓨즈텍스쳐가 있는데 왜 적용이 안되는건가요?
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
for (int i = 0; i < v mesh.size(); ++i) { _shader->SetPipelineState(); core->GetCmdList()->IASetVertexBuffers(0,1,&_v_mesh[i]->GetVertexView()); core->GetCmdList()->IASetIndexBuffer(&_v_mesh[i]->GetIndexView()); _transform->Update(); core->GetTableHeap()->BindTexture(_texture->GetCpuHandle(), SRV_REGISTER::t0); core->GetTableHeap()->CommitTable(); core->GetCmdList()->DrawIndexedInstanced(_v_mesh[i]->GetIndexCount(), 1, 0, 0, 0); } DX11 버전에서 제공해주신 모델 탱크 를 로딩하려고Assimp 를 사용하였는데 , vmesh 사이즈가 12이라 12번 계속 반복해주는 코드를 작성하였는데 _v_mesh[0] 번째 정보만 바인딩되는데 문제가뭘까요..