Example #1
0
void FullbrightMaterialComponent::onRender()
{
	if(!hasModelData()) {
		return;
	}
	
	const CameraComponent &cam				= getOwner().getCameraManager().getCurrentCamera();
	//const TransformComponent *camTransform  = cam.getOwner()->getComponent<TransformComponent>();
	TransformComponent *transform			= getOwner().getComponent<TransformComponent>();
	assert(transform);
	
	CaffMath::Matrix44 worldMat = transform->getWorldMatrix();
	glm::mat4 wMat;
	
	memcpy(&wMat[0][0], &worldMat._11, sizeof(float) * 16);
	
//	const glm::mat4 pMat  = cam.getProjMatrix();
//	
//	CaffMath::Matrix44 viewMat = camTransform->getWorldMatrix();
//	glm::mat4 vMat;
//	const glm::mat4 vMat2 = cam.getViewMatrix();
//	
//	memcpy(&vMat[0][0], &viewMat._11, sizeof(float) * 16);
//	
//	//vMat = vMat._inverse();
//	vMat = vMat2;

	const glm::mat4 wvpMat = cam.getViewProjMatrix() * wMat;
	
	CaffApp::Renderer &renderer = getOwner().getRenderer();
	
	renderer.reset();
	renderer.setShader(fullBrightShaderID);
	renderer.setVertexFormat(fullBrightVertexID);
	renderer.setTexture("diffuseTex", m_diffuseMapID);
	renderer.setShader2f("texScale", &m_diffuseScale.x);
	renderer.setShaderMatrix44f("wvpMat", &wvpMat[0][0]);
	renderer.setShader4f("color", &m_rgba.x);
	
	for(std::size_t i = 0; i < getModelData()->model->getNumberOfMeshes(); ++i)
	{
		renderer.setVertexBuffer(getModelData()->vertBufferIDs.at(i));
		
		if(getModelData()->indexBufferIDs.size() < i)
		{
			renderer.setIndexBuffer(getModelData()->indexBufferIDs.at(i));
		}
		
		renderer.apply();
		renderer.drawArray(CaffApp::Primitive::TRIANGLES, 0, getModelData()->model->getMesh(i).getGLFaces());
	}
}
Example #2
0
void BlinnPhongMaterialComponent::onRender()
{
	if(!hasModelData()) {
		return;
	}
	
	const CameraComponent &cam    = getOwner().getCameraManager().getCurrentCamera();
	TransformComponent *transform = getOwner().getComponent<TransformComponent>();
	assert(transform);
	
	CaffMath::Matrix44 worldMat = transform->getWorldMatrix();
	glm::mat4 wMat;
	
	memcpy(&wMat[0][0], &worldMat._11, sizeof(float) * 16);

	const glm::mat4 wvpMat = cam.getViewProjMatrix() * wMat;

	const TransformComponent *camTransform = cam.getOwner().getComponent<TransformComponent>();
	assert(camTransform);

	const glm::vec3 camPos = cam.getPosition();

	CaffApp::Renderer &renderer = getOwner().getRenderer();
	
	renderer.reset();
	renderer.setShader(blinnShaderId);
	renderer.setVertexFormat(blinnVertexId);
	renderer.setTexture("diffuseTex", m_diffuseMapID);
	renderer.setShader2f("texScale", &m_diffuseScale.x);
	renderer.setShaderMatrix44f("wMat", &wMat[0][0]);
	renderer.setShaderMatrix44f("wvpMat", &wvpMat[0][0]);
	renderer.setShader3f("camPos", &camPos[0]);
	renderer.setShader4f("color", &m_rgba.x);

	LightUtils::UploadShaderInfo(renderer);
	
	for(std::size_t i = 0; i < getModelData()->model->getNumberOfMeshes(); ++i)
	{
		renderer.setVertexBuffer(getModelData()->vertBufferIDs.at(i));
		
		if(getModelData()->indexBufferIDs.size() < i)
		{
			renderer.setIndexBuffer(getModelData()->indexBufferIDs.at(i));
		}
		
		renderer.apply();
		renderer.drawArray(CaffApp::Primitive::TRIANGLES, 0, getModelData()->model->getMesh(i).getGLFaces());
	}


}