Revision: 6771
http://playerstage.svn.sourceforge.net/playerstage/?rev=6771&view=rev
Author: jeremy_asher
Date: 2008-07-04 17:43:45 -0700 (Fri, 04 Jul 2008)
Log Message:
-----------
Fixed speech bubble positioning in perspective mode, scaling still off
Modified Paths:
--------------
code/stage/trunk/libstage/model.cc
Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc 2008-07-05 00:38:55 UTC (rev 6770)
+++ code/stage/trunk/libstage/model.cc 2008-07-05 00:43:45 UTC (rev 6771)
@@ -912,54 +912,65 @@
void StgModel::DrawStatus( StgCanvas* canvas )
{
- // draw speech bubble
- if( say_string )
- {
- float stheta = -dtor( canvas->current_camera->pitch() );
- float sphi = dtor( canvas->current_camera->yaw() );
- float scale = canvas->camera.getScale();
- if( canvas->perspectiveCam == true ) {
- sphi = atan2(
- ( pose.x -
canvas->current_camera->x() )
- ,
- ( pose.y -
canvas->current_camera->y() )
- );
- stheta = -stheta;
- }
+ if( say_string )
+ {
+ float yaw, pitch, scale;
+
- glPushMatrix();
+ float x,y,z;
+ x = canvas->current_camera->x() - pose.x;
+ y = canvas->current_camera->y() - pose.y;
+ z = canvas->current_camera->z() - pose.z - 0.5;
+ float dist = sqrt( exp2f(x) + exp2f(y) + exp2f(z) );
+ printf("x: %f, y: %f, z: %f, dist: %f, scale: %f\n", x, y, z,
dist, scale);
- // move above the robot
- glTranslatef( 0, 0, 0.5 );
+ if ( canvas->perspectiveCam ) {
+ pitch = -canvas->current_camera->pitch();
+ yaw = -canvas->current_camera->yaw();
+ scale = 500/dist;
+ }
+ else {
+ pitch = canvas->current_camera->pitch();
+ yaw = canvas->current_camera->yaw();
+ scale = canvas->camera.getScale();
+ }
+
+ float robotAngle = -rtod(pose.a);
- // rotate to face screen
- glRotatef( -rtod(global_pose.a + sphi), 0,0,1 );
- glRotatef( rtod(stheta), 1,0,0 );
+
- const float m = 4 / scale; // margin
- float w = gl_width( this->say_string ) / scale; // scaled text width
- float h = gl_height() / scale; // scaled text height
+ glPushMatrix();
+
+ // move above the robot
+ glTranslatef( 0, 0, 0.5 );
+
+ // rotate to face screen
+ glRotatef( robotAngle - yaw, 0,0,1 );
+ glRotatef( -pitch, 1,0,0 );
+
+ const float m = 4 / scale; // margin
+ float w = gl_width( this->say_string ) / scale; // scaled text
width
+ float h = gl_height() / scale; // scaled text height
+
+ // draw inside of bubble
+ PushColor( BUBBLE_FILL );
+ glPushAttrib( GL_POLYGON_BIT | GL_LINE_BIT );
+ glPolygonMode( GL_FRONT, GL_FILL );
+ glEnable( GL_POLYGON_OFFSET_FILL );
+ glPolygonOffset( 1.0, 1.0 );
+ gl_draw_octagon( w, h, m );
+ glDisable( GL_POLYGON_OFFSET_FILL );
+ PopColor();
+ // draw outline of bubble
+ PushColor( BUBBLE_BORDER );
+ glLineWidth( 1 );
+ glEnable( GL_LINE_SMOOTH );
+ glPolygonMode( GL_FRONT, GL_LINE );
+ gl_draw_octagon( w, h, m );
+ glPopAttrib();
+ PopColor();
- // draw inside of bubble
- PushColor( BUBBLE_FILL );
- glPushAttrib( GL_POLYGON_BIT | GL_LINE_BIT );
- glPolygonMode( GL_FRONT, GL_FILL );
- glEnable( GL_POLYGON_OFFSET_FILL );
- glPolygonOffset( 1.0, 1.0 );
- gl_draw_octagon( w, h, m );
- glDisable( GL_POLYGON_OFFSET_FILL );
- PopColor();
- // draw outline of bubble
- PushColor( BUBBLE_BORDER );
- glLineWidth( 1 );
- glEnable( GL_LINE_SMOOTH );
- glPolygonMode( GL_FRONT, GL_LINE );
- gl_draw_octagon( w, h, m );
- glPopAttrib();
- PopColor();
-
-
// draw text
PushColor( BUBBLE_TEXT );
glTranslatef( 0, 0, 0.1 ); // draw text forwards of bubble
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit