Войти
Box2DФорумОбщее

Неправильная отрисовка многоугольников openGL

#0
0:15, 13 мар. 2014

Доброго времени суток уважаемые форумчане.
Пише потому что очень долго пытался понять проблему сам но ничего не вышло
проблема в том что я новичок и пытаюсь освоить 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();

}

на выходе получается вот это:


пример | Неправильная отрисовка многоугольников openGL

или вот это :

пример2 | Неправильная отрисовка многоугольников openGL
пример 5 | Неправильная отрисовка многоугольников openGL

в то время как простые прямоугольники и круги отрисовываются отлично


пример 6 | Неправильная отрисовка многоугольников openGL
пример 4 | Неправильная отрисовка многоугольников openGL

как я понимаю смещается просто y координата обьекта.
Очень прошу помогите решить эту маленькую проблемку мне очень хочется понять в чём дело.

Проблема решена:
пример 7 | Неправильная отрисовка многоугольников openGL

дело было в том что когда я получал центр обьекта:

 b2Vec2 center_o = obj.GetWorldCenter();
он выдавал мне центр обьекта который получился в результате моих манипуляций с гранями)
а когда вызываеш
b2Vec2 center_o = center.GetPosition();
то возвращается тот центр от которого ты создавал свуой многоугольник и отрисовка получается на ура всем спасибо)


#1
1:10, 13 мар. 2014

На второй картинке по-моему как раз твой многоугольник нарисован. А на третьей - он же, повернутый на 90 градусов.

#2
1:44, 13 мар. 2014

kipar

когда вызываю функцию obj.GetWorldCenter() он мне передаёт совсем не то положение тела может быть оно как то смещается или что то еще
а на картинках 2 разных многоугольника и да на третьей и на второй картинке одни и теже просто в разных положениях но координаты их правильного положения смещены

#3
1:45, 13 мар. 2014

может кто нибудь обладает очень правильным кород по отрисовке многоугольников от box2d на opengl я б поковырялся и понял в чем проблема)
может у меня принцип получения координат обьекта не правильный?

#4
12:58, 13 мар. 2014

Я box2d не знаю. (лол, зря я в это сообщество вступил). Но может надо попробовать GetPosition вместо GetWorldCenter?

#5
14:37, 13 мар. 2014

kipar
Я box2d не знаю. (лол, зря я в это сообщество вступил). Но может надо попробовать GetPosition вместо GetWorldCenter?

блин и правдо кажется дело все в этом) видимо при отрисовке кругов и прямоугольнико достаточно взять просто центр обьекта а при отрисовке многоугольника видимо нужно брать именно тот центр от которого ты создавал свой многоугольник.
ты хоть и написал что ты бокс2д не знаеш но очень мне помог большое тебе спасибо!)

#6
2:23, 14 мар. 2014

svt290692
В боксе есть же класс debugdraw или как то так, который надо просто напросто перегрузить. И все )

#7
12:22, 14 мар. 2014

CasDev
Может быть вы и правы но все равно теперь я знаю в чём было дело)

Box2DФорумОбщее

Тема в архиве.