예제 #1
0
TEST(FreeFlyCamera, set_angles){
	FreeFlyCamera FFC;
	float x = M_PI*.25;
	float y = -M_PI*.25;
	FFC.setAngles(x, y);
	EXPECT_NE(glm::vec2(M_PI, 0.f), FFC.getAngles());
	EXPECT_EQ(x, FFC.getAngles().x);
	EXPECT_EQ(y, FFC.getAngles().y);
	EXPECT_EQ(glm::vec3(0.f, 0.f, 0.f), FFC.getPosition());
}
예제 #2
0
TEST(FreeFlyCamera, copy_construction){
	FreeFlyCamera FFC;
	FFC.setCamera(glm::vec3(1.f, .5f, 2.f), M_PI*.25, -M_PI*.25);
	FreeFlyCamera copy = FFC;
	EXPECT_NE(glm::vec3(0.f, 0.f, 0.f), copy.getPosition());
	EXPECT_NE(glm::vec2(M_PI, 0.f), copy.getAngles());
	EXPECT_EQ(glm::vec3(1.f, .5f, 2.f), copy.getPosition());
	EXPECT_EQ(glm::vec2(M_PI*.25, -M_PI*.25), copy.getAngles());
}
예제 #3
0
	void Torch::computeLight(LightsProgram & prog, FreeFlyCamera &ffCam)
	{
		glm::vec4 lightPosTmp = glm::mat4(1.f) * glm::vec4(_position - glm::vec3(0,0.1,0), 1);
		lightPosTmp = ffCam.getViewMatrix() * lightPosTmp;

		glUniform3f(prog.uLightPos_vs, lightPosTmp.r, lightPosTmp.g, lightPosTmp.b);
		glUniform3f(prog.uLightIntensityPoint, _intensity.r, _intensity.g, _intensity.b);

		glUniform3f(prog.uKd, 1, 1, 1);
		glUniform3f(prog.uKs, 1, 1, 1);

	}
예제 #4
0
TEST(FreeFlyCamera, set_camera){
	FreeFlyCamera FFC;
	FFC.setCamera(glm::vec3(1.f, .5f, 2.f), M_PI*.25, -M_PI*.25);
	EXPECT_NE(glm::vec3(0.f, 0.f, 0.f), FFC.getPosition());
	EXPECT_NE(glm::vec2(M_PI, 0.f), FFC.getAngles());
	EXPECT_EQ(glm::vec3(1.f, .5f, 2.f), FFC.getPosition());
	EXPECT_EQ(glm::vec2(M_PI*.25, -M_PI*.25), FFC.getAngles());
}
예제 #5
0
	void Torch::drawBillboard(GeneralProgram & prog, FreeFlyCamera &ffCam)
	{
		glm::vec3 rightVector = glm::vec3(1,0,0);
		// glm::vec3 upVector = glm::vec3(0,1,0);
		glm::vec3 lookAtVector = glm::vec3(0,0,1);

		glm::vec3 posCam = ffCam.getPosition();

		glm::vec3 objToCamProj = posCam - _position;
		objToCamProj[1] = 0;

		objToCamProj = glm::normalize(objToCamProj);

		float angleCosine = glm::dot(objToCamProj, lookAtVector);

		float angle = glm::acos(angleCosine);

		glm::vec3 upAux = glm::cross(objToCamProj, lookAtVector);

		glm::mat4 matrixM = glm::mat4(1.0);

		matrixM = glm::translate(glm::mat4(1.0), _position);

		if ((angleCosine < 0.99990) && (angleCosine > -0.9999))
			matrixM = glm::rotate(matrixM, angle, -upAux);


		glm::vec3 objToCam = posCam - _position;

		objToCam = glm::normalize(objToCam);

		angleCosine = glm::dot(objToCamProj,objToCam);

		angle = glm::acos(angleCosine);

		if ((angleCosine < 0.99990) && (angleCosine > -0.9999))
		{
			if (objToCam[1] < 0)
				matrixM = glm::rotate(matrixM, angle, rightVector);
			else
				matrixM = glm::rotate(matrixM, angle, -rightVector);
		}

		glm::mat4 matrixMV = ffCam.getViewMatrix() * matrixM;

		glm::mat4 matrixP = glm::perspective(glm::radians(70.f), 800.f/600.f, 0.1f, 3000.f);

		//calcul de la matrixViewProjetée
		glm::mat4 matrixMVP = matrixP * matrixMV;

		//calcul de la normal matrix = (MVinverse)Transposée
		glm::mat4 normalMatrix = glm::transpose(glm::inverse(matrixMV));

		glUniformMatrix4fv(prog.uMVMatrix, 1, GL_FALSE,  glm::value_ptr(matrixMV));
		glUniformMatrix4fv(prog.uMVPMatrix, 1, GL_FALSE,  glm::value_ptr(matrixMVP));
		glUniformMatrix4fv(prog.uNormalMatrix, 1, GL_FALSE,  glm::value_ptr(normalMatrix));

		//bind de la texture
	    glBindTexture(GL_TEXTURE_2D, _texture);
	    glUniform1i(prog.uTexture, 0);

	    //bind du vao
		glBindVertexArray(_vao);
		
		//dessine
		glDrawArrays(GL_TRIANGLES, 0, 6);
		
		//debind du vao
		glBindVertexArray(0);

	    //debind de la texture
	    glBindTexture(GL_TEXTURE_2D, 0);
	}
예제 #6
0
TEST(FreeFlyCamera, rotate_left){
	FreeFlyCamera FFC;
	FFC.rotateLeft(.25f);
	EXPECT_LT(M_PI, FFC.getAngles().x);
}
예제 #7
0
TEST(FreeFlyCamera, construction){
	FreeFlyCamera FFC;
	EXPECT_EQ(glm::vec3(0.f, 0.f, 0.f), FFC.getPosition());
	EXPECT_EQ(glm::vec2(M_PI, 0.f), FFC.getAngles());
}
예제 #8
0
TEST(FreeFlyCamera, rotate_up){
	FreeFlyCamera FFC;
	FFC.rotateUp(.25f);
	EXPECT_LT(0.f, FFC.getAngles().y);
}
예제 #9
0
TEST(FreeFlyCamera, move_left){
	FreeFlyCamera FFC;
	FFC.moveLeft(.5f);
	EXPECT_NE(glm::vec3(0.f, 0.f, 0.f), FFC.getPosition());
	EXPECT_LT(FFC.getPosition().x, 0.f);
}
예제 #10
0
TEST(FreeFlyCamera, move_front){
	FreeFlyCamera FFC;
	FFC.moveFront(.5f);
	EXPECT_NE(glm::vec3(0.f, 0.f, 0.f), FFC.getPosition());
	EXPECT_LT(FFC.getPosition().z, 0.f);
}
예제 #11
0
TEST(FreeFlyCamera, set_position){
	FreeFlyCamera FFC;
	FFC.setPosition(glm::vec3(1.f, .5f, 2.f));
	EXPECT_NE(glm::vec3(0.f, 0.f, 0.f), FFC.getPosition());
	EXPECT_EQ(glm::vec3(1.f, .5f, 2.f), FFC.getPosition());
}