Beispiel #1
0
void cameraRecalculateMatrices(Camera* camera)
{
    camera->perspectiveMatrix = projMatrix(camera->FOV, camera->aspectRatio, camera->nearPlane, camera->farPlane);
    Vec3 negCamPos;
    vec3Scale(&negCamPos, &camera->position, -1.0f);
    Mat4 translation = translate(negCamPos);
    Quaternion q = quaternion(-camera->rotation.w,camera->rotation.x,camera->rotation.y,camera->rotation.z);
    Mat4 rotato;
    mat4FromQuaternion(&rotato, &q);
    mat4Mul(&camera->transformMatrix, &rotato, &translation);
}
Beispiel #2
0
//===========================================================================
// Takes Ray and Intersect data and calculates the colour of that light ray
color3f Scene::getRayColor(rayData& ray, polygon* closestPoly, point3* closestPoint, float u, float v)
{
	color3f pixCol(0.f, 0.f, 0.f);
	PROFILE_BEGIN(PROFILE_LIGHT)
		if (closestPoly)
		{
#if LIGHTING_ENABLE
			color3f tmpColor;
			vec3Cpy(&tmpColor, &renderLight.color); 
			vec3 displacement;
			vec3Sub(&displacement, &renderLight.position, closestPoint);
			float scale = 1.f;
			{
#if LIGHTING_DISTANCE_BASED		
				scale = 1/(vec3LenSq(&displacement)+1.f);
#endif // LIGHTING_DISTANCE_BASED
#if LIGHTING_NORMAL_BASED
				scale *= vec3Dot(&closestPoly->normal, &displacement);
#endif // LIGHTING_NORMAL_BASED
#if LIGHTING_SPECULAR_ENABLED
				vec3 reflection;
				vec3Reflect(&reflection, &displacement, &closestPoly->normal);
				vec3Unit(&reflection);
				vec3Unit(closestPoint);
				float specular = vec3Dot(&reflection, closestPoint);
				specular = (-specular * SPECULAR_BRIGHTNESS) - SPECULAR_FALLOFF;
				specular = fmax(0.f, specular);
				scale += specular;
#endif // LIGHTING_SPECULAR_ENABLED
			}
#if LIGHTING_AMBIENT_ENABLED
			scale += AMBIENT_BRIGHTNESS;
#endif // LIGHTING_AMBIENT_ENABLED
			vec3Scale(&tmpColor, scale);
//			color3f* pColor = &closestPoly->color;
			color3f texColor;
			texture->Sample(u, v, texColor);
			tmpColor.x *= texColor.x;
			tmpColor.y *= texColor.y;
			tmpColor.z *= texColor.z;
			colorFloatTrunc(&tmpColor);
			pixCol = tmpColor;
#else
			pixCol = closestPoly->color;
#endif
		}
	PROFILE_END(PROFILE_LIGHT)
		return pixCol;
}
Beispiel #3
0
	vec3 vec3::operator / (const float &rhs) const
	{
		vec3 vResult;
		vec3Scale(vResult, *this, 1.f/rhs);
		return vResult;
	}