Commit 92780ee3 authored by chili's avatar chili
Browse files

problem with specular

parent ffb174ec
......@@ -64,8 +64,10 @@ Box::Box( Graphics& gfx,
struct PSMaterialConstant
{
dx::XMFLOAT3 color;
float padding;
alignas(16) dx::XMFLOAT3 color;
float specularIntensity = 0.6f;
float specularPower = 30.0f;
float padding[2];
} colorConst;
colorConst.color = material;
AddBind( std::make_unique<PixelConstantBuffer<PSMaterialConstant>>( gfx,colorConst,1u ) );
......
......@@ -12,6 +12,8 @@ cbuffer LightCBuf
cbuffer ObjectCBuf
{
float3 materialColor;
float specularIntensity;
float specularPower;
};
......@@ -25,6 +27,11 @@ float4 main( float3 worldPos : Position,float3 n : Normal ) : SV_Target
const float att = 1.0f / (attConst + attLin * distToL + attQuad * (distToL * distToL));
// diffuse intensity
const float3 diffuse = diffuseColor * diffuseIntensity * att * max( 0.0f,dot( dirToL,n ) );
// reflected light vector
const float3 w = n * dot( dirToL,n );
const float3 r = w * 2.0f - dirToL;
// calculate specular intensity based on angle between viewing vector and reflection vector, narrow with power function
const float3 specular = (diffuseColor * diffuseIntensity) * specularIntensity * pow( max( 0.0f,dot( normalize( r ),normalize( worldPos ) ) ),specularPower );
// final color
return float4(saturate( (diffuse + ambient) * materialColor ),1.0f);
return float4(saturate( (diffuse + ambient + specular) * materialColor ),1.0f);
}
\ No newline at end of file
#include "Sheet.h"
#include "BindableBase.h"
#include "GraphicsThrowMacros.h"
#include "Plane.h"
#include "Surface.h"
#include "Texture.h"
#include "Sampler.h"
Sheet::Sheet( Graphics& gfx,
std::mt19937& rng,
std::uniform_real_distribution<float>& adist,
std::uniform_real_distribution<float>& ddist,
std::uniform_real_distribution<float>& odist,
std::uniform_real_distribution<float>& rdist )
:
r( rdist( rng ) ),
droll( ddist( rng ) ),
dpitch( ddist( rng ) ),
dyaw( ddist( rng ) ),
dphi( odist( rng ) ),
dtheta( odist( rng ) ),
dchi( odist( rng ) ),
chi( adist( rng ) ),
theta( adist( rng ) ),
phi( adist( rng ) )
{
namespace dx = DirectX;
if( !IsStaticInitialized() )
{
struct Vertex
{
dx::XMFLOAT3 pos;
struct
{
float u;
float v;
} tex;
};
auto model = Plane::Make<Vertex>();
model.vertices[0].tex = { 0.0f,0.0f };
model.vertices[1].tex = { 1.0f,0.0f };
model.vertices[2].tex = { 0.0f,1.0f };
model.vertices[3].tex = { 1.0f,1.0f };
AddStaticBind( std::make_unique<Texture>( gfx,Surface::FromFile( "Images\\kappa50.png" ) ) );
AddStaticBind( std::make_unique<VertexBuffer>( gfx,model.vertices ) );
AddStaticBind( std::make_unique<Sampler>( gfx ) );
auto pvs = std::make_unique<VertexShader>( gfx,L"TextureVS.cso" );
auto pvsbc = pvs->GetBytecode();
AddStaticBind( std::move( pvs ) );
AddStaticBind( std::make_unique<PixelShader>( gfx,L"TexturePS.cso" ) );
AddStaticIndexBuffer( std::make_unique<IndexBuffer>( gfx,model.indices ) );
const std::vector<D3D11_INPUT_ELEMENT_DESC> ied =
{
{ "Position",0,DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0 },
{ "TexCoord",0,DXGI_FORMAT_R32G32_FLOAT,0,12,D3D11_INPUT_PER_VERTEX_DATA,0 },
};
AddStaticBind( std::make_unique<InputLayout>( gfx,ied,pvsbc ) );
AddStaticBind( std::make_unique<Topology>( gfx,D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST ) );
}
else
{
SetIndexFromStatic();
}
AddBind( std::make_unique<TransformCbuf>( gfx,*this ) );
}
void Sheet::Update( float dt ) noexcept
{
roll += droll * dt;
pitch += dpitch * dt;
yaw += dyaw * dt;
theta += dtheta * dt;
phi += dphi * dt;
chi += dchi * dt;
}
DirectX::XMMATRIX Sheet::GetTransformXM() const noexcept
{
namespace dx = DirectX;
return dx::XMMatrixRotationRollPitchYaw( pitch,yaw,roll ) *
dx::XMMatrixTranslation( r,0.0f,0.0f ) *
dx::XMMatrixRotationRollPitchYaw( theta,phi,chi );
}
#pragma once
#include "DrawableBase.h"
class Sheet : public DrawableBase<Sheet>
{
public:
Sheet( Graphics& gfx,std::mt19937& rng,
std::uniform_real_distribution<float>& adist,
std::uniform_real_distribution<float>& ddist,
std::uniform_real_distribution<float>& odist,
std::uniform_real_distribution<float>& rdist );
void Update( float dt ) noexcept override;
DirectX::XMMATRIX GetTransformXM() const noexcept override;
private:
// positional
float r;
float roll = 0.0f;
float pitch = 0.0f;
float yaw = 0.0f;
float theta;
float phi;
float chi;
// speed (delta/s)
float droll;
float dpitch;
float dyaw;
float dtheta;
float dphi;
float dchi;
};
\ No newline at end of file
......@@ -174,7 +174,6 @@
<ClCompile Include="PixelShader.cpp" />
<ClCompile Include="Pyramid.cpp" />
<ClCompile Include="Sampler.cpp" />
<ClCompile Include="Sheet.cpp" />
<ClCompile Include="SkinnedBox.cpp" />
<ClCompile Include="Surface.cpp" />
<ClCompile Include="Texture.cpp" />
......@@ -220,15 +219,14 @@
<ClInclude Include="InputLayout.h" />
<ClInclude Include="Keyboard.h" />
<ClInclude Include="PointLight.h" />
<ClInclude Include="Pyramid.h" />
<ClInclude Include="SolidSphere.h" />
<ClInclude Include="Mouse.h" />
<ClInclude Include="PixelShader.h" />
<ClInclude Include="Plane.h" />
<ClInclude Include="Prism.h" />
<ClInclude Include="Pyramid.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="Sampler.h" />
<ClInclude Include="Sheet.h" />
<ClInclude Include="SkinnedBox.h" />
<ClInclude Include="Sphere.h" />
<ClInclude Include="Surface.h" />
......
......@@ -114,9 +114,6 @@
<ClCompile Include="GDIPlusManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Sheet.cpp">
<Filter>Source Files\Drawable</Filter>
</ClCompile>
<ClCompile Include="Texture.cpp">
<Filter>Source Files\Bindable</Filter>
</ClCompile>
......@@ -260,9 +257,6 @@
<ClInclude Include="Prism.h">
<Filter>Header Files\Geometry</Filter>
</ClInclude>
<ClInclude Include="Pyramid.h">
<Filter>Header Files\Drawable</Filter>
</ClInclude>
<ClInclude Include="Surface.h">
<Filter>Header Files</Filter>
</ClInclude>
......@@ -272,9 +266,6 @@
<ClInclude Include="Texture.h">
<Filter>Header Files\Bindable</Filter>
</ClInclude>
<ClInclude Include="Sheet.h">
<Filter>Header Files\Drawable</Filter>
</ClInclude>
<ClInclude Include="Sampler.h">
<Filter>Header Files\Bindable</Filter>
</ClInclude>
......@@ -317,6 +308,9 @@
<ClInclude Include="PointLight.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Pyramid.h">
<Filter>Header Files\Drawable</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="hw3d.rc">
......
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