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);
	}
	);
}
예제 #3
0
		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);
						}
					}
				}

			}
		}
예제 #4
0
		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();
			}
		}