I did some Exercises from Directx 11 book chapter 6 Drawing in DirectX.
Some more interesting screenshots and some code snippets from exercises.
ex.4
// The Pyramid
Vertex verticesP[] =
{
{ XMFLOAT3(-1.0f, -1.0f, -1.0f), (const float*)&Colors::Green },
{ XMFLOAT3(-1.0f, -1.0f, 1.0f), (const float*)&Colors::Green },
{ XMFLOAT3(+1.0f, -1.0f, 1.0f), (const float*)&Colors::Green },
{ XMFLOAT3(+1.0f, -1.0f, -1.0f), (const float*)&Colors::Green },
{ XMFLOAT3(0.0f, 1.5f, 0.0f), (const float*)&Colors::Red }
};
// Create the index buffer
UINT indicesP[] = {
// bottom
2, 1, 0,
3, 2, 0,
// sides
0, 1, 4,
1, 2, 4,
2, 3, 4,
3, 0, 4
};
ex.6
Simple cube animation on vertex shader.
Added code to C++
// member variable for time
ID3DX11EffectScalarVariable* mfxTime;
// in BuildFX()
mfxTime = mFX->GetVariableByName("gTime")->AsScalar();
//...
// in Draw()
mfxTime->SetFloat(mTimer.TotalTime());
shader code:
cbuffer cbPerFrame
{
float gTime;
};
VertexOut VS(VertexIn vin)
{
VertexOut vout;
// ch.6 ex.6
vin.PosL.xy += 0.5f*sin(vin.PosL.x)*sin(3.0f*gTime);
vin.PosL.z *= 0.6f + 0.4f*sin(2.0f*gTime);
// Transform to homogeneous clip space.
vout.PosH = mul(float4(vin.PosL, 1.0f), gWorldViewProj);
// Just pass vertex color into the pixel shader.
vout.Color = vin.Color;
return vout;
}
ex. 13
Setting and using scissor test.
D3D11_RASTERIZER_DESC wireframeDesc;
ZeroMemory(&wireframeDesc, sizeof(D3D11_RASTERIZER_DESC));
wireframeDesc.FillMode = D3D11_FILL_WIREFRAME;
wireframeDesc.CullMode = D3D11_CULL_BACK;
wireframeDesc.FrontCounterClockwise = false;
wireframeDesc.DepthClipEnable = true;
wireframeDesc.ScissorEnable = true;
HR(md3dDevice->CreateRasterizerState(&wireframeDesc, &mWireframeRS));
D3D11_RECT rects = { 100, 100, 400, 400 };
md3dImmediateContext->RSSetScissorRects(1, &rects);
ex. 14
GeoSphere with different subdivision levels. Subdivision levels: 0, 1 and 3.




