Revision: 7184
http://playerstage.svn.sourceforge.net/playerstage/?rev=7184&view=rev
Author: rtv
Date: 2008-12-02 01:45:44 +0000 (Tue, 02 Dec 2008)
Log Message:
-----------
geometry & graphics fixes. added normalization of blocks to fit inside model
geometry
Modified Paths:
--------------
code/stage/trunk/libstage/block.cc
code/stage/trunk/libstage/blockgroup.cc
code/stage/trunk/libstage/canvas.cc
code/stage/trunk/libstage/gl.cc
code/stage/trunk/libstage/model.cc
code/stage/trunk/libstage/model_position.cc
code/stage/trunk/libstage/stage.hh
code/stage/trunk/libstage/world.cc
code/stage/trunk/worlds/simple.world
code/stage/trunk/worlds/walle.inc
Modified: code/stage/trunk/libstage/block.cc
===================================================================
--- code/stage/trunk/libstage/block.cc 2008-12-01 21:30:59 UTC (rev 7183)
+++ code/stage/trunk/libstage/block.cc 2008-12-02 01:45:44 UTC (rev 7184)
@@ -186,9 +186,11 @@
g_ptr_array_set_size( candidate_cells, 0 );
// compute the global location of the first point
- stg_pose_t local( pts[0].x * scale.x,
- pts[0].y * scale.y,
- 0, 0 );
+ stg_pose_t local( (pts[0].x - mod->blockgroup.offset.x) * scale.x ,
+ (pts[0].y -
mod->blockgroup.offset.y) * scale.y,
+ -mod->blockgroup.offset.z,
+ 0 );
+
stg_pose_t first_gpose, last_gpose;
first_gpose = last_gpose = pose_sum( gpose, local );
@@ -199,9 +201,10 @@
// now loop from the the second to the last
for( int p=1; p<pt_count; p++ )
{
- stg_pose_t local( pts[p].x * scale.x,
- pts[p].y *
scale.y,
- 0, 0 );
+ stg_pose_t local( (pts[p].x - mod->blockgroup.offset.x) *
scale.x ,
+ (pts[p].y -
mod->blockgroup.offset.y) * scale.y,
+
-mod->blockgroup.offset.z,
+ 0 );
stg_pose_t gpose2 = pose_sum( gpose, local );
@@ -325,6 +328,8 @@
color = stg_lookup_color( colorstr );
inherit_color = false;
}
+ else
+ inherit_color = true;
}
Modified: code/stage/trunk/libstage/blockgroup.cc
===================================================================
--- code/stage/trunk/libstage/blockgroup.cc 2008-12-01 21:30:59 UTC (rev
7183)
+++ code/stage/trunk/libstage/blockgroup.cc 2008-12-02 01:45:44 UTC (rev
7184)
@@ -91,9 +91,17 @@
size.z = MAX( block->local_z.max, size.z );
}
- // store these bounds for scaling purposes
+ // store these bounds for normalization purposes
size.x = maxx-minx;
size.y = maxy-miny;
+
+ offset.x = minx + size.x/2.0;
+ offset.y = miny + size.y/2.0;
+ offset.z = 0; // todo?
+
+ // normalize blocks
+ // for( GList* it = blocks; itl it=it->next )
+ //((StgBlock*)it->data)->Normalize( size.x, size.y, size.z, offset.x
}
@@ -107,14 +115,36 @@
LISTMETHOD( blocks, StgBlock*, UnMap );
}
-void BlockGroup::DrawSolid()
+void BlockGroup::DrawSolid( const stg_geom_t & geom )
{
+ glPushMatrix();
+
+ gl_pose_shift( geom.pose );
+
+ glScalef( geom.size.x / size.x,
+ geom.size.y / size.y,
+ geom.size.z / size.z );
+
+ glTranslatef( -offset.x, -offset.y, -offset.z );
+
LISTMETHOD( blocks, StgBlock*, DrawSolid );
+
+ glPopMatrix();
}
-void BlockGroup::DrawFootPrint()
+void BlockGroup::DrawFootPrint( const stg_geom_t & geom )
{
+ glPushMatrix();
+
+ glScalef( geom.size.x / size.x,
+ geom.size.y / size.y,
+ geom.size.z / size.z );
+
+ glTranslatef( -offset.x, -offset.y, -offset.z );
+
LISTMETHOD( blocks, StgBlock*, DrawFootPrint);
+
+ glPopMatrix();
}
void BlockGroup::BuildDisplayList( StgModel* mod )
@@ -126,11 +156,17 @@
glNewList( displaylist, GL_COMPILE );
+
stg_geom_t geom = mod->GetGeom();
+
+ gl_pose_shift( geom.pose );
+
glScalef( geom.size.x / size.x,
geom.size.y / size.y,
geom.size.z / size.z );
+ glTranslatef( -offset.x, -offset.y, -offset.z );
+
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(1.0, 1.0);
Modified: code/stage/trunk/libstage/canvas.cc
===================================================================
--- code/stage/trunk/libstage/canvas.cc 2008-12-01 21:30:59 UTC (rev 7183)
+++ code/stage/trunk/libstage/canvas.cc 2008-12-02 01:45:44 UTC (rev 7184)
@@ -176,6 +176,7 @@
current_camera->SetProjection();
current_camera->Draw();
+ glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
glDisable(GL_DITHER);
glDisable(GL_BLEND); // turns off alpha blending, so we read back
// exactly what we write to a pixel
@@ -502,6 +503,9 @@
Fl::remove_timeout(
(Fl_Timeout_Handler)StgCanvas::TimerCallback );
}
+ redraw(); // in case something happened that will
never be
+ // drawn 'cos we cancelled
the timeout
+
break;
case ' ': // space bar
Modified: code/stage/trunk/libstage/gl.cc
===================================================================
--- code/stage/trunk/libstage/gl.cc 2008-12-01 21:30:59 UTC (rev 7183)
+++ code/stage/trunk/libstage/gl.cc 2008-12-02 01:45:44 UTC (rev 7184)
@@ -24,11 +24,8 @@
// TODO - this could be faster, but we don't draw a lot of text
void Stg::gl_draw_string( float x, float y, float z, const char *str )
{
- //const char *c;
glRasterPos3f( x, y, z );
gl_draw(str);
-// for (c=str; *c != '\0'; c++)
-// glutBitmapCharacter( GLUT_BITMAP_HELVETICA_12, *c);
}
void Stg::gl_speech_bubble( float x, float y, float z, const char* str )
Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc 2008-12-01 21:30:59 UTC (rev 7183)
+++ code/stage/trunk/libstage/model.cc 2008-12-02 01:45:44 UTC (rev 7184)
@@ -764,12 +764,12 @@
stg_color_unpack( checkpoint->color, &r, &g, &b, &a );
PushColor( r, g, b, 0.1 );
- blockgroup.DrawFootPrint();
+ blockgroup.DrawFootPrint( geom );
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
PushColor( r/2, g/2, b/2, 0.1 );
- blockgroup.DrawFootPrint();
+ blockgroup.DrawFootPrint( geom );
PopColor();
PopColor();
@@ -880,7 +880,6 @@
void StgModel::DrawBlocks( )
{
- gl_pose_shift( geom.pose );
blockgroup.CallDisplayList( this );
}
@@ -1176,7 +1175,7 @@
PushLocalCoords();
// draw the boxes
- blockgroup.DrawSolid();
+ blockgroup.DrawSolid( geom );
// recursively draw the tree below this model
LISTMETHOD( this->children, StgModel*, DrawPicker );
Modified: code/stage/trunk/libstage/model_position.cc
===================================================================
--- code/stage/trunk/libstage/model_position.cc 2008-12-01 21:30:59 UTC (rev
7183)
+++ code/stage/trunk/libstage/model_position.cc 2008-12-02 01:45:44 UTC (rev
7184)
@@ -568,6 +568,27 @@
gl_pose_shift( est_origin );
PushColor( 1,0,0,1 ); // origin in red
gl_draw_origin( 0.5 );
+
+ glEnable (GL_LINE_STIPPLE);
+ glLineStipple (3, 0xAAAA);
+
+ PushColor( 1,0,0,0.5 );
+ glBegin( GL_LINE_STRIP );
+ glVertex2f( 0,0 );
+ glVertex2f( est_pose.x, 0 );
+ glVertex2f( est_pose.x, est_pose.y );
+ glEnd();
+
+ glDisable(GL_LINE_STIPPLE);
+
+ char label[64];
+ snprintf( label, 64, "x:%.3f", est_pose.x );
+ gl_draw_string( est_pose.x / 2.0, -0.5, 0, label );
+
+ snprintf( label, 64, "y:%.3f", est_pose.y );
+ gl_draw_string( est_pose.x + 0.5 , est_pose.y / 2.0, 0, (const char*)label );
+
+
PopColor();
gl_pose_shift( est_pose );
@@ -585,7 +606,7 @@
PushColor( r, g, b, 0.5 );
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
- blockgroup.DrawFootPrint();
+ blockgroup.DrawFootPrint( geom );
PopColor();
glPopMatrix();
Modified: code/stage/trunk/libstage/stage.hh
===================================================================
--- code/stage/trunk/libstage/stage.hh 2008-12-01 21:30:59 UTC (rev 7183)
+++ code/stage/trunk/libstage/stage.hh 2008-12-02 01:45:44 UTC (rev 7184)
@@ -1182,7 +1182,8 @@
GList* blocks;
uint32_t count;
stg_size_t size;
-
+ stg_point3_t offset;
+
BlockGroup();
~BlockGroup();
@@ -1198,11 +1199,14 @@
StgModel* TestCollision();
void SwitchToTestedCells();
- void Map();
+ void Map();
void UnMap();
-
- void DrawSolid(); // draw the block in OpenGL as a solid single color
- void DrawFootPrint(); // draw the projection of the block onto the z=0
plane
+
+ void DrawSolid( const stg_geom_t &geom); // draw the block in OpenGL
as a solid single color
+ void DrawFootPrint( const stg_geom_t &geom); // draw the
+
// projection of the
+
// block onto the z=0
+
// plane
void LoadBitmap( StgModel* mod, const char* bitmapfile, Worldfile *wf
);
void LoadBlock( StgModel* mod, Worldfile* wf, int entity );
Modified: code/stage/trunk/libstage/world.cc
===================================================================
--- code/stage/trunk/libstage/world.cc 2008-12-01 21:30:59 UTC (rev 7183)
+++ code/stage/trunk/libstage/world.cc 2008-12-02 01:45:44 UTC (rev 7184)
@@ -46,7 +46,6 @@
#include <limits.h>
#include <libgen.h> // for dirname(3)
#include "stage_internal.hh"
-//#include "region.hh"
#include "file_manager.hh"
// static data members
Modified: code/stage/trunk/worlds/simple.world
===================================================================
--- code/stage/trunk/worlds/simple.world 2008-12-01 21:30:59 UTC (rev
7183)
+++ code/stage/trunk/worlds/simple.world 2008-12-02 01:45:44 UTC (rev
7184)
@@ -8,9 +8,9 @@
include "walle.inc"
interval_sim 100 # simulation timestep in milliseconds
-interval_real 0 # real-time interval between simulation updates in
milliseconds
+interval_real 10 # real-time interval between simulation updates in
milliseconds
-paused 1
+paused 0
resolution 0.02
@@ -40,6 +40,8 @@
# can refer to the robot by this name
name "r0"
+ localization "odom"
+
pose [ 0.892 0.800 0 56.500 ]
sicklaser( samples 180 )
Modified: code/stage/trunk/worlds/walle.inc
===================================================================
--- code/stage/trunk/worlds/walle.inc 2008-12-01 21:30:59 UTC (rev 7183)
+++ code/stage/trunk/worlds/walle.inc 2008-12-02 01:45:44 UTC (rev 7184)
@@ -7,7 +7,7 @@
define walle position
(
- color "yellow"
+ color "gray50"
drive "diff" # Differential steering model.
obstacle_return 1 # Can hit things.
@@ -18,8 +18,8 @@
localization "gps"
- size [0.5 0.5 0.5]
- origin [-0.25 -0.25 0 0 ]
+ size [0.35 0.5 0.5]
+ #origin [-0.25 -0.25 0 0 ]
laser( pose [0.15 0 -0.27 0 ] size [0.01 0.01 0.01] alwayson 1 )
@@ -32,7 +32,7 @@
point[2] [ 0.9 0.75 ]
point[3] [ 0.1 0.75 ]
z [ 0.2 0.6 ]
- color "yellow"
+ #color "yellow"
)
# body top
@@ -44,7 +44,6 @@
point[2] [ 0.9 0.75 ]
point[3] [ 0.1 0.75 ]
z [ 0.6 0.7 ]
- color "gray20"
)
# right wheel
@@ -56,7 +55,6 @@
point[2] [ 0.0 0.25 ]
point[3] [ 0 0.0 ]
z [ 0.0 0.4 ]
- color "gray23"
)
# right wheel
@@ -68,7 +66,6 @@
point[2] [ 0 1 ]
point[3] [ 0 0.75 ]
z [ 0.0 0.4 ]
- color "gray23"
)
# right eye front
@@ -80,7 +77,6 @@
point[2] [0.6 0.49]
point[3] [0.6 0.30]
z [0.8 0.95]
- color "gray23"
)
# left eye front
@@ -92,7 +88,6 @@
point[2] [0.6 0.7]
point[3] [0.6 0.51]
z [0.8 0.95]
- color "gray23"
)
# right eye rear
@@ -104,7 +99,6 @@
point[2] [0.25 0.49]
point[3] [0.25 0.34]
z [0.82 0.93]
- color "gray28"
)
# neck
@@ -115,7 +109,6 @@
point[1] [0.4 0.55]
point[0] [0.4 0.45]
z [0.7 0.9]
- color "gray28"
)
# right eye rear
@@ -127,7 +120,6 @@
point[2] [0.25 0.66]
point[3] [0.25 0.51]
z [0.82 0.93]
- color "gray28"
)
# right arm
@@ -139,7 +131,6 @@
point[2] [0.35 0.25]
point[3] [0.35 0.18]
z [0.55 0.65]
- color "gray28"
)
# left arm
@@ -151,7 +142,6 @@
point[2] [1.1 0.75]
point[3] [1.1 0.82]
z [0.55 0.65]
- color "gray28"
)
# left hand right finger
@@ -163,7 +153,6 @@
point[2] [1.2 0.70]
point[3] [1.2 0.78]
z [0.5 0.65]
- color "gray28"
)
# left hand left finger
@@ -175,7 +164,6 @@
point[2] [1.2 0.79]
point[3] [1.2 0.87]
z [0.5 0.65]
- color "gray28"
)
# right hand right finger
@@ -187,7 +175,6 @@
point[2] [1.2 0.13]
point[3] [1.2 0.21]
z [0.5 0.65]
- color "gray28"
)
# right hand left finger
@@ -199,7 +186,6 @@
point[2] [1.2 0.22]
point[3] [1.2 0.30]
z [0.5 0.65]
- color "gray28"
)
)
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit