Esempio n. 1
0
static btTransform get_transform(ErlNifEnv *env, const ERL_NIF_TERM arg) {
    double x,y,z,w;
    const ERL_NIF_TERM *tuple;
    int arity;
    enif_get_tuple(env, arg, &arity, &tuple);
    return btTransform(get_quaternion(env,tuple[0]),get_vector(env,tuple[1]));
}
Esempio n. 2
0
glm::mat4 Position::get_pos_mat() {
	if (!updated){
		if (parent_pos) {
			return parent_pos->get_pos_mat()*pos_matrix;
		}else{
			return pos_matrix;
		}
	}
	pos_matrix = glm::mat4(1.0f);


	if(pos!=glm::vec3(0,0,0)){
		pos_matrix *= glm::translate(pos);
	}

	if(rotated_x||rotated_y||rotated_z){
		glm::quat total;
		if (rotated_x) {
			quat_x = get_quaternion(glm::vec3(1, 0, 0), r.x);
			rotated_x=false;
		}
		if (rotated_y) {
			quat_y = get_quaternion(glm::vec3(0, 1, 0), r.y);
			//glm::mat4 rmat = glm::rotate(r.y, glm::vec3(0, 1, 0));
			rotated_y=false;
		}
		if (rotated_z) {
			quat_z = get_quaternion(glm::vec3(0, 0, 1), r.z);
			rotated_z=false;
		}
		r_mat=glm::mat4_cast(glm::cross(glm::cross(quat_y,quat_x),quat_z));
	}
	if(r.x!=0.0||r.y!=0.0||r.z!=0.0){
		pos_matrix *= r_mat;
	}
	if(scale!=glm::vec3(1,1,1)){
		pos_matrix *=glm::scale(scale);
	}

	updated = false;
	if (parent_pos) {
		return parent_pos->get_pos_mat()*pos_matrix;
	}else{
		return pos_matrix;
	}
}
Esempio n. 3
0
glm::mat4 Position::get_rotate_mat(){
	if(rotated_x||rotated_y||rotated_z){
		glm::quat total;
		if (rotated_x) {
			quat_x = get_quaternion(glm::vec3(1, 0, 0), r.x);
			rotated_x=false;
		}
		if (rotated_y) {
			quat_y = get_quaternion(glm::vec3(0, 1, 0), r.y);
			//glm::mat4 rmat = glm::rotate(r.y, glm::vec3(0, 1, 0));
			rotated_y=false;
		}
		if (rotated_z) {
			quat_z = get_quaternion(glm::vec3(0, 0, 1), r.z);
			rotated_z=false;
		}
		r_mat=glm::mat4_cast(glm::cross(glm::cross(quat_y,quat_x),quat_z));
	}
	return r_mat;
}
Esempio n. 4
0
glm::mat4 Position::gen_rotate_mat(glm::vec3 axis,float angle){
	return glm::mat4_cast(get_quaternion(axis,angle));
}