Я застреваю в рисовании полигонов как объекты Box2D. С OpenGL, чертеж многоугольника довольно прост т.е.Рисование многоугольников opengl и box2D
glBegin(GL_POLYGON);
glColor3f(0,0,0);
glVertex2f(2.0,6.0);
glVertex2f(2.0,8.0);
glVertex2f(2.5,8.0);
glVertex2f(2.5,6.0);
glEnd();
И то, что я видел в учебниках, с Box2D мы делаем это так:
void drawSquare(b2Vec2* points,b2Vec2 center,float angle)
{
glColor3f(1,1,1);
glPushMatrix();
glTranslatef(center.x*M2P,center.y*M2P,0);
glRotatef(angle*180.0/3.141,0,0,1);
glBegin(GL_QUADS);
for(int i=0;i<4;i++)
{
glVertex2f(points[i].x*M2P,points[i].y*M2P);
}
glEnd();
glPopMatrix();
}
И дисплей код() является следующим образом:
void display()
{
glClear(GL_COLOR_BUFFER_BIT)
glEnable (GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,11);
//pix[0].mDraw();
glLoadIdentity();
b2Body* tmp=world->GetBodyList(); // Get no.of bodies
b2Vec2 points[4];
while(tmp)
{
for(int i=0;i<4;i++)
points[i]=((b2PolygonShape*)tmp->GetFixtureList()->GetShape())->GetVertex(i);
drawSquare(points,tmp->GetWorldCenter(),tmp->GetAngle());
tmp=tmp->GetNext();
}
glFlush();
}
Я застрял с этим следующим кодом:
/*for(int i=0;i<4;i++)
points[i]=((b2PolygonShape*)tmp->GetFixtureList()->GetShape())->GetVertex(i);
drawSquare(points,tmp->GetWorldCenter(),tmp->GetAngle());
tmp=tmp->GetNext();*/
Я действительно не получаю то, что назначается в массив точек?
«точки» накапливают вершины многоугольника столкновения, которые считаются квадратами. Затем эти вершины передаются в функцию рисования, которая обрабатывается OpenGL для рендеринга. – Trillian
Получил! У меня еще один вопрос! Для текстурирования мы даем textCords для каждой вершины. Я попытался добавить следующую команду сразу после моей команды glVertex2f() в drawSquare(), но я не получил желаемого результата. Я думаю, что это неправильный подход для отображения текстур. Может у пятно что-то неправильно или предложит мне правильный способ сопоставления текстур на моих полигонах 'glTexCoord2f (точки [i] .x * M2P, точки [i] .y * M2P); – Vector