Доброго времени суток уважаемые форумчане.
Пише потому что очень долго пытался понять проблему сам но ничего не вышло
проблема в том что я новичок и пытаюсь освоить Box2d и OpenGL все было прекрастно пока я не дошел до прорисовки многоугольников
почему то при прорисовке обьект смещается по от своего настоящего положения вот функция где я создаю обьект:
b2Body* add_my_object(int x, int y,bool dinamic=1) { b2Body* object = NULL; b2PolygonShape shape; // форма многоугольника b2Vec2 vertices[10]; //массив с координатами для определения вершин многоугольника vertices[0].Set( -50*P2M, 200*P2M);//низ лево vertices[1].Set( -40*P2M, 0*P2M); // чуть выше vertices[2].Set( 0*P2M, -40*P2M); // верх vertices[3].Set( 40*P2M, 0*P2M); vertices[4].Set( 50*P2M, 100*P2M); vertices[5].Set( 0*P2M,200*P2M); shape.Set( vertices,6); b2BodyDef body_definition; if( dinamic) body_definition.type = b2_dynamicBody; body_definition.position.Set( x*P2M,y*P2M); object = world->CreateBody( &body_definition); object->CreateFixture( &shape,1.0f); return object; }
а вот функция где я его отрисовываю:
void draw_polygon(b2Vec2* points,int32 count_points,b2Body &obj,float angle) { glColor3f( 0,1,0); glPushMatrix( ); b2Vec2 offset; b2Vec2 center_o = obj.GetWorldCenter( ); center_o.x *= M2P; center_o.y *= M2P; glTranslatef( ( double)center_o.x,( double)center_o.y,0); glRotatef( angle*180.0/3.1415926,0,0,1); glBegin( GL_POLYGON); for( int i = 0; i < count_points;i++) { glVertex2i( points[i].x*M2P,( points[i].y*M2P)); } glEnd( ); glPopMatrix( ); }
на выходе получается вот это:
или вот это :
в то время как простые прямоугольники и круги отрисовываются отлично
как я понимаю смещается просто y координата обьекта.
Очень прошу помогите решить эту маленькую проблемку мне очень хочется понять в чём дело.
Проблема решена:
дело было в том что когда я получал центр обьекта:
b2Vec2 center_o = obj.GetWorldCenter();
b2Vec2 center_o = center.GetPosition();
На второй картинке по-моему как раз твой многоугольник нарисован. А на третьей - он же, повернутый на 90 градусов.
kipar
когда вызываю функцию obj.GetWorldCenter() он мне передаёт совсем не то положение тела может быть оно как то смещается или что то еще
а на картинках 2 разных многоугольника и да на третьей и на второй картинке одни и теже просто в разных положениях но координаты их правильного положения смещены
может кто нибудь обладает очень правильным кород по отрисовке многоугольников от box2d на opengl я б поковырялся и понял в чем проблема)
может у меня принцип получения координат обьекта не правильный?
Я box2d не знаю. (лол, зря я в это сообщество вступил). Но может надо попробовать GetPosition вместо GetWorldCenter?
kipar
Я box2d не знаю. (лол, зря я в это сообщество вступил). Но может надо попробовать GetPosition вместо GetWorldCenter?
блин и правдо кажется дело все в этом) видимо при отрисовке кругов и прямоугольнико достаточно взять просто центр обьекта а при отрисовке многоугольника видимо нужно брать именно тот центр от которого ты создавал свой многоугольник.
ты хоть и написал что ты бокс2д не знаеш но очень мне помог большое тебе спасибо!)
svt290692
В боксе есть же класс debugdraw или как то так, который надо просто напросто перегрузить. И все )
CasDev
Может быть вы и правы но все равно теперь я знаю в чём было дело)
Тема в архиве.