[Orxonox-commit 5114] r9779 - in code/branches/radarDreiD: data/levels src/libraries/util src/modules/overlays/hud
wroennin at orxonox.net
wroennin at orxonox.net
Mon Nov 11 16:13:02 CET 2013
Author: wroennin
Date: 2013-11-11 16:13:02 +0100 (Mon, 11 Nov 2013)
New Revision: 9779
Modified:
code/branches/radarDreiD/data/levels/radar3D_test.oxw
code/branches/radarDreiD/src/libraries/util/Math.cc
code/branches/radarDreiD/src/modules/overlays/hud/HUDRadar.cc
Log:
Math.cc: updated (new comments, transformmatrix changed to adapt to the right axis directions
Modified: code/branches/radarDreiD/data/levels/radar3D_test.oxw
===================================================================
--- code/branches/radarDreiD/data/levels/radar3D_test.oxw 2013-11-11 15:07:12 UTC (rev 9778)
+++ code/branches/radarDreiD/data/levels/radar3D_test.oxw 2013-11-11 15:13:02 UTC (rev 9779)
@@ -17,7 +17,9 @@
include("templates/spaceshipEscort.oxt")
?>
-<Level>
+<Level
+ gametype = "Mission"
+>
<templates>
<Template link=lodtemplate_default />
</templates>
@@ -29,11 +31,11 @@
>
<Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
- <SpawnPoint team=0 position="-200,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipescort />
+ <SpawnPoint team=0 position="-500,0,0" lookat="-500,0,1" spawnclass=SpaceShip pawndesign=spaceshipescort />
- <Pawn team=1 health=30 position="0,0,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box radarname = "Box 1" >
+ <Pawn team=0 health=30 position="0,0,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box radarname = "0,0,0" >
<attached>
<Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
</attached>
@@ -42,7 +44,7 @@
</collisionShapes>
</Pawn>
- <Pawn team=1 health=30 position="0,200,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box radarname = "Box 2" >
+ <Pawn team=1 health=30 position="0,1000,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box radarname = "0,1000,0" >
<attached>
<Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
</attached>
@@ -52,7 +54,7 @@
</Pawn>
- <Pawn team=1 health=30 position="0,0,200" direction="0,-1,0" collisionType=dynamic mass=100000 name=box radarname = "Box 3" >
+ <Pawn team=2 health=30 position="0,0,1000" direction="0,-1,0" collisionType=dynamic mass=100000 name=box radarname = "0,0,1000" >
<attached>
<Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
</attached>
@@ -61,7 +63,7 @@
</collisionShapes>
</Pawn>
- <Pawn team=1 health=30 position="200,0,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box radarname = "Box 4" >
+ <Pawn team=3 health=30 position="1000,0,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box radarname = "1000,0,0" >
<attached>
<Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
</attached>
Modified: code/branches/radarDreiD/src/libraries/util/Math.cc
===================================================================
--- code/branches/radarDreiD/src/libraries/util/Math.cc 2013-11-11 15:07:12 UTC (rev 9778)
+++ code/branches/radarDreiD/src/libraries/util/Math.cc 2013-11-11 15:13:02 UTC (rev 9779)
@@ -206,16 +206,26 @@
*/
orxonox::Vector2 get3DProjection(const orxonox::Vector3& myposition, const orxonox::Vector3& mydirection, const orxonox::Vector3& myorthonormal, const orxonox::Vector3& otherposition, const float mapangle, const float detectionlimit)
{
- //
+ // Orxonox Vectors: x_direction you are looking, y_direction points up, z_direction points to the right
orxonox::Vector3 distance = otherposition - myposition;
- // new coordinate system base y_coordinate
- orxonox::Vector3 myside = -(mydirection.crossProduct(myorthonormal));
+ // new coordinate system: x_axsis: mydirection (points front)
+ // y_axsis: myorthonormal (points up)
+ // z_axsis: myside (points right)
+ orxonox::Vector3 myside = mydirection.crossProduct(myorthonormal);
+ orxout() << "mydirection " << mydirection << endl;
+ orxout() << "mydirection.lenght " << mydirection.length() << endl;
+ orxout() << "myorthonormal " << myorthonormal << endl;
+ orxout() << "myorthonormal.lenght " << myorthonormal.length() << endl;
+ orxout() << "myside " << myside << endl;
+ orxout() << "myside.lenght " << myside.length() << endl;
+ distance = 5 * distance / detectionlimit; // shrink vector on map
+
// inverse of the transform matrix
- float determinant = +mydirection.x * (myside.y*myorthonormal.z - myorthonormal.y*myside.z)
- -mydirection.y * (myside.x*myorthonormal.z - myside.z*myorthonormal.x)
- +mydirection.z * (myside.x*myorthonormal.y - myside.y*myorthonormal.x);
+ float determinant = +mydirection.x * (myorthonormal.y*myside.z - myside.y*myorthonormal.z)
+ -mydirection.y * (myorthonormal.x*myside.z - myorthonormal.z*myside.x)
+ +mydirection.z * (myorthonormal.x*myside.y - myorthonormal.y*myside.x);
float invdet = 1/determinant;
// transform matrix
@@ -223,31 +233,34 @@
orxonox::Vector3 yinvtransform;
orxonox::Vector3 zinvtransform;
- xinvtransform.x = (myside.y * myorthonormal.z - myorthonormal.y * myside.z )*invdet;
- xinvtransform.y = (mydirection.z * myorthonormal.y - mydirection.y * myorthonormal.z)*invdet;
- xinvtransform.z = (mydirection.y * myside.z - mydirection.z * myside.y )*invdet;
- yinvtransform.x = (myside.z * myorthonormal.x - myside.x * myorthonormal.z)*invdet;
- yinvtransform.y = (mydirection.x * myorthonormal.z - mydirection.z * myorthonormal.x)*invdet;
- yinvtransform.z = (myside.x * mydirection.z - mydirection.x * myside.z )*invdet;
- zinvtransform.x = (myside.x * myorthonormal.y - myorthonormal.x * myside.y )*invdet;
- zinvtransform.y = (myorthonormal.x * mydirection.y - mydirection.x * myorthonormal.y)*invdet;
- zinvtransform.z = (mydirection.x * myside.y - myside.x * mydirection.y )*invdet;
+ xinvtransform.x = (myorthonormal.y * myside.z - myside.y * myorthonormal.z)*invdet;
+ xinvtransform.y = (mydirection.z * myside.y - mydirection.y * myside.z )*invdet;
+ xinvtransform.z = (mydirection.y * myorthonormal.z - mydirection.z * myorthonormal.y)*invdet;
+ yinvtransform.x = (myorthonormal.z * myside.x - myorthonormal.x * myside.z )*invdet;
+ yinvtransform.y = (mydirection.x * myside.z - mydirection.z * myside.x )*invdet;
+ yinvtransform.z = (myorthonormal.x * mydirection.z - mydirection.x * myorthonormal.z)*invdet;
+ zinvtransform.x = (myorthonormal.x * myside.y - myside.x * myorthonormal.y)*invdet;
+ zinvtransform.y = (myside.x * mydirection.y - mydirection.x * myside.y )*invdet;
+ zinvtransform.z = (mydirection.x * myorthonormal.y - myorthonormal.x * mydirection.y )*invdet;
// coordinate transformation
- distance.x = (xinvtransform.x + yinvtransform.x + zinvtransform.x) * distance.x;
- distance.y = (xinvtransform.y + yinvtransform.y + zinvtransform.y) * distance.y;
- distance.z = (xinvtransform.z + yinvtransform.z + zinvtransform.z) * distance.z;
+ distance.x = xinvtransform.x * distance.x + yinvtransform.x * distance.y + zinvtransform.x * distance.z;
+ distance.y = xinvtransform.y * distance.x + yinvtransform.y * distance.y + zinvtransform.y * distance.z;
+ distance.z = xinvtransform.z * distance.x + yinvtransform.z * distance.y + zinvtransform.z * distance.z;
// cap vector for map
//distance.x = clamp<float>(distance.x, -detectionlimit/5, detectionlimit/5);
//distance.y = clamp<float>(distance.y, -detectionlimit/5, detectionlimit/5);
//distance.z = clamp<float>(distance.z, -detectionlimit/5, detectionlimit/5);
//float distancelength = distance.length();
- distance = 5 * distance / detectionlimit;
+
// project vector for the rotated 3DMap on screen
- float xcoordinate = distance.z; // z; cause z direction is to the side
- float ycoordinate = (distance.x*sin(mapangle)+distance.y*cos(mapangle));
+ float xcoordinate = distance.z;
+ float ycoordinate = distance.y;
+
+ //float xcoordinate = distance.z; // z; cause z direction is to the side
+ //float ycoordinate = distance.x*sin(mapangle)+distance.y*cos(mapangle);// -; cause on screen y coordinate points down
return orxonox::Vector2(xcoordinate , ycoordinate);
}
Modified: code/branches/radarDreiD/src/modules/overlays/hud/HUDRadar.cc
===================================================================
--- code/branches/radarDreiD/src/modules/overlays/hud/HUDRadar.cc 2013-11-11 15:07:12 UTC (rev 9778)
+++ code/branches/radarDreiD/src/modules/overlays/hud/HUDRadar.cc 2013-11-11 15:13:02 UTC (rev 9779)
@@ -172,6 +172,7 @@
Vector2 coord = get3DProjection(this->owner_->getPosition(), this->owner_->getOrientation() * WorldEntity::FRONT, this->owner_->getOrientation() * WorldEntity::UP, wePointer->getWorldPosition(), 0.6435011, detectionLimit_);
coord *= math::pi / 3.5f; // small adjustment to make it fit the texture
it->second->setPosition((1.0f + coord.x - size) * 0.5f, (1.0f - coord.y - size) * 0.5f);
+
if( distance < detectionLimit_ || detectionLimit_ < 0 )
it->second->show();
else
More information about the Orxonox-commit
mailing list