void DiracAntiSpinor::SetP4(const Vector4<double> &__p4, const double &__mass){ Matrix <complex<double> > sigP(2,2); Matrix <complex<double> > chi(2,1); PauliSigma sigma; _p4 = __p4; _mass = __mass; complex<double> norm = sqrt(__p4.E() + __mass); complex<double> epm = __p4.E() + __mass; sigP = sigma[1]*__p4.X() + sigma[2]*__p4.Y() + sigma[3]*__p4.Z(); // spin up chi(0,0) = 0.; chi(1,0) = 1.; _spinors[1](2,0) = chi(0,0)*norm; _spinors[1](3,0) = chi(1,0)*norm; _spinors[1](0,0) = ((sigP*chi)(0,0))*norm/epm; _spinors[1](1,0) = ((sigP*chi)(1,0))*norm/epm; // spin down chi(0,0) = 1.; chi(1,0) = 0.; _spinors[0](2,0) = chi(0,0)*norm; _spinors[0](3,0) = chi(1,0)*norm; _spinors[0](0,0) = ((sigP*chi)(0,0))*norm/epm; _spinors[0](1,0) = ((sigP*chi)(1,0))*norm/epm; this->_SetProjector(); }
Point4::type Point4::DotProduct(Vector4 const& v) const { return (m_elements[0] * v.X()) + (m_elements[1] * v.Y()) + (m_elements[2] * v.Z()) + (m_elements[3] * v.W()); }
void Shader::SetVector4(std::string name, Vector4 value) { int uloc = SIG_FindUniform(name); if (uloc != -1) { glUniform4fARB(uloc, value.X(), value.Y(), value.Z(), value.W()); } else { SIG_LOG("Could not find uniform \"" << name << "\""); } }
void LightRenderNode::renderInternal() { Quaternion* orientation; Vector3 unitVector; Vector3 rotated; Vector4 vLightPosition; Vector4 vLightDirection; Vector3* pos; GLuint lightNum = GL_LIGHT0 + getAndIncLightNumber(); switch(lightType) { case LIGHT_DIRECTIONAL: orientation = owner->getTransform()->getOrientation(); unitVector = Vector3(0.0f,0.0f,1.0f); rotated = orientation->Rotate(unitVector); vLightDirection.X() = -rotated.X(); vLightDirection.Y() = -rotated.Y(); vLightDirection.Z() = -rotated.Z(); vLightDirection.W() = 0.0f; glEnable(lightNum); glLightfv(lightNum, GL_POSITION, (float*)&vLightDirection); break; case LIGHT_POINT: pos = owner->getTransform()->getPosition(); vLightPosition.X() = pos->X(); vLightPosition.Y() = pos->Y(); vLightPosition.Z() = pos->Z(); vLightPosition.W() = 1.0f; glEnable(lightNum); glLightfv(lightNum, GL_POSITION, (float*)&vLightPosition); break; case LIGHT_SPOT: pos = owner->getTransform()->getPosition(); orientation = owner->getTransform()->getOrientation(); unitVector = Vector3(0.0f,0.0f,1.0f); rotated = orientation->Rotate(unitVector); vLightPosition.X() = pos->X(); vLightPosition.Y() = pos->Y(); vLightPosition.Z() = pos->Z(); vLightPosition.W() = 1.0f; orientation = owner->getTransform()->getOrientation(); unitVector = Vector3(0.0f,0.0f,1.0f); rotated = orientation->Rotate(unitVector); vLightDirection.X() = rotated.X(); vLightDirection.Y() = rotated.Y(); vLightDirection.Z() = rotated.Z(); vLightDirection.W() = 0.0f; glEnable(lightNum); glLightf(lightNum, GL_SPOT_CUTOFF, 45.0); glLightfv(lightNum, GL_POSITION, (float*)&vLightPosition); glLightfv(lightNum, GL_SPOT_DIRECTION, (float*)&vLightDirection); break; } glLightfv(lightNum, GL_AMBIENT, (float*)&ambient); glLightfv(lightNum, GL_DIFFUSE, (float*)&diffuse); glLightfv(lightNum, GL_SPECULAR, (float*)&specular); }
Quaternion::Quaternion(Vector4 const& vector, float angle) : m_elements { Cos(angle / 2.0f), vector.X() * Sin(angle / 2.0f), vector.Y() * Sin(angle / 2.0f), vector.Z() * Sin(angle / 2.0f) } { }