2013-09-03 2 views
3

사각형에 녹색과 파란색 텍셀이있는 체스 보드 텍스처를 설정하려고합니다. 내 사각형 대신 검은 색입니다. 컴파일 또는 런타임 오류가 발생하지 않습니다. 내 텍스처 코드에 문제가 있습니까?사각형에 체스 보드 텍스처를 설정하려고합니다.

vector<unsigned char> texelsBuffer; 

for(int i = 0; i < N; ++i) 
    for(int j = 0; j < N; ++j) 
    { 
     texelsBuffer.push_back(0.0f); 

     if((i+j) % 2 == 0) { 
      texelsBuffer.push_back(1.0f); 
      texelsBuffer.push_back(0.0f); 
     } 
     else { 
      texelsBuffer.push_back(0.0f); 
      texelsBuffer.push_back(1.0f); 
     } 
     texelsBuffer.push_back(1.0f); 
    } 

ID3D11Texture2D* tex = 0; 

D3D11_TEXTURE2D_DESC textureDescr; 
ZeroMemory(&textureDescr, sizeof(D3D11_TEXTURE2D_DESC)); 
textureDescr.ArraySize = 1; 
textureDescr.BindFlags = D3D11_BIND_SHADER_RESOURCE; 
textureDescr.CPUAccessFlags = 0; 
textureDescr.Format = DXGI_FORMAT_R8G8B8A8_UNORM; 
textureDescr.Height = N; 
textureDescr.Width = N; 
textureDescr.MipLevels = 1; 
textureDescr.MiscFlags = 0; 
textureDescr.SampleDesc.Count = 1; 
textureDescr.SampleDesc.Quality = 0; 
textureDescr.Usage = D3D11_USAGE_IMMUTABLE; 

D3D11_SUBRESOURCE_DATA texInitData; 
ZeroMemory(&texInitData, sizeof(D3D11_SUBRESOURCE_DATA)); 
texInitData.pSysMem = (void*)&texelsBuffer[0]; 
texInitData.SysMemPitch = sizeof(unsigned char) * N; 
texInitData.SysMemSlicePitch = 0; 

g_pd3dDevice->CreateTexture2D(&textureDescr, &texInitData, &tex); 
g_pd3dDevice->CreateShaderResourceView(tex, NULL, &g_pTextureRV); 

또는 내 샘플러 코드?

D3D11_SAMPLER_DESC sampDesc; 
ZeroMemory(&sampDesc, sizeof(sampDesc)); 
sampDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; 
sampDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; 
sampDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; 
sampDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; 
sampDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; 
sampDesc.MinLOD = 0; 
sampDesc.MaxLOD = D3D11_FLOAT32_MAX; 

g_pd3dDevice->CreateSamplerState(&sampDesc, &g_pSamplerLinear); 
+0

네 광장에 푸른 색/녹색 색은 어디에 설정 했습니까? – zdd

+2

0과 1.0f로 0.0f를 255로 바꾸십시오! 또한 색상 조작을 단순화하기 위해 mycolor32_t를 작성해야합니다. – galop1n

답변

3

texelsBuffer에는 부동 소수점 값이 채워집니다. UNORM 인코딩에서 채널을 1.0으로 설정하려면 255 또는 0xFF를 사용하십시오.

또한 체스 사각형을 하나의 텍셀보다 크게 만드는 것을 고려해야합니다. 텍스처를 항상 1 : 1 픽셀 : 텍셀 비율로 렌더링하지 않는 한 대부분의 샘플 위치에서 두 색상을 혼합하게됩니다.

관련 문제