我被困在绘制多边形作为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();*/
我真的没有得到分配到点数组的内容??
答案 0 :(得分:0)
points
正在累积碰撞多边形的顶点,假设它们是正方形。然后将这些顶点传递给绘图函数,以便处理到OpenGL进行渲染。
至于评论中的第二个问题,将顶点坐标用作纹理坐标是没有意义的。纹理坐标指定应使用纹理中的哪些像素(或纹素)。将值标准化,使得(0,0)对应于图像的左下角,(1,1)对应于图像的右上角。无论您的对象位于世界中的(0,0)还是(42,35),都不会更改要使用的纹理中的哪些像素。
如果要将整个纹理映射到四边形,则应将(0,0),(0,1),(1,1)和(1,0)作为每个纹理坐标传递你的四个顶点。如果纹理旋转,则可能必须使用坐标的顺序。