void VolumeRenderer::Render(const ICamera &camera) { Matrix objectMatrix; transform->GetTransformMatrixQuaternion(objectMatrix); Vector3 camPos; camera.GetPosition(camPos); Matrix wvpMatrix = objectMatrix*camera.GetViewProjectionMatrix(); mVolumeRenderShader->SetVertexBufferValues(wvpMatrix, objectMatrix); //mVolumeRenderShader->SetTransform(*transform); if (mPrevCameraPos != camPos) { mVolumeRenderShader->SetCameraPosition(camPos); mPrevCameraPos = camPos; } auto context = pD3dGraphicsObj->GetDeviceContext(); primitive->Draw(mVolumeRenderShader.get(), mVolumeRenderShader->GetInputLayout(), false, false, [=] { auto blendState = pCommonStates->NonPremultiplied(); auto rasterizeState = pCommonStates->CullClockwise(); context->OMSetBlendState(blendState, nullptr, 0xFFFFFFFF); context->RSSetState(rasterizeState); } ); ID3D11ShaderResourceView *const pSRVNULL[2] = {nullptr, nullptr}; context->PSSetShaderResources(0, 2, pSRVNULL); }
void SkyObject::Render(const ICamera &camera) { camera.GetPosition(transform->position); Matrix objectMatrix; transform->GetTransformMatrixQuaternion(objectMatrix); Matrix wvpMatrix = objectMatrix*camera.GetViewProjectionMatrix(); mSkyShader->SetVertexBufferValues(wvpMatrix, objectMatrix); ID3D11DeviceContext *context = pD3dGraphicsObj->GetDeviceContext(); primitive->Draw(mSkyShader.get(), mSkyShader->GetInputLayout(), false, false, [=] { ID3D11RasterizerState* rasterizeState = pCommonStates->CullNone(); context->RSSetState(rasterizeState); } ); }
void CMeshNode::UpdateImp(int elapsedTime) { if (m_pSceneParent) { ICamera *pCamera = m_pSceneParent->GetCamera(); if (pCamera) { if (m_pMesh) { const CFrustum &frustum = pCamera->GetFrustum(); CVector3 camPos; pCamera->GetViewMatrix().TransformVect(camPos, GetPosition()); if (!frustum.CullSphere(camPos, m_pMesh->GetMaxRadius())) { SetActive(true); for (uint i = 0; i < m_pMesh->GetTrianglesNum(); ++i) { if (m_pRenderableObject[i]) { render::IShaderProgram *shaderProgram = m_pRenderableObject[i]->GetShaderProgram(); if (shaderProgram) { CMatrix4 modelMat4; modelMat4.SetTranslation(GetPosition()); CMatrix4 mat4 = modelMat4 * pCamera->GetViewProjectionMatrix(); shaderProgram->SetUniform("mvpMatrix", &mat4.m); } } } } else { SetActive(false); } } } } }
void CUnit::UpdateImp(int delta) { //没有被剔除掉,加入到渲染列表 if (true) { IShaderProgram *pShaderProgram = m_pRenderable->GetShaderProgram(); if (pShaderProgram) { CMatrix4 vpMat4; if (SCENEMGR->GetCurrentScene()) { ICamera *pCam = SCENEMGR->GetCurrentScene()->GetCamera(); if (pCam) { vpMat4 = pCam->GetViewProjectionMatrix(); } } CMatrix4 mvpMat4 = GetAbsluateTransformation() * vpMat4; pShaderProgram->SetUniform("mvpMatrix", mvpMat4.m); } m_pRenderable->SumbitToRenderList(); } }