 Translations without D3DX Here is our replacement for D3DXMatrixTranslation: ```// Procedure: dhMatrixTranslation // Whazzit:Given x,y,z produces a matrx to perform the appropriate translation D3DXMATRIX *dhMatrixTranslation(D3DXMATRIX *pOut,float x,float y,float z){ pOut->_11 = 1.0f; pOut->_12 = 0.0f; pOut->_13 = 0.0f; pOut->_14 = 0.0f; pOut->_21 = 0.0f; pOut->_22 = 1.0f; pOut->_23 = 0.0f; pOut->_24 = 0.0f; pOut->_31 = 0.0f; pOut->_32 = 0.0f; pOut->_33 = 1.0f; pOut->_34 = 0.0f; pOut->_41 = x; pOut->_42 = y; pOut->_43 = z; pOut->_44 = 1.0f; return pOut; } ``` Here is our new render() function which shows that our function produces results identical to the D3DX version. The important bits are in red: ```void render(void){ D3DXMATRIX matWorld; //Clear the buffer to our new colour. g_d3d_device->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 ); //Notify the device that we're ready to render if(SUCCEEDED(g_d3d_device->BeginScene())){ //Vertex shaders are a complex topic, but you can do some amazing things with them //For this example we're not creating one, so we tell Direct3D that we're just //using a plain vertex format. g_d3d_device->SetVertexShader(D3D8T_CUSTOMVERTEX); //D3D's rendering functions read from streams. Here we tell D3D that the //VB we created for our triangle is the stream it should read from. g_d3d_device->SetStreamSource(0,g_vb,sizeof(my_vertex)); //Set up the translation matrix (move it over to the left a bit) D3DXMatrixTranslation(&matWorld,-1.0,0.0f,0.0f); //Set our World Matrix g_d3d_device->SetTransform(D3DTS_WORLD,&matWorld ); //After all that setup, actually drawing the triangle is pretty easy. //We tell it what we're giving it (a Triangle List), where it should //start reading (0, the beginning), and how many triangles we're drawing(1) g_d3d_device->DrawPrimitive(D3DPT_TRIANGLELIST,0,1); //Move this one a bit to the right dhMatrixTranslation(&matWorld,1.0,0.0f,0.0f); g_d3d_device->SetTransform(D3DTS_WORLD,&matWorld ); g_d3d_device->DrawPrimitive(D3DPT_TRIANGLELIST,0,1); //Notify the device that we're finished rendering for this frame g_d3d_device->EndScene(); } //Show the results g_d3d_device->Present( NULL, NULL, NULL, NULL ); } ```