Eigen::Vector3f quaternionMutltiply(Eigen::Vector4f quat, Eigen::Vector3f vec){ float num = quat.x() * 2.0f; float num2 = quat.y() * 2.0f; float num3 = quat.z() * 2.0f; float num4 = quat.x()* num; float num5 = quat.y() * num2; float num6 = quat.z() * num3; float num7 = quat.x() * num2; float num8 = quat.x() * num3; float num9 = quat.y ()* num3; float num10 = quat.w() * num; float num11 = quat.w ()* num2; float num12 = quat.w ()* num3; Eigen::Vector3f result; result.x() = (1.0f - (num5 + num6)) * vec.x ()+ (num7 - num12) * vec.y() + (num8 + num11) * vec.z(); result.y() = (num7 + num12) * vec.x() + (1.0f - (num4 + num6)) * vec.y() + (num9 - num10) * vec.z(); result.z() = (num8 - num11) * vec.x() + (num9 + num10) * vec.y() + (1.0f - (num4 + num5)) * vec.z(); return result; }
void VertexProcessor::parameter(vp::Parameter param, const Eigen::Vector4f& v) { parameter(param, v.x(), v.y(), v.z(), v.w()); }
void glsl_program::set_uniform(unsigned loc, const Eigen::Vector4f& value) const { if (used_program != this) throw runtime_error("glsl_program::set_uniform, program not bound!"); glUniform4f(loc, value.x(), value.y(), value.z(), value.w()); }