Dxlibでシェーダーを使いたいのですがどうすればいいのでしょうか?
DirectXの場合のものは検索にヒットして構文など基本的なことを知ることができると思いますが
Dxlibに実装する方法がわかりません。初期化などDirectXとは違うためサイト等が参考にならないです
提示コードの////コメントの内部のシェーダーのコード実装部です。これはシェーダコードを何もしてないから何も表示されないのでしょうか?
当然のことですが公式リファレンスを見てなんとなく実装を試しましたがこれでいいのかどうなのかわかりません。シェーダコードでは何もしていないことは
知っています。とりま実行しています。
#include "DxLib.h"
#include "Game.hpp"
#include "Input.hpp"
#include "Frame.hpp"
#include "Vector.hpp"
const char* filename = "Log.txt";
std::ofstream ofs(filename);
/*コンストラクタ 初期化*/
Game::Game()
{
/*操作切替*/
mc = ModeChange::rotate;
/*ライト設定*/
LightHandle = CreateDirLightHandle(VGet(0, -1, 0));
if (LightHandle == -1)
{
exit(1);
}
SetLightEnable(false); //標準ライトを有効にするかどうか?
SetUseLighting(false);
SetUseZBuffer3D(true);
SetWriteZBuffer3D(true);
handle = LoadGraph("assets/resource/texturePos.png");
cameraPos.x = 0;
cameraPos.y = 20;
cameraPos.z = -40;
targetV.x = 0;
targetV.y = 0;
targetV.z = 0;
/*上 手前から右回りで 回ったら下で手前から右回り 省略*/
//////////////////////////////////////////////////////////上の面の頂点
Vertex[0].pos = VGet(targetV.x - RANGE, targetV.y + RANGE, targetV.z - RANGE);
Vertex[0].norm = VGet(0.0f, 0.0f, -1.0f);
Vertex[0].dif = color_dif;
Vertex[0].spc = color_spc;
Vertex[0].u = 0.0f;
Vertex[0].v = 0.0f;
/*地面 ポリゴン*/
Ground_Vertex[0].pos = VGet(-GROUND_X, GROUND_Y, GROUND_Z);
Ground_Vertex[0].norm = VGet(0.0f, 0.0f, -1.0f);
Ground_Vertex[0].dif = color_dif;
Ground_Vertex[0].spc = color_spc;
Ground_Vertex[0].u = 0.0f;
Ground_Vertex[0].v = 0.0f;
//////////////////////////////////////////////////////////////////////////
/*Shader 設定*/
sh_V_handle = LoadVertexShader("assets/source/VertexShader.vso");
if (sh_V_handle == -1)
{
exit(1);
}
sh_V_handle = SetUseVertexShader(sh_V_handle);
if (sh_V_handle == -1)
{
exit(1);
}
if (SetUseTextureToShader(0, handle) == -1)
{
exit(1);
}
//////////////////////////////////////////////////////////////////////////
Vertex_Norm();
}
void Game::Update()
{
change();
/*カメラ回転*/
if (Input::keyboard(KEY_INPUT_LEFT) > 0)
{
rotate(&cameraPos, ROTATE_SPEED, targetV, Vector(0, 1, 0));
}
else if (Input::keyboard(KEY_INPUT_RIGHT) > 0)
{
rotate(&cameraPos, ROTATE_SPEED, targetV, Vector(0, -1, 0));
}
else if (Input::keyboard(KEY_INPUT_UP) > 0)
{
rotate(&cameraPos, ROTATE_SPEED, targetV, get_axis(cameraPos, targetV, Vector(0, 1, 0)));
}
else if (Input::keyboard(KEY_INPUT_DOWN) > 0)
{
rotate(&cameraPos, ROTATE_SPEED, targetV, get_axis(cameraPos, targetV, Vector(0, -1, 0)));
}
/*編集*/
switch (mc) {
}
// Vertex_Norm();
}
/*確認用 描画*/
void Game::Debug_Draw()
{
DrawFormatString(0, 0, GetColor(255, 255, 255), "カメラ 座標 x: %.2f , y: %.2f , z:%.2f ", cameraPos.x, cameraPos.y, cameraPos.z);
int t = GetValidShaderVersion() / 100;
//DrawFormatString(0, 0, GetColor(255, 255, 255), "シェーダー: %d",t);
DrawFormatString(0, 32 * 1, GetColor(255, 255, 255), "注視点 座標 x: %.2f , y: %.2f , z:%.2f ", targetV.x, targetV.y, targetV.z);
}
void Game::DrawUpdate()
{
// DrawFormatString(0, 32 * 3, GetColor(255, 255, 255), "chqnge();");
SetCameraPositionAndTarget_UpVecY(VGet(cameraPos.x, cameraPos.y, cameraPos.z), VGet(targetV.x, targetV.y, targetV.z));
/*キューブ描画*/
for (int i = 0; i < 6; i++) {
switch (i)
{
/*手前*/
case 0:
{
Vertex[0].u = 0.0;
Vertex[0].v = 0.0;
Vertex[1].u = 1.0;
Vertex[1].v = 0.0;
Vertex[4].u = 0.0;
Vertex[4].v = 1.0;
Vertex[5].u = 1.0;
Vertex[5].v = 1.0;
}
break;//同じようなコードのため省略
// DrawPolygonIndexed3D(Vertex, 8, Index[i], 2, DX_NONE_GRAPH, false);
// DrawPolygonIndexed3D(Vertex, 8, Index[i], 2, handle, false);
}
//////////////////////////////////////////////////////////////////////////////////
if (DrawPolygonIndexed3DToShader(Vertex, 8, Index[i], 2) == -1) { exit(1); }
//////////////////////////////////////////////////////////////////////////////////
}
/*平面描画*/
DrawPolygonIndexed3D(Ground_Vertex, 4, Ground_Index, 2, handle, false);
/*ライト*/
// SetLightEnableHandle(LightHandle,true);
Debug_Draw();
}
/*シェーダーコード*/
float4x4 matWVP : WorldViewProjection;
struct vertexInput {
float3 Position : POSITION;
};
struct vertexOutput {
float3 HPosition : POSITION;
float4 Diffuse : COLORD;
};
//vertexOutput VS_TransformDiffuse(vertexInput IN)
vertexOutput main(vertexInput IN)
{
vertexOutput OUT;
// OUT.HPosition = mul(float4(IN.Position.xyz, 1.f), matWVP);
// OUT.Diffuse = float4(1.f, 1.f, 1.f, 1.f);
return OUT;
}
technique textured
{
pass p0
{
VertexShader = compile vs_5_0 main();
}
}