質問します。
シェーダーモデル5.0のスレッドでDirectX11の法線マップ付きモデルの描画のシェーダーがあったので
それを利用してDrawPolygon3Dに法線マップがついたような事がしたいのですが可能でしょうか?
試しに深く考えずに以下のプログラムを試しましたがやっぱり成功しませんでした
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
VERTEX3DSHADER Vertex[6];
int vshandle;
int pshandle;
int texhandle;
int normalhandle;
// DXライブラリの初期化
ChangeWindowMode(true);
if (DxLib_Init() < 0)
{
// エラーが発生したら直ちに終了
return -1;
}
// 2ポリゴン分の頂点のデータをセットアップ
Vertex[0].pos = VGet(220.0f, 340.0f, 0.0f);
Vertex[0].norm = VGet(0.0f, 0.0f, -1.0f);
Vertex[0].dif = GetColorU8(255, 255, 255, 255);
Vertex[0].spc = GetColorU8(0, 0, 0, 0);
Vertex[0].u = 0.0f;
Vertex[0].v = 0.0f;
Vertex[0].su = 0.0f;
Vertex[0].sv = 0.0f;
Vertex[1].pos = VGet(420.0f, 340.0f, 0.0f);
Vertex[1].norm = VGet(0.0f, 0.0f, -1.0f);
Vertex[1].dif = GetColorU8(255, 255, 255, 255);
Vertex[1].spc = GetColorU8(0, 0, 0, 0);
Vertex[1].u = 1.0f;
Vertex[1].v = 0.0f;
Vertex[1].su = 1.0f;
Vertex[1].sv = 0.0f;
Vertex[2].pos = VGet(220.0f, 140.0f, 0.0f);
Vertex[2].norm = VGet(0.0f, 0.0f, -1.0f);
Vertex[2].dif = GetColorU8(255, 255, 255, 255);
Vertex[2].spc = GetColorU8(0, 0, 0, 0);
Vertex[2].u = 0.0f;
Vertex[2].v = 1.0f;
Vertex[2].su = 0.0f;
Vertex[2].sv = 1.0f;
Vertex[3].pos = VGet(220.0f, 140.0f, 0.0f);
Vertex[3].norm = VGet(0.0f, 0.0f, -1.0f);
Vertex[3].dif = GetColorU8(255, 255, 255, 255);
Vertex[3].spc = GetColorU8(0, 0, 0, 0);
Vertex[3].u = 0.0f;
Vertex[3].v = 1.0f;
Vertex[3].su = 0.0f;
Vertex[3].sv = 1.0f;
Vertex[4].pos = VGet(420.0f, 340.0f, 0.0f);
Vertex[4].norm = VGet(0.0f, 0.0f, -1.0f);
Vertex[4].dif = GetColorU8(255, 255, 255, 255);
Vertex[4].spc = GetColorU8(0, 0, 0, 0);
Vertex[4].u = 1.0f;
Vertex[4].v = 0.0f;
Vertex[4].su = 1.0f;
Vertex[4].sv = 0.0f;
Vertex[5].pos = VGet(420.0f, 140.0f, 0.0f);
Vertex[5].norm = VGet(0.0f, 0.0f, -1.0f);
Vertex[5].dif = GetColorU8(255, 255, 255, 255);
Vertex[5].spc = GetColorU8(0, 0, 0, 0);
Vertex[5].u = 1.0f;
Vertex[5].v = 1.0f;
Vertex[5].su = 1.0f;
Vertex[5].sv = 1.0f;
// 頂点シェーダーを読み込む
vshandle = LoadVertexShader("NormalMesh_DirLight_NrmMapVS.vso");
// ピクセルシェーダーを読み込む
pshandle = LoadPixelShader("NormalMesh_DirLight_NrmMapPS.pso");
// 描画に使用する画像の読み込み
texhandle = LoadGraph("test.png");
// ノーマルマップ読み込み
normalhandle = LoadGraph("NormalMap.png");
// 描画先を裏画面にする
SetDrawScreen(DX_SCREEN_BACK);
//ライトを設定
SetLightEnable(true);
ChangeLightTypeDir(VGet(0, 0, 1));
// ESCキーが押されるまでループ
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
// 画面を初期化
ClearDrawScreen();
// 使用する頂点シェーダーのセット
SetUseVertexShader(vshandle);
// 使用するピクセルシェーダーをセット
SetUsePixelShader(pshandle);
// 使用するテクスチャを0番にセット
SetUseTextureToShader(0, texhandle);
// 使用する法線マップを1番にセット
SetUseTextureToShader(1, normalhandle);
// シェーダーを使用した2ポリゴンの描画
DrawPolygon3DToShader(Vertex, 2);
// 裏画面の内容を表画面に反映させる
ScreenFlip();
}
// 読み込んだ頂点シェーダーの削除
DeleteShader(vshandle);
// 読み込んだピクセルシェーダーの削除
DeleteShader(pshandle);
// 読み込んだ画像のグラフィックハンドルを削除
DeleteGraph(texhandle);
DeleteGraph(normalhandle);
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}