Commit 15e490b0 authored by chili's avatar chili
Browse files

1st try tan-space nmap, obj file for brick wall

parent 86aac23a
...@@ -14,10 +14,8 @@ GDIPlusManager gdipm; ...@@ -14,10 +14,8 @@ GDIPlusManager gdipm;
App::App() App::App()
: :
wnd( 1280,720,"The Donkey Fart Box" ), wnd( 1280,720,"The Donkey Fart Box" ),
light( wnd.Gfx() ), light( wnd.Gfx() )
plane( wnd.Gfx(),3.0f )
{ {
plane.SetPos( { 1.0f,17.0f,-1.0f } );
wnd.Gfx().SetProjection( dx::XMMatrixPerspectiveLH( 1.0f,9.0f / 16.0f,0.5f,40.0f ) ); wnd.Gfx().SetProjection( dx::XMMatrixPerspectiveLH( 1.0f,9.0f / 16.0f,0.5f,40.0f ) );
} }
...@@ -28,10 +26,9 @@ void App::DoFrame() ...@@ -28,10 +26,9 @@ void App::DoFrame()
wnd.Gfx().SetCamera( cam.GetMatrix() ); wnd.Gfx().SetCamera( cam.GetMatrix() );
light.Bind( wnd.Gfx(),cam.GetMatrix() ); light.Bind( wnd.Gfx(),cam.GetMatrix() );
nano.Draw( wnd.Gfx() ); wall.Draw( wnd.Gfx() );
nano2.Draw( wnd.Gfx() ); //nano.Draw( wnd.Gfx() );
light.Draw( wnd.Gfx() ); light.Draw( wnd.Gfx() );
plane.Draw( wnd.Gfx() );
while( const auto e = wnd.kbd.ReadKey() ) while( const auto e = wnd.kbd.ReadKey() )
{ {
...@@ -100,9 +97,8 @@ void App::DoFrame() ...@@ -100,9 +97,8 @@ void App::DoFrame()
cam.SpawnControlWindow(); cam.SpawnControlWindow();
light.SpawnControlWindow(); light.SpawnControlWindow();
ShowImguiDemoWindow(); ShowImguiDemoWindow();
nano.ShowWindow( "Model 1" ); wall.ShowWindow( "Wall" );
nano2.ShowWindow( "Model 2" ); //nano.ShowWindow( "Model 1" );
plane.SpawnControlWindow( wnd.Gfx() );
// present // present
wnd.Gfx().EndFrame(); wnd.Gfx().EndFrame();
......
...@@ -26,7 +26,6 @@ private: ...@@ -26,7 +26,6 @@ private:
float speed_factor = 1.0f; float speed_factor = 1.0f;
Camera cam; Camera cam;
PointLight light; PointLight light;
Model nano{ wnd.Gfx(),"Models\\nano_textured\\nanosuit.obj" }; Model wall{ wnd.Gfx(),"Models\\brick_wall\\brick_wall.obj" };
Model nano2{ wnd.Gfx(),"Models\\nano_textured\\nanosuit.obj" }; //Model nano{ wnd.Gfx(),"Models\\nano_textured\\nanosuit.obj" };
TestPlane plane;
}; };
\ No newline at end of file
...@@ -192,7 +192,8 @@ Model::Model( Graphics& gfx,const std::string fileName ) ...@@ -192,7 +192,8 @@ Model::Model( Graphics& gfx,const std::string fileName )
aiProcess_Triangulate | aiProcess_Triangulate |
aiProcess_JoinIdenticalVertices | aiProcess_JoinIdenticalVertices |
aiProcess_ConvertToLeftHanded | aiProcess_ConvertToLeftHanded |
aiProcess_GenNormals aiProcess_GenNormals |
aiProcess_CalcTangentSpace
); );
if( pScene == nullptr ) if( pScene == nullptr )
...@@ -235,6 +236,8 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a ...@@ -235,6 +236,8 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a
VertexLayout{} VertexLayout{}
.Append( VertexLayout::Position3D ) .Append( VertexLayout::Position3D )
.Append( VertexLayout::Normal ) .Append( VertexLayout::Normal )
.Append( VertexLayout::Tangent )
.Append( VertexLayout::Bitangent )
.Append( VertexLayout::Texture2D ) .Append( VertexLayout::Texture2D )
) ); ) );
...@@ -243,6 +246,8 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a ...@@ -243,6 +246,8 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a
vbuf.EmplaceBack( vbuf.EmplaceBack(
*reinterpret_cast<dx::XMFLOAT3*>(&mesh.mVertices[i]), *reinterpret_cast<dx::XMFLOAT3*>(&mesh.mVertices[i]),
*reinterpret_cast<dx::XMFLOAT3*>(&mesh.mNormals[i]), *reinterpret_cast<dx::XMFLOAT3*>(&mesh.mNormals[i]),
*reinterpret_cast<dx::XMFLOAT3*>(&mesh.mTangents[i]),
*reinterpret_cast<dx::XMFLOAT3*>(&mesh.mBitangents[i]),
*reinterpret_cast<dx::XMFLOAT2*>(&mesh.mTextureCoords[0][i]) *reinterpret_cast<dx::XMFLOAT2*>(&mesh.mTextureCoords[0][i])
); );
} }
...@@ -261,7 +266,7 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a ...@@ -261,7 +266,7 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a
std::vector<std::shared_ptr<Bindable>> bindablePtrs; std::vector<std::shared_ptr<Bindable>> bindablePtrs;
using namespace std::string_literals; using namespace std::string_literals;
const auto base = "Models\\nano_textured\\"s; const auto base = "Models\\brick_wall\\"s;
bool hasSpecularMap = false; bool hasSpecularMap = false;
float shininess = 35.0f; float shininess = 35.0f;
...@@ -284,6 +289,9 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a ...@@ -284,6 +289,9 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a
material.Get( AI_MATKEY_SHININESS,shininess ); material.Get( AI_MATKEY_SHININESS,shininess );
} }
material.GetTexture( aiTextureType_NORMALS,0,&texFileName );
bindablePtrs.push_back( Texture::Resolve( gfx,base + texFileName.C_Str(),2 ) );
bindablePtrs.push_back( Bind::Sampler::Resolve( gfx ) ); bindablePtrs.push_back( Bind::Sampler::Resolve( gfx ) );
} }
...@@ -293,7 +301,7 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a ...@@ -293,7 +301,7 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a
bindablePtrs.push_back( IndexBuffer::Resolve( gfx,meshTag,indices ) ); bindablePtrs.push_back( IndexBuffer::Resolve( gfx,meshTag,indices ) );
auto pvs = VertexShader::Resolve( gfx,"PhongVS.cso" ); auto pvs = VertexShader::Resolve( gfx,"PhongVSNormalMap.cso" );
auto pvsbc = pvs->GetBytecode(); auto pvsbc = pvs->GetBytecode();
bindablePtrs.push_back( std::move( pvs ) ); bindablePtrs.push_back( std::move( pvs ) );
...@@ -301,17 +309,27 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a ...@@ -301,17 +309,27 @@ std::unique_ptr<Mesh> Model::ParseMesh( Graphics& gfx,const aiMesh& mesh,const a
if( hasSpecularMap ) if( hasSpecularMap )
{ {
bindablePtrs.push_back( PixelShader::Resolve( gfx,"PhongPSSpecMap.cso" ) ); bindablePtrs.push_back( PixelShader::Resolve( gfx,"PhongPSSpecNormalMap.cso" ) );
struct PSMaterialConstant
{
BOOL normalMapEnabled = TRUE;
float padding[3];
} pmc;
// this is CLEARLY an issue... all meshes will share same mat const, but may have different
// Ns (specular power) specified for each in the material properties... bad conflict
bindablePtrs.push_back( PixelConstantBuffer<PSMaterialConstant>::Resolve( gfx,pmc,1u ) );
} }
else else
{ {
bindablePtrs.push_back( PixelShader::Resolve( gfx,"PhongPS.cso" ) ); bindablePtrs.push_back( PixelShader::Resolve( gfx,"PhongPSNormalMap.cso" ) );
struct PSMaterialConstant struct PSMaterialConstant
{ {
float specularIntensity = 0.8f; float specularIntensity = 0.8f;
float specularPower; float specularPower;
float padding[2]; BOOL normalMapEnabled = TRUE;
float padding[1];
} pmc; } pmc;
pmc.specularPower = shininess; pmc.specularPower = shininess;
// this is CLEARLY an issue... all meshes will share same mat const, but may have different // this is CLEARLY an issue... all meshes will share same mat const, but may have different
......
newmtl Brick
Ns 18.0000
illum 2
Ka 0.0000 0.0000 0.0000
Kd 0.5880 0.5880 0.5880
Ks 0.1800 0.1800 0.1800
map_Kd brick_wall_diffuse.jpg
map_Kn brick_wall_normal.jpg
\ No newline at end of file
mtllib brick_wall.mtl
o BrickWall
v 1.000000 -1.000000 0.000000
v 1.000000 1.000000 0.000000
v -1.000000 1.000000 0.000000
v -1.000000 -1.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
usemtl Brick
s off
f 1/1 2/2 3/3
f 1/1 3/3 4/4
...@@ -9,7 +9,7 @@ Ni 1.000000 ...@@ -9,7 +9,7 @@ Ni 1.000000
d 1.000000 d 1.000000
illum 2 illum 2
map_Kd arm_dif.png map_Kd arm_dif.png
map_Bump arm_showroom_ddn.png map_Kn arm_showroom_ddn.png
map_Ks arm_showroom_spec.png map_Ks arm_showroom_spec.png
...@@ -22,7 +22,7 @@ Ni 1.000000 ...@@ -22,7 +22,7 @@ Ni 1.000000
d 1.000000 d 1.000000
illum 2 illum 2
map_Kd body_dif.png map_Kd body_dif.png
map_Bump body_showroom_ddn.png map_Kn body_showroom_ddn.png
map_Ks body_showroom_spec.png map_Ks body_showroom_spec.png
...@@ -35,7 +35,7 @@ Ni 1.000000 ...@@ -35,7 +35,7 @@ Ni 1.000000
d 1.000000 d 1.000000
illum 2 illum 2
map_Kd glass_dif.png map_Kd glass_dif.png
map_Bump glass_ddn.png map_Kn glass_ddn.png
newmtl Hand newmtl Hand
...@@ -47,7 +47,7 @@ Ni 1.000000 ...@@ -47,7 +47,7 @@ Ni 1.000000
d 1.000000 d 1.000000
illum 2 illum 2
map_Kd hand_dif.png map_Kd hand_dif.png
map_Bump hand_showroom_ddn.png map_Kn hand_showroom_ddn.png
map_Ks hand_showroom_spec.png map_Ks hand_showroom_spec.png
...@@ -60,7 +60,7 @@ Ni 1.000000 ...@@ -60,7 +60,7 @@ Ni 1.000000
d 1.000000 d 1.000000
illum 2 illum 2
map_Kd helmet_diff.png map_Kd helmet_diff.png
map_Bump helmet_showroom_ddn.png map_Kn helmet_showroom_ddn.png
map_Ks helmet_showroom_spec.png map_Ks helmet_showroom_spec.png
...@@ -73,7 +73,7 @@ Ni 1.000000 ...@@ -73,7 +73,7 @@ Ni 1.000000
d 1.000000 d 1.000000
illum 2 illum 2
map_Kd leg_dif.png map_Kd leg_dif.png
map_Bump leg_showroom_ddn.png map_Kn leg_showroom_ddn.png
map_Ks leg_showroom_spec.png map_Ks leg_showroom_spec.png
...@@ -18,20 +18,29 @@ cbuffer ObjectCBuf ...@@ -18,20 +18,29 @@ cbuffer ObjectCBuf
}; };
Texture2D tex; Texture2D tex;
Texture2D nmap; Texture2D nmap : register(t2);
SamplerState splr; SamplerState splr;
float4 main(float3 worldPos : Position, float3 n : Normal, float2 tc : Texcoord) : SV_Target float4 main(float3 worldPos : Position, float3 n : Normal, float3 tan : Tangent, float3 bitan : Bitangent, float2 tc : Texcoord) : SV_Target
{ {
// sample normal from map if normal mapping enabled // sample normal from map if normal mapping enabled
if( normalMapEnabled ) if( normalMapEnabled )
{ {
// build the tranform (rotation) into tangent space
const float3x3 tanToView = float3x3(
normalize(tan),
normalize(bitan),
normalize(n)
);
// unpack the normal from map into tangent space
const float3 normalSample = nmap.Sample(splr, tc).xyz; const float3 normalSample = nmap.Sample(splr, tc).xyz;
n.x = normalSample.x * 2.0f - 1.0f; n.x = normalSample.x * 2.0f - 1.0f;
n.y = -normalSample.y * 2.0f + 1.0f; n.y = -normalSample.y * 2.0f + 1.0f;
n.z = -normalSample.z; n.z = normalSample.z;
// bring normal from tanspace into view space
n = mul(n, tanToView);
} }
// fragment to light vector data // fragment to light vector data
const float3 vToL = lightPos - worldPos; const float3 vToL = lightPos - worldPos;
......
...@@ -9,14 +9,38 @@ cbuffer LightCBuf ...@@ -9,14 +9,38 @@ cbuffer LightCBuf
float attQuad; float attQuad;
}; };
cbuffer ObjectCBuf
{
bool normalMapEnabled;
float padding[3];
};
Texture2D tex; Texture2D tex;
Texture2D spec; Texture2D spec;
Texture2D nmap;
SamplerState splr; SamplerState splr;
float4 main(float3 worldPos : Position, float3 n : Normal, float2 tc : Texcoord) : SV_Target float4 main(float3 worldPos : Position, float3 n : Normal, float3 tan : Tangent, float3 bitan : Bitangent, float2 tc : Texcoord) : SV_Target
{ {
// sample normal from map if normal mapping enabled
if (normalMapEnabled)
{
// build the tranform (rotation) into tangent space
const float3x3 tanToView = float3x3(
normalize(tan),
normalize(bitan),
normalize(n)
);
// unpack normal data
const float3 normalSample = nmap.Sample(splr, tc).xyz;
n.x = normalSample.x * 2.0f - 1.0f;
n.y = -normalSample.y * 2.0f + 1.0f;
n.z = normalSample.z;
// bring normal from tanspace into view space
n = mul(n, tanToView);
}
// fragment to light vector data // fragment to light vector data
const float3 vToL = lightPos - worldPos; const float3 vToL = lightPos - worldPos;
const float distToL = length(vToL); const float distToL = length(vToL);
......
cbuffer CBuf
{
matrix modelView;
matrix modelViewProj;
};
struct VSOut
{
float3 worldPos : Position;
float3 normal : Normal;
float3 tan : Tangent;
float3 bitan : Bitangent;
float2 tc : Texcoord;
float4 pos : SV_Position;
};
VSOut main(float3 pos : Position, float3 n : Normal, float3 tan : Tangent, float3 bitan : Bitangent, float2 tc : Texcoord)
{
VSOut vso;
vso.worldPos = (float3) mul(float4(pos, 1.0f), modelView);
vso.normal = mul(n, (float3x3) modelView);
vso.tan = mul(tan, (float3x3) modelView);
vso.bitan = mul(bitan, (float3x3) modelView);
vso.pos = mul(float4(pos, 1.0f), modelViewProj);
vso.tc = tc;
return vso;
}
\ No newline at end of file
...@@ -71,6 +71,10 @@ namespace Dvtx ...@@ -71,6 +71,10 @@ namespace Dvtx
return sizeof( Map<Texture2D>::SysType ); return sizeof( Map<Texture2D>::SysType );
case Normal: case Normal:
return sizeof( Map<Normal>::SysType ); return sizeof( Map<Normal>::SysType );
case Tangent:
return sizeof( Map<Tangent>::SysType );
case Bitangent:
return sizeof( Map<Bitangent>::SysType );
case Float3Color: case Float3Color:
return sizeof( Map<Float3Color>::SysType ); return sizeof( Map<Float3Color>::SysType );
case Float4Color: case Float4Color:
...@@ -97,6 +101,10 @@ namespace Dvtx ...@@ -97,6 +101,10 @@ namespace Dvtx
return Map<Texture2D>::code; return Map<Texture2D>::code;
case Normal: case Normal:
return Map<Normal>::code; return Map<Normal>::code;
case Tangent:
return Map<Tangent>::code;
case Bitangent:
return Map<Bitangent>::code;
case Float3Color: case Float3Color:
return Map<Float3Color>::code; return Map<Float3Color>::code;
case Float4Color: case Float4Color:
...@@ -119,6 +127,10 @@ namespace Dvtx ...@@ -119,6 +127,10 @@ namespace Dvtx
return GenerateDesc<Texture2D>( GetOffset() ); return GenerateDesc<Texture2D>( GetOffset() );
case Normal: case Normal:
return GenerateDesc<Normal>( GetOffset() ); return GenerateDesc<Normal>( GetOffset() );
case Tangent:
return GenerateDesc<Tangent>( GetOffset() );
case Bitangent:
return GenerateDesc<Bitangent>( GetOffset() );
case Float3Color: case Float3Color:
return GenerateDesc<Float3Color>( GetOffset() ); return GenerateDesc<Float3Color>( GetOffset() );
case Float4Color: case Float4Color:
......
...@@ -16,6 +16,8 @@ namespace Dvtx ...@@ -16,6 +16,8 @@ namespace Dvtx
Position3D, Position3D,
Texture2D, Texture2D,
Normal, Normal,
Tangent,
Bitangent,
Float3Color, Float3Color,
Float4Color, Float4Color,
BGRAColor, BGRAColor,
...@@ -50,6 +52,20 @@ namespace Dvtx ...@@ -50,6 +52,20 @@ namespace Dvtx
static constexpr const char* semantic = "Normal"; static constexpr const char* semantic = "Normal";
static constexpr const char* code = "N"; static constexpr const char* code = "N";
}; };
template<> struct Map<Tangent>
{
using SysType = DirectX::XMFLOAT3;
static constexpr DXGI_FORMAT dxgiFormat = DXGI_FORMAT_R32G32B32_FLOAT;
static constexpr const char* semantic = "Tangent";
static constexpr const char* code = "Nt";
};
template<> struct Map<Bitangent>
{
using SysType = DirectX::XMFLOAT3;
static constexpr DXGI_FORMAT dxgiFormat = DXGI_FORMAT_R32G32B32_FLOAT;
static constexpr const char* semantic = "Bitangent";
static constexpr const char* code = "Nb";
};
template<> struct Map<Float3Color> template<> struct Map<Float3Color>
{ {
using SysType = DirectX::XMFLOAT3; using SysType = DirectX::XMFLOAT3;
...@@ -146,6 +162,12 @@ namespace Dvtx ...@@ -146,6 +162,12 @@ namespace Dvtx
case VertexLayout::Normal: case VertexLayout::Normal:
SetAttribute<VertexLayout::Normal>( pAttribute,std::forward<T>( val ) ); SetAttribute<VertexLayout::Normal>( pAttribute,std::forward<T>( val ) );
break; break;
case VertexLayout::Tangent:
SetAttribute<VertexLayout::Tangent>( pAttribute,std::forward<T>( val ) );
break;
case VertexLayout::Bitangent:
SetAttribute<VertexLayout::Bitangent>( pAttribute,std::forward<T>( val ) );
break;
case VertexLayout::Float3Color: case VertexLayout::Float3Color:
SetAttribute<VertexLayout::Float3Color>( pAttribute,std::forward<T>( val ) ); SetAttribute<VertexLayout::Float3Color>( pAttribute,std::forward<T>( val ) );
break; break;
......
...@@ -207,7 +207,7 @@ ...@@ -207,7 +207,7 @@
<ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)%(Filename).cso</ObjectFileOutput> <ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)%(Filename).cso</ObjectFileOutput>
<ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)%(Filename).cso</ObjectFileOutput> <ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)%(Filename).cso</ObjectFileOutput>
</FxCompile> </FxCompile>
<FxCompile Include="PhongPSSpecMap.hlsl"> <FxCompile Include="PhongPSSpecNormalMap.hlsl">
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Pixel</ShaderType> <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Pixel</ShaderType>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4.0</ShaderModel> <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4.0</ShaderModel>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Pixel</ShaderType> <ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Pixel</ShaderType>
...@@ -215,6 +215,14 @@ ...@@ -215,6 +215,14 @@
<ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)%(Filename).cso</ObjectFileOutput> <ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)%(Filename).cso</ObjectFileOutput>
<ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)%(Filename).cso</ObjectFileOutput> <ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)%(Filename).cso</ObjectFileOutput>
</FxCompile> </FxCompile>
<FxCompile Include="PhongVSNormalMap.hlsl">
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4.0</ShaderModel>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4.0</ShaderModel>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Vertex</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Vertex</ShaderType>
<ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)%(Filename).cso</ObjectFileOutput>
<ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)%(Filename).cso</ObjectFileOutput>
</FxCompile>
<FxCompile Include="SolidPS.hlsl"> <FxCompile Include="SolidPS.hlsl">
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Pixel</ShaderType> <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Pixel</ShaderType>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4.0</ShaderModel> <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4.0</ShaderModel>
......
...@@ -358,10 +358,13 @@ ...@@ -358,10 +358,13 @@
<FxCompile Include="SolidVS.hlsl"> <FxCompile Include="SolidVS.hlsl">
<Filter>Shader</Filter> <Filter>Shader</Filter>
</FxCompile> </FxCompile>
<FxCompile Include="PhongPSSpecMap.hlsl"> <FxCompile Include="PhongPSNormalMap.hlsl">
<Filter>Shader</Filter> <Filter>Shader</Filter>
</FxCompile> </FxCompile>
<FxCompile Include="PhongPSNormalMap.hlsl"> <FxCompile Include="PhongVSNormalMap.hlsl">
<Filter>Shader</Filter>
</FxCompile>
<FxCompile Include="PhongPSSpecNormalMap.hlsl">
<Filter>Shader</Filter> <Filter>Shader</Filter>
</FxCompile> </FxCompile>
</ItemGroup> </ItemGroup>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment