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

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

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

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

DirectX

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

Q&A

解決済

1回答

1597閲覧

DirectX9でテクスチャが表示されない

tettyA

総合スコア93

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

DirectX

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

0グッド

0クリップ

投稿2020/11/03 06:15

編集2020/11/03 06:21

テクスチャが表示されず、ただポリゴンが表示されます。

c++

1//Main.cpp 2#include <Windows.h> 3HWND hwnd; 4#include "Header.h" 5 6LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { 7... 8} 9int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow) { 10 ... 11 12 if (!Init()) { 13 return 0; 14 } 15 16 Texture mytex; 17 LoadTexture("実在するファイル.png", &mytex); 18 19 20 while (GetMessage(&msg, NULL, 0, 0)) { 21 DispatchMessage(&msg); 22 if (BeginDraw()) { 23 24 DrawTexture(0.0f, 0.0f, 0.0f, 0.0f, &mytex); 25 26 EndDraw(); 27 28 } 29 } 30 mytex.Data->Release(); 31 End(); 32 return msg.wParam; 33}

c++

1//Header.h 2#pragma once 3#include <d3d9.h> 4#include <d3dx9.h> 5#pragma comment(lib,"d3d9.lib") 6#pragma comment(lib,"d3dx9.lib") 7#define WinWidth 600 8#define WinHeight 848 9#include "Init.h" 10#include "End.h" 11#include "GStructs.h" 12#include "GraphicsFunctions.h"

c++

1//GStructs.h 2#pragma once 3struct CustomVertex 4{ 5 float X; 6 float Y; 7 float Z = 0.0f; 8 float Rhw = 1.0f;//除算数 9 float TX;//テクスチャX 10 float TY; 11}; 12struct Texture { 13 LPDIRECT3DTEXTURE9 Data; 14 int Width; 15 int Height; 16};

c++

1//GraphicsFunctions.h 2#pragma once 3void ClearScreen() { 4 ldDevice->Clear( 5 0, 6 NULL, 7 D3DCLEAR_TARGET, 8 D3DCOLOR_XRGB(0, 0, 0), 9 0.0f, 10 0 11 ); 12} 13bool BeginDraw() { 14 return ldDevice->BeginScene() == D3D_OK; 15} 16void EndDraw() { 17 ldDevice->EndScene(); 18 ldDevice->Present(nullptr, nullptr, nullptr, nullptr);//バッファ転送 19} 20void LoadTexture(const char* filename,Texture *texture) { 21 D3DXIMAGE_INFO tinfo; 22 D3DXGetImageInfoFromFileA(filename, &tinfo);//二の累乗じゃないケースを想定 23 if (FAILED(D3DXCreateTextureFromFileExA( 24 ldDevice, 25 filename, 26 tinfo.Width, 27 tinfo.Height, 28 1,//ミニマップのレベル 29 0, 30 D3DFMT_UNKNOWN,//テクスチャのフォーマットカラー設定 31 D3DPOOL_MANAGED,//テクスチャメモリの管理方法 32 D3DX_DEFAULT,//フィルタリング方法 33 D3DX_DEFAULT,//ミニマップの 34 0x0000ff00,//抜く色の指定 35 nullptr, 36 nullptr, 37 &texture->Data 38 ))) { 39 MessageBox(hwnd, TEXT("テクスチャの作成に失敗しました。"),TEXT("★失★敗★"), MB_OK); 40 } 41 else { 42 texture->Width = tinfo.Width; 43 texture->Height = tinfo.Height; 44 } 45 46} 47void DrawTexture(float X, float Y, float TX, float TY, Texture* texture) { 48//誤 49/* CustomVertex TCV[4] = { 50 {X,Y,0.0f,1.0f,TX,TY},//左上 51 {X + texture->Width,Y,0.0f,1.0f,TX + texture->Width,TY},//右上 52 {X,Y + texture->Height,0.0f,1.0f,TX,texture->Height + TY},//左下 53 {X + texture->Width,Y + texture->Height,0.0f,1.0f,TX + texture->Width,TY + texture->Height}//右下 54 };*/ 55//正 56 CustomVertex TCV[4] = { 57 {X,Y,0.0f,1.0f,TX,TY},//左上 58 {X + texture->Width,Y,0.0f,1.0f,TX + texture->Width,TY},//右上 59 {X + texture->Width,Y + texture->Height,0.0f,1.0f,TX + texture->Width,TY + texture->Height},//右下 60 {X,Y + texture->Height,0.0f,1.0f,TX,texture->Height + TY}//左下 61 }; 62 ldDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_TEX1); 63 ldDevice->SetTexture(0, texture->Data); 64 ldDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, TCV, sizeof(CustomVertex)); 65}

c++

1//Init.h 2//(略)

c++

1//End.h 2//(略)

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

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

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

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

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

stdio

2020/11/03 06:44

すみません。他にも色々と足りない部分があると思いますが、決定的に足りていない部分のみお伝えいたします。 四角形にテスクチャを貼りたい場合はVertexが6つ必要です。 それぞれ三角形になるように設定し、CWかCCWを意識して貼って下さい。
guest

回答1

0

自己解決

すいません。
勘違いをしていただけでした。
テクスチャーの座標は1が最大ということを忘れていました。

投稿2020/11/03 08:28

編集2020/11/03 08:29
tettyA

総合スコア93

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問