我被困在绘制多边形的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();*/
我真的没有得到什么被分配到点的数组?
'points'正在积累碰撞多边形的顶点,假定它们是正方形。然后将这些顶点传递给绘图函数,以便对OpenGL进行渲染处理。 – Trillian
Got it!我还有一个问题!对于纹理,我们给每个顶点的textCords。我尝试在drawSquare()中的glVertex2f()命令后添加以下命令,但没有得到所需的结果。我认为这不是纹理映射的正确方法。你可以发现什么是错的,或者建议我在我的多边形上映射纹理的正确方法 'glTexCoord2f(points [i] .x * M2P,points [i] .y * M2P);' – Vector