(2019年12月16日)
■使用ソフト
・Visual Studio Community 2019
■目次
Visual Studio Community 2019 - C++
■言語
・C/C++
プロジェクトの「プロパティ」→「C/C++」→「言語」→
C++言語標準:プレビュー - 最新の C++ Working Draft からの機能 (/std:c++latest)
を選択
■Windows SDK バージョン
・10.0.18362.0
プロジェクトの「プロパティ」→「全般」→Windows SDK バージョン:10.0.18362.0
を選択
■手順
1.Visual Studio 2019を起動する。
2.Windowsデスクトップウィザードを選択して、「次へ」を選択する。
3.プロジェクト名、保存場所、ソリューション名を適宜変更して、「作成」を選択する。
4.アプリケーションの種類を「デスクトップアプリケーション(.exe)」にし、
追加のオプションの「空のプロジェクト」を選択し、「OK」を選択する。
5.以下の6つのファイルを作成してビルドを行う。
(1)Main.h
(2)Main.cpp
(3)DirectX.h
(4)DirectX.cpp
(5)VertexShader.hlsl
(6)PixelShader.hlsl
※VertexShaderとPixelShaderはShader Model 5.0
プロパティ→「HLSL コンパイラ」→「全般」→シェーダーモデル:Shader Model 5.0を選択
(1)~(5)コード非公開
(6)PixelShader.hlsl
cbuffer ConstantBuffer : register(b0)
{
matrix world;
matrix view;
matrix projection;
float4 lightpos;
float4 eyepos;
}
struct VS_OUTPUT
{
float4 pos : SV_POSITION;
float3 normal : NORMAL0;
};
//--------------------------------------------------------------------------------------
// ピクセルシェーダ
//--------------------------------------------------------------------------------------
float4 main(VS_OUTPUT input) : SV_TARGET
{
//アンビエント
float3 ambient = float3(1.0f, 1.0f, 0.0f) * 0.6f;
//ディフューズ
float3 L = normalize(lightpos.xyz);
float3 N = normalize(input.normal);
float NL = dot(N, L);
float3 diffuse = float3(1.0f, 1.0f, 1.0f) * saturate(NL) * 0.3f;
//スペキュラ
float3 R = 2.0f * N * NL - L;
float3 V = normalize(eyepos.xyz - input.normal);
float RV = saturate(dot(R, V));
float3 specular = float3(1.0f, 1.0f, 1.0f) * pow(RV, 10.0f) * 0.15f;
return float4(ambient + diffuse + specular, 1.0f);
}
{
matrix world;
matrix view;
matrix projection;
float4 lightpos;
float4 eyepos;
}
struct VS_OUTPUT
{
float4 pos : SV_POSITION;
float3 normal : NORMAL0;
};
//--------------------------------------------------------------------------------------
// ピクセルシェーダ
//--------------------------------------------------------------------------------------
float4 main(VS_OUTPUT input) : SV_TARGET
{
//アンビエント
float3 ambient = float3(1.0f, 1.0f, 0.0f) * 0.6f;
//ディフューズ
float3 L = normalize(lightpos.xyz);
float3 N = normalize(input.normal);
float NL = dot(N, L);
float3 diffuse = float3(1.0f, 1.0f, 1.0f) * saturate(NL) * 0.3f;
//スペキュラ
float3 R = 2.0f * N * NL - L;
float3 V = normalize(eyepos.xyz - input.normal);
float RV = saturate(dot(R, V));
float3 specular = float3(1.0f, 1.0f, 1.0f) * pow(RV, 10.0f) * 0.15f;
return float4(ambient + diffuse + specular, 1.0f);
}
6.実行結果
■参考文献
~プログラミング~ DirectX 11でフォン反射モデル
0 件のコメント:
コメントを投稿