void CameraHandler::ProcessCameraData(FbxCamera* pCamera, CameraExporter* outCamera)
{
	BRFImporter::CameraHeader cameras;

	memcpy(cameras.camName, pCamera->GetName(), sizeof(char) * 256);

	GetCamPos(pCamera, cameras.position);
	GetCamRotation(pCamera->GetNode(), cameras.rotation);

	outCamera->cameras->push_back(cameras);
}
示例#2
0
PathLineInfo *GetPlaceInfo(PathLineInfo *info)
{
	CPlaceable *entity = NULL;
	RadarBlipIII *bestBlip = NULL;
	CVector blipPos = { 0.0f, 0.0f, 0.0f };
	float distance = 9999800001.99f;
	float newDistance = 0.0f;
	unsigned int color = 0;
	int point = 0;

	for (RadarBlipIII *blip = gRadarBlips3; blip != &gRadarBlips3[32]; blip++)
	{
		if (blip->m_bActive && blip->m_wBlipSprite == gCurrentGpsMode)
		{
			if (blip->m_dwBlipType > 0 && blip->m_dwBlipType < 4)
			{
				switch (blip->m_dwBlipType)
				{
				case BLIP_CAR: // 1
					entity = VehicleGetAt(*gVehiclePool, blip->m_dwEntityHandle);
					break;
				case BLIP_PED: // 2
					entity = PedGetAt(*gPedPool, blip->m_dwEntityHandle);
					if (entity && IS_PED_IN_CAR(entity))
						entity = GET_PED_CAR(entity);
					break;
				case BLIP_OBJECT: // 3
					entity = ObjectGetAt(*gObjectPool, blip->m_dwEntityHandle);
				}
				if (entity)
				{
					blipPos.x = entity->m_sCoords.m_sMatrix.pos.x;
					blipPos.y = entity->m_sCoords.m_sMatrix.pos.y;
					blipPos.z = entity->m_sCoords.m_sMatrix.pos.z;
				}
				else continue;
			}
			else
			{
				blipPos.x = blip->m_vecCurPos.x;
				blipPos.y = blip->m_vecCurPos.y;
				blipPos.z = blip->m_vecCurPos.z;
			}
			newDistance = GetSquaredDistanceBetweenPoints(blipPos, *GetCamPos());
			if (newDistance < distance)
			{
				distance = newDistance;
				gBlipBestPos.x = blipPos.x;
				gBlipBestPos.y = blipPos.y;
				gBlipBestPos.z = blipPos.z;
				bestBlip = blip;
			}
		}
	}
	if (bestBlip)
	{
		color = GetRadarTraceColour(bestBlip->m_dwBlipColour, bestBlip->m_bBlipBrightness);
		BYTEn(info->color, 0) = BYTEn(color, 3);
		BYTEn(info->color, 1) = BYTEn(color, 2);
		BYTEn(info->color, 2) = BYTEn(color, 1);
		BYTEn(info->color, 3) = 255;
		info->targetPoint = &gBlipBestPos;
	}
	else
	{
		info->targetPoint = NULL;
		info->color = 0;
	}
	return info;
}
示例#3
0
void RenderPipe_DLPre_opengl::renderByProgram( int type, const RenderEntityList& listToRender )
{
	glUseProgram(m_pipeProgramID[type]);
	glMatrixMode(GL_PROJECTION);
	glLoadMatrixf( (float *) &(GetProjectionMatrix()));
	CMatrix view_matrix = GetViewMatrix();

	Light dirLight = GetLightManager().getDirLight();
	CVector camPos = GetCamPos();
	GLint reg = glGetUniformLocation(m_pipeProgramID[type], "u_light");
	if (reg >= 0)
		glUniform4fv(reg, 4, (float *)&dirLight.dirLightData);

	reg = glGetUniformLocation(m_pipeProgramID[type], "u_textureSize");
	if (reg >= 0)
		glUniform4fv(reg, 1, (float *)&m_vTextureSize);

	reg = glGetUniformLocation(m_pipeProgramID[type], "u_camPos");
	if (reg >= 0)
		glUniform4fv(reg, 1, (float *)&camPos);

	reg = glGetUniformLocation(m_pipeProgramID[type], "u_shadowSampler");
	if (reg >= 0)
		glUniform1i(reg, SHADOW_MAP_CHANNEL);

	reg = glGetUniformLocation(m_pipeProgramID[type], "u_diffuseSampler");
	if (reg >= 0)
		glUniform1i(reg, DIFF0_MAP_CHANNEL);

	reg = glGetUniformLocation(m_pipeProgramID[type], "u_specSampler");
	if (reg >= 0)
		glUniform1i(reg, SPEC_MAP_CHANNEL);

	reg = glGetUniformLocation(m_pipeProgramID[type], "u_normalSampler");
	if (reg >= 0)
		glUniform1i(reg, NORMAL_MAP_CHANNEL);
	
	reg = glGetUniformLocation(m_pipeProgramID[type], "u_texoffset");
	if (reg >= 0)
		glUniform4fv(reg, PCF_SAMPLES, (float *)m_PCFOffset);

	GLint regIsShadowed = glGetUniformLocation(m_pipeProgramID[type], "u_isShadowed");
	GLint regCanBeLighted = glGetUniformLocation(m_pipeProgramID[type], "u_canBeLighted");
	GLint regDiffScale = glGetUniformLocation(m_pipeProgramID[type], "u_diffScale");

	for (RenderEntityList::const_iterator it=listToRender.begin(); it!=listToRender.end(); ++it)
	{
		if (regIsShadowed >= 0)
			glUniform1i(regIsShadowed, (*it)->canBeShadowed);

		if (regCanBeLighted >= 0)
			glUniform1i(regCanBeLighted, (*it)->canBeLighted);

		CMatrix worldMat = (*it)->getWorldMat();

		CMatrix light_wvp_matrix = worldMat * m_light_vmat * m_zbias * m_light_pmat * m_remapmat;

		glMatrixMode(GL_TEXTURE); 
		glActiveTexture(GL_TEXTURE0_ARB);
		glLoadMatrixf( (float *) &light_wvp_matrix );

		glActiveTexture(GL_TEXTURE1_ARB);
		glLoadMatrixf( (float *) &worldMat);
		glActiveTexture(GL_TEXTURE0_ARB);


		glMatrixMode(GL_MODELVIEW);
		CMatrix worldlMatView = worldMat * view_matrix;
		glLoadMatrixf( (float *) &worldlMatView);

		if (regDiffScale >= 0)
			glUniform1f(regDiffScale, (*it)->getDiffuseMapScale(0));
		(*it)->render();
	}
glUseProgram(0);


	
}