묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[게임 프로그래머 도약반] 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은 어떻게 해결해야 할까요 ㅠ
-
미해결[게임 프로그래머 도약반] DirectX11 입문
노트북에서 정점만 보이는 버그
데스크톱에서 잘 돌아가다가 노트북 쓸 일이 있어서 그 프로젝트 파일 그대로 노트북에 옮겨서 하려는데 오브젝트들이 점으로만 나타나고 그려지지 않아요.. 왜그런건가요? gpu문제인가요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
pch 에 문제가 생긴 것 같습니다!!!!!
미리 컴파일된 헤더로 설정해 놓은 pch.h 파일에서 유독 #include "Transform.h" 를 못 받아들이는 것 같습니다. 계속해서 "'Transform': 선언되지 않은 식별자입니다." 라는 오류가 발생하고 신기한 건 #include "Transform.h"의 위치를 윗줄로 옮기면 그 밑에서 include 해주는 헤더파일도 동일하게 못받아들이고 "선언되지 않은 식별자입니다" 라고 에러를 뱉고 있습니다. 이런 경우는 어떤 해결 방법이 있을까요?ㅜㅜㅜㅜㅜㅜㅜㅜㅜ
-
미해결[게임 프로그래머 도약반] DirectX11 입문
2주차 좌표계 변환 공부하다가 의문이 생겼습니다.
물체의 위치를 좌표계 변환할 때와 방향벡터를 좌표계 변환할 때 위치 벡터의 표현이 달라진다고 배웠습니다. 그런데 방향벡터는 실제 게임 상에서 어떤 것들을 표현하기 위해서 사용되는지 궁금합니다.