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

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

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

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

DirectX

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

解決済

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

legohasiri
legohasiri

総合スコア40

C++

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

DirectX

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

2回答

0リアクション

0クリップ

170閲覧

投稿2022/09/22 09:58

現在DirectX11(DirectXTex)でテクスチャ(png画像)を表示させようとしているのですが、どうも色味がおかしく、原色以外の色が濃くなってます
イメージ説明
なにか参考になるような意見を頂ければありがたいです

ソースコード

全部上げるのは厳しいので関係ありそうなところを上げます。ほかに必要が場所があれば追加します

texture

//texture.h template<typename T> struct point{ T x,y; } struct texture { point<UINT> size; ComPtr<ID3D11Texture2D> p_texture; ComPtr<ID3D11SamplerState> p_samplerstate; ComPtr<ID3D11ShaderResourceView> p_shaderresource_view; bool create(const std::string& path, bool is_wic); void draw(const std::array<point<float>, 4>& pos); }; //texture.cpp bool texture::create(const std::string& path, bool is_wic) { auto hr = DirectX::CreateWICTextureFromFile(p_device.Get(), to_wstring(path).c_str(), (ID3D11Resource**)p_texture.GetAddressOf(), p_shaderresource_view.GetAddressOf()); if (FAILED(hr)) { log.error("テクスチャリソースを作成できませんでした。"); return false; } D3D11_TEXTURE2D_DESC desc; p_texture->GetDesc(&desc); size.x = desc.Width; size.y = desc.Height; return true; } void texture::draw(const std::array<point<float>, 4>& pos) { set_polygon_param(1.0f, 0.0f);//座標変換など draw_shader_resource(pos, p_shaderresource_view.Get()); }

shader:hlsl

struct VS_IN { float4 pos : POSITION0; float4 nor : NORMAL0; float2 tex : TEXCOORD0; }; struct VS_OUT { float4 pos : SV_POSITION; float2 tex : TEXCOORD0; }; cbuffer ConstantBuffer : register(b0) { matrix scale; matrix rotate; matrix transition; matrix world; matrix projection; } VS_OUT Main( VS_IN input ) { VS_OUT output; output.pos = mul(input.pos, world); output.pos = mul(input.pos, scale); output.pos = mul(input.pos, rotate); output.pos = mul(input.pos, transition); output.pos = mul(input.pos, projection); output.tex = input.tex; return output; } struct PS_IN { float4 pos : SV_POSITION; float2 tex : TEXCOORD0; }; Texture2D myTexture : register(t0); //テクスチャー SamplerState mySampler : register(s0); //サンプラー float4 Main( PS_IN input ) : SV_Target { return myTexture.Sample(mySampler, input.tex); }

試したこと

もともとサンプラーステートを渡していましたが、一応何も渡さずにやってみました。ただし変わりはありませんでした

補足情報(FW/ツールのバージョンなど)

windows 10
GPU:Radeon RX 550
VisualStudio2022
C++20
DirectXTexは2022/09/22昼時点で最新の、デスクトップアプリケーション用

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C++

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

DirectX

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