void DrawModel() { auto_interface<ID3D10Device> pNativeDevice(_device.GetNativeDevice()); // 立方体の描画 // 定数バッファ�Aを更新 cbChangesEveryFrame* pCBufEveryFrame = static_cast<cbChangesEveryFrame*>(_renderer.GetShaderConstantBuffer(_shader, 1)); // ビュー変換行列 D3DXVECTOR3 eye = D3DXVECTOR3(0.0f, 5.0f, -5.0f); // 視点(カメラの位置) D3DXVECTOR3 at = D3DXVECTOR3(0.0f, 0.0f, 0.0f); // 注視点 D3DXVECTOR3 up = D3DXVECTOR3(0.0f, 1.0f, 0.0f); // カメラの上方向 D3DXMatrixLookAtLH(&pCBufEveryFrame->View, &eye, &at, &up); D3DXMatrixTranspose(&pCBufEveryFrame->View, &pCBufEveryFrame->View); // 点光源座標 D3DXVECTOR3 vLightPos(3.0f, 3.0f, -3.0f); // 光源座標(ワールド座標系) D3DXVec3TransformCoord(&pCBufEveryFrame->Light, &vLightPos, &pCBufEveryFrame->View); // 定数バッファ�Bを更新 cbChangesEveryObject* pCBufEveryObject = static_cast<cbChangesEveryObject*>(_renderer.GetShaderConstantBuffer(_shader, 2)); // ワールド変換行列 static float angle = 0.f; angle += _frameRateController.GetElapsedTime(); D3DXMatrixRotationY(&pCBufEveryObject->World, angle); D3DXMatrixTranspose(&pCBufEveryObject->World, &pCBufEveryObject->World); float* pGlobalColor = reinterpret_cast<float*>(_renderer.GetShaderGlobalVariable(_shader, "color")); pGlobalColor[0] = 1.0f; pGlobalColor[1] = 1.0f; pGlobalColor[2] = 1.0f; pGlobalColor[3] = 1.0f; // *************************************** // IAに頂点バッファを設定 _renderer.SetVertexBuffer(_vertices); // IAにインデックス・バッファを設定 _renderer.SetIndexBuffer(_indices); // IAに入力レイアウト・オブジェクトを設定 _renderer.SetInputLayout(_inputLayout); // IAにプリミティブの種類を設定 pNativeDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST); // シェーダをデバイスに適用。 _renderer.SetShader(_shader); _renderer.ApplyShader(); _renderer.SetDefaultRenderTargets(); _renderer.SetDefaultRasterizerState(); _renderer.SetDefaultBlendState(); _renderer.SetDefaultDepthStencilState(); // *************************************** // 頂点バッファのデータをインデックス・バッファを使って描画する pNativeDevice->DrawIndexed( 36, // 描画するインデックス数(頂点数) 0, // インデックス・バッファの最初のインデックスから描画開始 0); // 頂点バッファ内の最初の頂点データから使用開始 }
bool CreateTexture() { auto_interface<ID3D10Device> pNativeDevice(_device.GetNativeDevice()); HRESULT hRet; D3DX10CreateShaderResourceViewFromFile(pNativeDevice, _T("..\\Rakugaki_Direct3D10_dat\\img.jpg"), NULL, NULL, &_pTextureSRV, &hRet); if (FAILED(hRet)) { return false; } return true; }
bool CreateVertices() { auto_interface<ID3D10Device> pNativeDevice(_device.GetNativeDevice()); // 頂点バッファ。 struct Vertex initialVertexDatas[] = { { D3DXVECTOR3(-1.0f,1.0f,-1.0f), D3DXVECTOR3(0.0f,0.0f,0.0f) }, { D3DXVECTOR3(1.0f,1.0f,-1.0f), D3DXVECTOR3(0.0f,0.0f,1.0f) }, { D3DXVECTOR3(1.0f,-1.0f,-1.0f), D3DXVECTOR3(0.0f,1.0f,0.0f) }, { D3DXVECTOR3(-1.0f,-1.0f,-1.0f), D3DXVECTOR3(0.0f,1.0f,1.0f) }, { D3DXVECTOR3(-1.0f,1.0f,1.0f), D3DXVECTOR3(1.0f,0.0f,0.0f) }, { D3DXVECTOR3(1.0f,1.0f,1.0f), D3DXVECTOR3(1.0f,0.0f,1.0f) }, { D3DXVECTOR3(1.0f,-1.0f,1.0f), D3DXVECTOR3(1.0f,1.0f,0.0f) }, { D3DXVECTOR3(-1.0f,-1.0f,1.0f), D3DXVECTOR3(1.0f,1.0f,1.0f) }, }; _vertices = _device.CreateVertexBuffer(D3D10_USAGE_DEFAULT, 0, sizeof(Vertex), _countof(initialVertexDatas), initialVertexDatas); if (_vertices == VertexBufferHandle::INVALID) return false; // インデックスバッファ。 UINT initialIndexDatas[] = { 0,1,3, 1,2,3, 1,5,2, 5,6,2, 5,4,6, 4,7,6, 4,5,0, 5,1,0, 4,0,7, 0,3,7, 3,2,7, 2,6,7 }; _indices = _device.CreateIndexBuffer(D3D10_USAGE_IMMUTABLE, 0, sizeof(UINT), _countof(initialIndexDatas), initialIndexDatas); if (_indices == IndexBufferHandle::INVALID) return false; // 入力レイアウト・オブジェクトの作成 D3D10_INPUT_ELEMENT_DESC layout[] = { {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, offsetof(Vertex, Position), D3D10_INPUT_PER_VERTEX_DATA, 0}, {"COLOR", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, offsetof(Vertex, Color), D3D10_INPUT_PER_VERTEX_DATA, 0} }; _inputLayout = _device.CreateInputLayout( layout, _countof(layout), _shader ); if (_inputLayout == InputLayoutHandle::INVALID) { return false; } return true; }
bool CreateSprite() { auto_interface<ID3D10Device> pNativeDevice(_device.GetNativeDevice()); HRESULT hRet = D3DX10CreateSprite(pNativeDevice, 128, &_pSprite); if (FAILED(hRet)) { return false; } D3DXMATRIX m; //D3DXVECTOR3 vEye(0.0f, 0.0f, 3.0f); // 視点(カメラの位置) D3DXVECTOR3 vEye(0.0f, 0.0f, -3.0f); // 視点(カメラの位置) D3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); // 注視点 D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f); // カメラの上方向 D3DXMatrixLookAtLH(&m, &vEye, &vAt, &vUp); _pSprite->SetViewTransform(&m); return true; }