In this lesson we learn about other built-in shader types and some of their uses.
Adding the DirectX Tool Kit which we will use for this lesson.
In the Game.h file, add the following variables to the bottom of the Game class's private declarations:
In Game.cpp, add to the TODO of CreateDevice:
In Game.cpp, add to the TODO of CreateResources:
In Game.cpp, add to the TODO of OnDeviceLost:
In Game.cpp, add to the TODO of Render:
In Game.cpp, add to the TODO of Update:
Build and run to see the teapot rendered with a fancy material.
screenshotTeapot.png
Next lesson:Applying lightmaps
Setup
First create a new project using the instructions from the first two lessons: The basic game loop andAdding the DirectX Tool Kit which we will use for this lesson.
Environment mapping
Start by saving wood.dds and cubemap.dds into your new project's directory, and then from the top menu select Project / Add Existing Item.... Select "wood.dds" and click "OK". Repeat for "cubemap.dds"In the Game.h file, add the following variables to the bottom of the Game class's private declarations:
DirectX::SimpleMath::Matrix m_world; DirectX::SimpleMath::Matrix m_view; DirectX::SimpleMath::Matrix m_proj; std::unique_ptr<DirectX::GeometricPrimitive> m_shape; std::unique_ptr<DirectX::EnvironmentMapEffect> m_effect; Microsoft::WRL::ComPtr<ID3D11InputLayout> m_inputLayout; Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> m_texture; Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> m_cubemap;
In Game.cpp, add to the TODO of CreateDevice:
m_effect.reset(new EnvironmentMapEffect(m_d3dDevice.Get())); m_effect->EnableDefaultLighting(); m_shape = GeometricPrimitive::CreateTeapot(m_d3dContext.Get()); m_shape->CreateInputLayout(m_effect.get(), m_inputLayout.ReleaseAndGetAddressOf()); DX::ThrowIfFailed( CreateDDSTextureFromFile(m_d3dDevice.Get(), L"wood.dds", nullptr, m_texture.ReleaseAndGetAddressOf())); m_effect->SetTexture(m_texture.Get()); DX::ThrowIfFailed( CreateDDSTextureFromFile(m_d3dDevice.Get(), L"cubemap.dds", nullptr, m_cubemap.ReleaseAndGetAddressOf())); m_effect->SetEnvironmentMap(m_cubemap.Get()); m_world = Matrix::Identity;
In Game.cpp, add to the TODO of CreateResources:
m_view = Matrix::CreateLookAt(Vector3(2.f, 2.f, 2.f), Vector3::Zero, Vector3::UnitY); m_proj = Matrix::CreatePerspectiveFieldOfView(XM_PI / 4.f, viewPort.Width / viewPort.Height, 0.1f, 10.f); m_effect->SetView(m_view); m_effect->SetProjection(m_proj);
In Game.cpp, add to the TODO of OnDeviceLost:
m_shape.reset(); m_effect.reset(); m_inputLayout.Reset(); m_texture.Reset(); m_cubemap.Reset();
In Game.cpp, add to the TODO of Render:
m_effect->SetWorld(m_world); m_shape->Draw(m_effect.get(), m_inputLayout.Get());
In Game.cpp, add to the TODO of Update:
float time = float(timer.GetTotalSeconds()); m_world = Matrix::CreateRotationZ(cosf(time) * 2.f);
Build and run to see the teapot rendered with a fancy material.
screenshotTeapot.png
Alpha-test
...
Next lesson:Applying lightmaps