绘制多边形opengl和box2D

时间:2013-11-15 13:56:49

标签: opengl box2d polygons

我被困在绘制多边形作为Box2D对象。使用opengl,多边形的绘制非常简单,即

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();
}

display()代码如下:

 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();*/

我真的没有得到分配到点数组的内容??

1 个答案:

答案 0 :(得分:0)

points正在累积碰撞多边形的顶点,假设它们是正方形。然后将这些顶点传递给绘图函数,以便处理到OpenGL进行渲染。

至于评论中的第二个问题,将顶点坐标用作纹理坐标是没有意义的。纹理坐标指定应使用纹理中的哪些像素(或纹素)。将值标准化,使得(0,0)对应于图像的左下角,(1,1)对应于图像的右上角。无论您的对象位于世界中的(0,0)还是(42,35),都不会更改要使用的纹理中的哪些像素。

如果要将整个纹理映射到四边形,则应将(0,0),(0,1),(1,1)和(1,0)作为每个纹理坐标传递你的四个顶点。如果纹理旋转,则可能必须使用坐标的顺序。