Heightmap::Heightmap(size_t width, size_t height, vec3 position, vec3 u, vec3 v,float elevation, unsigned char* data) { Heightmap::data = data; Heightmap::width = width; Heightmap::height = height; Heightmap::u = u; Heightmap::v = v; Heightmap::position = position; max_elevation = 0; Heightmap::elevation = elevation; Heightmap::texture = new Texture(width,height,data); MathHelper mh = MathHelper(); max_elevation = 0; for(unsigned int x = 0; x < width; x++) { for(unsigned int y = 0; y < height; y++) { float m = mh.lengthOfVector(texture->getColorAt(vec2(x,y))); max_elevation < m ? max_elevation = m : max_elevation; } } cout << "max elevation " << max_elevation << endl; bb = OBB(vec3(0,0,0),u,v,vec3(0,elevation,0)); }
void PhysicsManager::SetPlayerCollisions(Player* p_p1, Player* p_p2, float p_p1MagnitudeMultiplier, float p_p2MagnitudeMultiplier) { MathHelper t_mHelp = MathHelper(); //hämtar positioner från krockoffren XMFLOAT3 t_p1Pos = p_p1->GetPos(); XMFLOAT3 t_p2Pos = p_p2->GetPos(); XMFLOAT3 t_collisionVec; //skapar en projiceringsvector som är vectorn mellan de 2 krockoffren KANSKE INTE SKA VARA NORMALISERAD t_collisionVec = t_mHelp.Normalize(t_mHelp.VecSubVec(t_p1Pos, t_p2Pos)); //gör Projiceringen XMFLOAT3 t_p1Projection = t_mHelp.Projection(p_p1->GetDirection(),t_collisionVec); XMFLOAT3 t_p2Projection = t_mHelp.Projection(p_p2->GetDirection(),t_collisionVec); //vänder på ena vectorn, ena offret ska åka tvärt om mot vad den andra gör t_p2Projection.x = -t_p2Projection.x; t_p2Projection.y = -t_p2Projection.y; t_p2Projection.z = -t_p2Projection.z; //kanskeinte ska göras //skapar ett värde över hur "stor" kollisionen är //float t_magnitude = t_mHelp.Abs(t_mHelp.VecSubVec(t_p1Projection, t_p2Projection)); //Skapar 2 vectorer från projiceringsvectorerna gånger hur stark krocken var //XMFLOAT3 t_p1Magnitude = XMFLOAT3 (t_mHelp.FloatMultiVec(t_magnitude* p_p1MagnitudeMultiplier, t_mHelp.VecSubVec(t_p1Pos, t_p2Pos))); //kanske add om jag tar bort att jag vänder ^ //XMFLOAT3 t_p2Magnitude = XMFLOAT3 (t_mHelp.FloatMultiVec(t_magnitude* p_p2MagnitudeMultiplier, t_mHelp.VecSubVec(t_p2Pos, t_p1Pos))); //Här startar uppdelningen av magnitudevektorerna till angle och speed (playerradius & Playerdirection ) ///////Här börjar projicering på playersens dirvectorer! XMFLOAT3 t_p1Direction = p_p1->GetUnmodifiedTargetVector(); XMFLOAT3 t_p2Direction = p_p2->GetUnmodifiedTargetVector(); //Klar projecering av kraftvektor på p1s direction.. Den här ska översättas till m_speed XMFLOAT3 t_p1DirectionProjection = t_mHelp.Projection(t_p1Projection, t_p1Direction); //HÄR ÄR TWEEEEEEEKZZZZ //p_p1->SetSpeed( t_mHelp.DotProduct(t_p1DirectionProjection, t_p1DirectionProjection)); //Klar Projecering av kraftvektor på p2s direction samma som för p1 ^^^^ där uppe XMFLOAT3 t_p2DirectionProjection = t_mHelp.Projection(t_p2Projection,t_p2Direction); //TWEEEEEKZZZZZZ //p_p2->SetSpeed( t_mHelp.DotProduct(t_p2DirectionProjection, t_p2DirectionProjection)); //////Projecering på Radiusvectorn!!!!! används för angle påplusning XMFLOAT3 t_p1Radius = p_p1->GetRadiusVector(); XMFLOAT3 t_p2Radius = p_p2->GetRadiusVector(); //Klar Projecering av Kraftvektorn på p1s Radius, ska översättas till m_angle XMFLOAT3 t_p1RadiusProjection = t_mHelp.Projection(t_p1Projection, t_p1Radius); XMFLOAT3 t_p2RadiusProjection = t_mHelp.Projection(t_p2Projection, t_p2Radius); float t_p1CheckAngle = fmod(p_p1->GetAngle(), 2*3.1415); float t_p2CheckAngle = fmod(p_p2->GetAngle(), 2*3.1415); float t_p1AngleDirection = t_p1CheckAngle - t_p2CheckAngle; float t_p2AngleDirection = t_p2CheckAngle - t_p1CheckAngle; t_p1AngleDirection /= abs(t_p1AngleDirection); t_p2AngleDirection /= abs(t_p2AngleDirection); float t_p1Angle = t_mHelp.Abs(t_p1RadiusProjection); float t_p2Angle = t_mHelp.Abs(t_p2RadiusProjection); //p_p1->StartCollisionAftermath(t_p1AngleDirection*t_p1Angle); //p_p2->StartCollisionAftermath(t_p2AngleDirection*t_p2Angle); // p_p1->StartCollisionAftermath(t_p1AngleDirection*t_p2Angle,1); //p_p2->StartCollisionAftermath(t_p2AngleDirection*t_p1Angle,1); p_p1->AngleMoveBack(); p_p2->AngleMoveBack(); }