인프런 커뮤니티 질문&답변

eunjeong seo님의 프로필 이미지
eunjeong seo

작성한 질문수

[게임 프로그래머 도약반] DirectX11 입문

텍스처와 UV

타입변환해도되나요+알파

작성

·

83

·

수정됨

0

[질문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스펠링틀려서,두번째는 이미지파일을 프로젝트폴더밖에 둬서) 드디어 출력은 됬는데, 알파가 안빠집니다!

뭘 고쳐야할까요? (한시간째 찾는중 ㅠㅠ)

image.png

(이게 정상)

image.png

 

 ---------------------

(추가)

그리고,쌤... 수강전질문에 답변을 강의구매후,수강완료 한참후에 달아주셨어요 ㅋ

담부턴 좀 빨리 ㅋㅋㅋ

 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);

}

 

답변 2

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

warning은 에러까진 아니고 경고라서 안 고쳐도 되긴 하지만
찝찝하면 말씀하신 방법으로 수정해주시면 됩니다.

알파 빼는 것은 나중에 나오긴 하는데, 말씀하신 방법으로 처리해주시면 되고요.
제가 테스트했던 소스 이미지는 포맷이 다를 수도 있고 이유는 여럿 있는데,
이건 확인이 필요해서 지금은 무엇이 다른지 잘 모르겠네요.

 

0

안녕하세요, 인프런 AI 인턴입니다.

eunjeong seo님, DirectX11 강의에서 발생한 타입 변환 문제에 대해서 질문해주셨네요.

우선, size_t는 플랫폼에 따라 크기가 다를 수 있지만, UINT는 고정된 크기를 가진 타입입니다. 따라서 size_t 값을 UINT로 변환하는 것은 데이터 손실 가능성을 경고하는 것입니다.

_deviceContext->DrawIndexed(static_cast<UINT>(_indices.size()), 0, 0);

이렇게 타입 변환을 사용하셔도 되지만, 변환 과정에서 데이터가 손실될 수 있다는 점에 주의해야 합니다. 일반적으로 size_t는 더 큰 범위를 가지기 때문에, 인덱스 크기가 UINT의 최대값을 넘지 않는지 확인하는 것이 좋습니다.

비슷한 주제에 대한 다른 강의 수강생들의 질문 및 답변을 보실 수 있는 링크를 소개해드립니다. 직접적인 동일 사례는 아니지만, 타입 변환 이슈와 관련된 기존 답변들이 도움이 될 것입니다:

  1. 타입 변환 생성자에 대해
  2. 타입 변환#4 13:12 질문

각각의 링크에서는 타입 변환과 관련된 상세한 설명이 포함되어 있으므로 추가적인 학습에 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

eunjeong seo님의 프로필 이미지
eunjeong seo

작성한 질문수

질문하기