У меня есть физическое тело, которое является PolygonShape. Проблема в том, что когда я применяю текстуру, на ней отображается инвертированное изображение! Я не могу понять, почему? Я предполагаю, что я даю правильные координаты пикселей, но все равно это не работает. Вот OpenGL рендеринга:Текстура показывает инвертированное изображение
void drawSquare2(b2Vec2* points,b2Vec2 center,float angle)
{
glColor3f(1,1,1);
glPushMatrix();
pix.readBMPFile("marioStanding.bmp",1);
pix.setChromaKey(255, 255, 255);
pix.setTexture(11);
glTranslatef(center.x*M2P,center.y*M2P,0);
glRotatef(angle*180.0/3.141,0,0,1);
glEnable (GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,11);
glBegin(GL_POLYGON);
int i=0;
glVertex2f(points[i].x*M2P,points[i].y*M2P);
glTexCoord2f(0,0);
i++;
glVertex2f(points[i].x*M2P,points[i].y*M2P);
glTexCoord2f(0,1);
i++;
glVertex2f(points[i].x*M2P,points[i].y*M2P);
glTexCoord2f(1,1);
i++;
glVertex2f(points[i].x*M2P,points[i].y*M2P);
glTexCoord2f(1,0);
glEnd();
glDisable(GL_TEXTURE_2D);
glPopMatrix();
}
И это, как я зову его из моей Display
функции
for(int i=0;i<4;i++)
points[i]=((b2PolygonShape*)tom_char->GetFixtureList()->GetShape())->GetVertex(i);
drawSquare2(points,tom_char->GetWorldCenter(),tom_char->GetAngle());
addRect
Логика:
b2Body* addRect2(int x,int y,int w,int h,bool dyn=true)
{
b2BodyDef bodydef;
bodydef.position.Set(x*P2M,y*P2M); //Setting body position
if(dyn)
{
bodydef.type=b2_dynamicBody; // dynamic body means body will move
}
b2Body* body=world->CreateBody(&bodydef); //Creating box2D body
b2PolygonShape shape; //Creating shape object
shape.SetAsBox(P2M*w,P2M*h);
////////////// Adding Fixtures(mass, density etc) //////////////
b2FixtureDef fixturedef;
fixturedef.shape=&shape;
fixturedef.density=0.0;
fixturedef.restitution = 0.7;
body->CreateFixture(&fixturedef);
return body;
}
и эти параметры, приведенные в addRect:
tom_char=addRect(500,460,50,70,true);
Невозможно определить, где я ошибаюсь!
Невозможно сказать, учитывая небольшую информацию, которую вы предоставили , Но я подозреваю, что вы не знаете, что точка (0,0) в нормализованных координатах текстуры соответствует нижнему левому углу текстурного изображения. (0,1) - верхний левый, (1,1) - верхний правый, а (1,0) - нижний правый. –
И для полигонов и квадроциклов (0,0), (0,1), (1,1), (1,0) для отображения текстуры. – Vector
Какая еще информация вам нужна? – Vector