Commit b3fc5123 authored by chili's avatar chili
Browse files

basic ass test w/ drawable

parent 0d9e4a84
......@@ -3,6 +3,7 @@
#include "Cylinder.h"
#include "Pyramid.h"
#include "SkinnedBox.h"
#include "AssTest.h"
#include <memory>
#include <algorithm>
#include "ChiliMath.h"
......@@ -22,12 +23,6 @@ App::App()
wnd( 800,600,"The Donkey Fart Box" ),
light( wnd.Gfx() )
{
Assimp::Importer imp;
auto model = imp.ReadFile( "models\\suzanne.obj",
aiProcess_Triangulate |
aiProcess_JoinIdenticalVertices
);
class Factory
{
public:
......@@ -61,6 +56,11 @@ App::App()
gfx,rng,adist,ddist,
odist,rdist
);
case 4:
return std::make_unique<AssTest>(
gfx,rng,adist,ddist,
odist,rdist,mat,1.5f
);
default:
assert( false && "impossible drawable option in factory" );
return {};
......@@ -69,7 +69,7 @@ App::App()
private:
Graphics& gfx;
std::mt19937 rng{ std::random_device{}() };
std::uniform_int_distribution<int> sdist{ 0,3 };
std::uniform_int_distribution<int> sdist{ 0,4 };
std::uniform_real_distribution<float> adist{ 0.0f,PI * 2.0f };
std::uniform_real_distribution<float> ddist{ 0.0f,PI * 0.5f };
std::uniform_real_distribution<float> odist{ 0.0f,PI * 0.08f };
......
#include "AssTest.h"
#include "BindableBase.h"
#include "GraphicsThrowMacros.h"
#include <assimp/Importer.hpp>
#include <assimp/scene.h>
#include <assimp/postprocess.h>
AssTest::AssTest( 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,
DirectX::XMFLOAT3 material,
float scale )
:
TestObject( gfx,rng,adist,ddist,odist,rdist )
{
namespace dx = DirectX;
if( !IsStaticInitialized() )
{
struct Vertex
{
dx::XMFLOAT3 pos;
dx::XMFLOAT3 n;
};
Assimp::Importer imp;
const auto pModel = imp.ReadFile( "models\\suzanne.obj",
aiProcess_Triangulate |
aiProcess_JoinIdenticalVertices
);
const auto pMesh = pModel->mMeshes[0];
std::vector<Vertex> vertices;
vertices.reserve( pMesh->mNumVertices );
for( unsigned int i = 0; i < pMesh->mNumVertices; i++ )
{
vertices.push_back( {
{ pMesh->mVertices[i].x * scale,pMesh->mVertices[i].y * scale,pMesh->mVertices[i].z * scale },
*reinterpret_cast<dx::XMFLOAT3*>(&pMesh->mNormals[i])
} );
}
std::vector<unsigned short> indices;
indices.reserve( pMesh->mNumFaces * 3 );
for( unsigned int i = 0; i < pMesh->mNumFaces; i++ )
{
const auto& face = pMesh->mFaces[i];
assert( face.mNumIndices == 3 );
indices.push_back( face.mIndices[0] );
indices.push_back( face.mIndices[1] );
indices.push_back( face.mIndices[2] );
}
AddStaticBind( std::make_unique<VertexBuffer>( gfx,vertices ) );
AddStaticIndexBuffer( std::make_unique<IndexBuffer>( gfx,indices ) );
auto pvs = std::make_unique<VertexShader>( gfx,L"PhongVS.cso" );
auto pvsbc = pvs->GetBytecode();
AddStaticBind( std::move( pvs ) );
AddStaticBind( std::make_unique<PixelShader>( gfx,L"PhongPS.cso" ) );
const std::vector<D3D11_INPUT_ELEMENT_DESC> ied =
{
{ "Position",0,DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0 },
{ "Normal",0,DXGI_FORMAT_R32G32B32_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 ) );
struct PSMaterialConstant
{
DirectX::XMFLOAT3 color;
float specularIntensity = 0.6f;
float specularPower = 30.0f;
float padding[3];
} pmc;
pmc.color = material;
AddStaticBind( std::make_unique<PixelConstantBuffer<PSMaterialConstant>>( gfx,pmc,1u ) );
}
else
{
SetIndexFromStatic();
}
AddBind( std::make_unique<TransformCbuf>( gfx,*this ) );
}
#pragma once
#include "TestObject.h"
#include "ConstantBuffers.h"
class AssTest : public TestObject<AssTest>
{
public:
AssTest( 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,
DirectX::XMFLOAT3 material,
float scale );
};
\ No newline at end of file
......@@ -92,6 +92,7 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="App.cpp" />
<ClCompile Include="AssTest.cpp" />
<ClCompile Include="Bindable.cpp" />
<ClCompile Include="Box.cpp" />
<ClCompile Include="Camera.cpp" />
......@@ -133,6 +134,7 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="App.h" />
<ClInclude Include="AssTest.h" />
<ClInclude Include="Bindable.h" />
<ClInclude Include="BindableBase.h" />
<ClInclude Include="Box.h" />
......
......@@ -159,6 +159,9 @@
<ClCompile Include="Cylinder.cpp">
<Filter>Source Files\Drawable</Filter>
</ClCompile>
<ClCompile Include="AssTest.cpp">
<Filter>Source Files\Drawable</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="WindowsMessageMap.h">
......@@ -320,6 +323,9 @@
<ClInclude Include="Cylinder.h">
<Filter>Header Files\Drawable</Filter>
</ClInclude>
<ClInclude Include="AssTest.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