묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
Shader 관련 문제
Shader::Init을 할 때 마지막 줄DEVICE->Create...State(&m_PipelineDesc, IID_PPV_ARGS(&m_PipelineState));여기에서 desc세팅까지는 성공적으로 다 되는데 이 줄에서 state가 세팅되지 않고 NULL값으로 그대로 남아있습니다.혹시 몰라서 오타 검사나 프로젝트 속성이 다른지 체크했는데 이상 없었습니다.[코드][로컬 데이터] (추가)엔진.h의 멤버들은 정상적으로 초기화 되고 올려주신 파일을 실행했을 때는 정상적으로 작동하였습니다.Shader에서 문제가 있는거 같은데 코드상 차이는 안보입니다. 올려주신 코드내용을 복붙해도 같은 문제가 발생합니다.가끔씩 shader->Update()에 들어가기 전에 엑세스 위반 오류가 생깁니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
Load 부분에서 문제가 있어 질문드립니다
이런식의 오류가 뜨는대 텍스쳐를 로드하는 부분에서 키값의 추론이 제대로 안되는걸로 예상되는대 이유를 모르겠씁니다 혹시 예상가는 부분이 있을까요??
-
미해결[게임 프로그래머 도약반] DirectX11 입문
수강 문의
안녕하세요 루키스님. 이전에 수강전 문의 했던 학생입니다. 강좌를 구매해서 수강전 문의란이 사라져서 여기다가 질문올립니다. 궁금한 점은 3가지 입니다. DX11 2D까지만 공부하고 싶다면 섹션 어떤어떤것을 봐야할까요? OT때 포폴엔 적합하지 않은 강좌라고 하셨는데 이 말의 의미는 커리큘럼 목표가 그런 것이고, 제가 이 강좌 듣고 습득한 지식으로 혼자 포폴 만들라면 만들 순 있는거죠? 수강전 문의에 대한 연장선의 질문인데, 루키스님이 중견 이상 목표라면 C++를 공부하는게 좋다고 하셨습니다. 이 말의 뜻은 C#보다 C++이 아무래도 신경써야할 게 많다보니까(메모리 관리 등) 제가 비록 유니티쪽으로 가더라도 기초탄탄을 위해 배우라는 뜻이실까요? 여기부턴 여담인데, 사실 제가 C# 유니티만 배운게 아니고 C/C++/STL 도 공부하긴 했었습니다. 최근엔 안써서 까먹었지만.. 일단 이 강좌 구매는 해놨는데, WinApi부터 공부하고 시작해볼라고 지금 자연스레 C++ 리마인드하면서 공부하고 있긴합니다.
-
미해결[게임 프로그래머 도약반] DirectX11 입문
포인터변수선언, 바인딩 을 함수에 포함해도되나요
선생님 안녕하세요.인터페이스객체를 헤더에서 선언하고, 객체생성함수에서 스마트포인터변수의 주소를 얻고, 렌더함수에서 바인딩을 ,Init 함수에서 함수호출하시는데요. 이 과정 중...스마트포인터 선언대신,함수에서 지역변수로 만들어사용하고,렌더함수에서 바인딩 대신, 객체생성(디스크립션 포함) 함수안에서 디바이스컨텍스트 바인딩한후렌더함수에서 객체생성함수만 호출로 Init()함수 호출 없음바꾸면, 문제가 있을까요? 결과는 동일한거같습니다.
-
미해결[게임 프로그래머 도약반] DirectX11 입문
타입변환해도되나요+알파
[질문1]deviceContext->DrawIndexed(indices.size(), 0, 0);이런 에러가 떴는데요1>C:\Work\Programming\DX11\BasicFramework-uv\BasicFramework\Game.cpp(60,44): warning C4267: 'argument': conversion from 'size_t' to 'UINT', possible loss of data 이렇게 바꿔도되나요?deviceContext->DrawIndexed(staticcast<UINT>(_indices.size()), 0, 0); [질문2]우여곡절끝에(첨엔 TEXCOORD스펠링틀려서,두번째는 이미지파일을 프로젝트폴더밖에 둬서) 드디어 출력은 됬는데, 알파가 안빠집니다!뭘 고쳐야할까요? (한시간째 찾는중 ㅠㅠ)(이게 정상) ---------------------(추가)그리고,쌤... 수강전질문에 답변을 강의구매후,수강완료 한참후에 달아주셨어요 ㅋ담부턴 좀 빨리 ㅋㅋㅋ 3. [해결] 이 함수를 써서 해결했습니다. 알파. 근데,,쌤은 안써도됬는데, 왜 전 이거 써야한걸까요...??? void Game::SetBlendState(){ D3D11_BLEND_DESC blendDesc; ZeroMemory(&blendDesc, sizeof(blendDesc)); // 알파 블렌딩 활성화 blendDesc.RenderTarget[0].BlendEnable = TRUE; blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; blendDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; ID3D11BlendState* blendState; HRESULT hr = _device->CreateBlendState(&blendDesc, &blendState); CHECK(hr); // 블렌드 상태를 파이프라인에 설정 _deviceContext->OMSetBlendState(blendState, nullptr, 0xffffffff);}
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
강의에서 보여진 모습과 다른모양이 되어서 질문드립니다
아래와 같은 모양이 나오는대 디버그모드에서 값들은 다 Colorinfo 에 잘 들어갔고 specular 과 diffuse 에서 뭔가 문제가 있어보이는대 모르겠어서 질문드립니다 어느쪽을 중점으로 찾아봐야 하나요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
enumclass 질문입니다
46분 45초쯤에 enum 이라서 함수를 두개로 하셨다고 하셨는대 다른점과 이유를 알고싶습니다
-
해결됨D3D12 프로그래밍 - 기초편
raw pointer 쓰시는 이유가 따로 있으신가요?
혹시 ComPtr 안쓰시고 raw pointer 쓰시는 이유가 있으신가요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
잘 이해했는지 확인 받고 싶습니다(Normal Map)
안녕하세요 이번 강의를 잘 이해했나 의문이 들어서 질문 남깁니다먼저 제가 이해한 내용을 설명해보자면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 좌표로 치환할 수 있다 이렇게 정리해봤는데 잘못 이해하거나 누락된 부분이 있을까요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
Normal.fx파일에서 normalize
안녕하세요 제가 알기로는 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를 안해도 별 차이 없지 않나요?혹시 차이가 있다면 어떤 부분에서 차이가 있을까요?아니면 제 개념이 틀렸을까요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
높이보정 식이 이해가 안됩니다
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; // 높이 보정 }}이 부분을 계속 돌려봐도 이해가 안되는데 높이보정할 때 왜 저 식이 나오는건가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
nullptr오류가 발생해요.
nullptr 오류가 왜 발생하는 걸까요? 코드는 복붙 해서 아마 다 같을 거에요.
-
미해결[게임 프로그래머 도약반] DirectX11 입문
계층구조 질문있습니다.
탱크를 그릴떄 본매트릭스를 넘겨줘서 포지션을 이동시켜주는것처럼탱크의 노말도 본매트릭스를 이용하여 회전시켜주는게 맞지않나용?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
첫 강의 pch.h 작성 단계에서 LNK1104 오류가 납니다 ㅠ
pragma comment로 불러오는 다른 lib들은 다 에러 없이 넘어가는데요,정작 걱정했던 DirectXTex 들은 조용하지만LNK1104 'd3dcompiler.lib' 파일을 열 수 없습니다.저 d3dcompiler친구만 오류를 뿜뿜합니다ㅠ 이를 어쩌면 좋을까요 선생님😣
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
Normal Mapping / Assertion failed! 오류
Normal Mapping 강의에서 veiga.jpg를 제가 다운받아온 Stone.jpg로 바꾸고 디버깅해보니 이렇게 뜨네요크래시 난곳은 여기입니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
1>LINK : fatal error LNK1104: 'Engine.lib' 파일을 열 수 없습니다.
장치초기화 파트에서 제가 무언가를 놓친거 같습니다...클라이언트 프로젝트를 시작으로 놓고 하였는데 저런 에러가 뜹니다. 무엇이 문제일지 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
shared_ptr 과 헤더파일 관련하여 질문있습니다
Engin.h 에서 #pragma onceclass Engine{public: void Init(const WindowInfo& window); void Render(); void ResizeWindow(int32 width, int32 height);private: WindowInfo _window; D3D12_VIEWPORT _viewport = {}; D3D12_RECT _scissorRect = {}; shared_ptr<class Device> _device; shared_ptr<class CommandQueue> _cmdQueue; shared_ptr<class SwapChain> _swapChain; shared_ptr<class DescriptorHeap> _descHeap;};여기서 #include <memory>를 하지 않고도 shared_ptr이 컴파일이 가능한 이유가 뭔지 알수 있을까요...?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
질문있습니다.
질문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)제가 이해한게 맞나 궁금해서 질문드립니다.질문1의 방식처럼 rootSignature 를 만들었다고 하였을때 ,SetGraphicsRootDescriptorTable 함수인자에 핸들값을 넣을때RootSignature 에서는 b0~b5 ,t0~t5 의 총10개를 사용한다고 서명했기떄문에 ,DX에서 읽을때 10개단위로 읽어주기 때문에 선두에 있는 handle 값만 넣어주는 방식이 맞나요?
-
미해결D3D12 프로그래밍 - 기초편
질문있습니다.
안녕하세요 공부하다가 몇가지 궁금한게 생겨 여쭤봅니다. 질문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 부터 할당받아서 테이블에 바인딩해주고
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
장치 초기화 nullptr이 자꾸 발견 되네요.
Engine.cpp 파일에서_device->Init();cmdQueue->Init(device->GetDevice(), swapChain, descHeap);swapChain->Init(info, device->GetDXGI(), _cmdQueue->GetCmdQueue());descHeap->Init(device->GetDevice(), swapChain);이부분에서 자꾸 하나씩 nullptr이 발견되네요. 처음엔 제가 틀리게 작성한 부분이 있겠지해서 swapChin에서 nullptr이 나와서 찾아보다가 나중엔 그냥 자료파일로 덮어쓰기를 했는데도 이번엔descHeap->rtvHeap이 nullptr이라는 오류 메시지가 나오네요. 강의자료를 복붙해도 나오는nullptr은 어떻게 해결해야 할까요 ㅠ