Q&A
現在DirectX11(DirectXTex)でテクスチャ(png画像)を表示させようとしているのですが、どうも色味がおかしく、原色以外の色が濃くなってます
なにか参考になるような意見を頂ければありがたいです
ソースコード
全部上げるのは厳しいので関係ありそうなところを上げます。ほかに必要が場所があれば追加します
texture
1//texture.h 2template<typename T> 3struct point{ 4 T x,y; 5} 6struct texture { 7 point<UINT> size; 8 ComPtr<ID3D11Texture2D> p_texture; 9 ComPtr<ID3D11SamplerState> p_samplerstate; 10 ComPtr<ID3D11ShaderResourceView> p_shaderresource_view; 11 12 bool create(const std::string& path, bool is_wic); 13 void draw(const std::array<point<float>, 4>& pos); 14}; 15 16//texture.cpp 17 18bool texture::create(const std::string& path, bool is_wic) { 19 auto hr = DirectX::CreateWICTextureFromFile(p_device.Get(), to_wstring(path).c_str(), (ID3D11Resource**)p_texture.GetAddressOf(), p_shaderresource_view.GetAddressOf()); 20 21 if (FAILED(hr)) 22 { 23 log.error("テクスチャリソースを作成できませんでした。"); 24 return false; 25 } 26 27 D3D11_TEXTURE2D_DESC desc; 28 p_texture->GetDesc(&desc); 29 size.x = desc.Width; 30 size.y = desc.Height; 31 32 return true; 33} 34 35void texture::draw(const std::array<point<float>, 4>& pos) { 36 set_polygon_param(1.0f, 0.0f);//座標変換など 37 draw_shader_resource(pos, p_shaderresource_view.Get()); 38} 39
shader:hlsl
1struct VS_IN 2{ 3 float4 pos : POSITION0; 4 float4 nor : NORMAL0; 5 float2 tex : TEXCOORD0; 6}; 7 8struct VS_OUT 9{ 10 float4 pos : SV_POSITION; 11 float2 tex : TEXCOORD0; 12}; 13 14cbuffer ConstantBuffer : register(b0) 15{ 16 matrix scale; 17 matrix rotate; 18 matrix transition; 19 matrix world; 20 matrix projection; 21} 22 23VS_OUT Main( VS_IN input ) 24{ 25 VS_OUT output; 26 output.pos = mul(input.pos, world); 27 output.pos = mul(input.pos, scale); 28 output.pos = mul(input.pos, rotate); 29 output.pos = mul(input.pos, transition); 30 output.pos = mul(input.pos, projection); 31 output.tex = input.tex; 32 33 return output; 34} 35 36struct PS_IN { 37 float4 pos : SV_POSITION; 38 float2 tex : TEXCOORD0; 39}; 40 41Texture2D myTexture : register(t0); //テクスチャー 42SamplerState mySampler : register(s0); //サンプラー 43 44 45float4 Main( PS_IN input ) : SV_Target 46{ 47 return myTexture.Sample(mySampler, input.tex); 48}
試したこと
もともとサンプラーステートを渡していましたが、一応何も渡さずにやってみました。ただし変わりはありませんでした
補足情報(FW/ツールのバージョンなど)
windows 10
GPU:Radeon RX 550
VisualStudio2022
C++20
DirectXTexは2022/09/22昼時点で最新の、デスクトップアプリケーション用
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。