質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

Q&A

解決済

2回答

1073閲覧

DirectX11でテクスチャの色味がおかしくなる

legohasiri

総合スコア40

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

0グッド

0クリップ

投稿2022/09/22 09:58

現在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昼時点で最新の、デスクトップアプリケーション用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

自己解決しました
αチャンネルがなく、テクスチャのフォーマットがあってなかったようです
αチャンネルを加えると正しい結果が得られました
ただペイントで出力したpngなどにはαチャンネルがないので、αチャンネル無しpngの描画についてもう少し調べてみようと思います。

投稿2022/09/22 15:38

legohasiri

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

png画像にカラープロファイルが設定されている、ということは無いでしょうか?

投稿2022/09/22 14:51

cx20

総合スコア4633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問