編集 *解決しました。ソースコードが動作するバージョンに更新されました! *
OpenGL と Box2D を使用して、次のゲーム用の簡単なゲーム エンジンを作ろうとしています。
問題は、これら2つをうまく機能させることができないことです。OpenGL の回転をオフにすると、実際の世界を除いて、すべてが同じように見えます。問題は回転オンです。
http://cl.ly/image/0I0M3C3K1c3c - 回転オフ http://cl.ly/image/421v321t201D - 回転オン
Box2D の問題なのか OpenGL の問題なのかわかりませんが、平らな地面で穏やかな状態にある場合や、明らかに物理法則に違反している場合は、右のボックスを回転させるべきではないと思います。これは 1 つの問題だけではありませんが、この問題は画像だけではっきりとわかります。私は個人的にこれをOpenGLのせいにしています:)
これが私のレンダリングコードです
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
GLuint texture_handle;
/* texture load logic */
...
...
glTranslatef(this->xPos + this->width / 2, this->yPos + this->height / 2, 0.0f);
glRotatef(this->angle, 0.0f, 0.0f, 1.0f);
glTranslatef(-this->width / 2, -this->height / 2 , 0);
/* Creates 3D cube */
glBegin(GL_QUADS);
glVertex2f(0, 0);
glTexCoord2f(1, 0);
glVertex2f(this->GetWidth(), 0);
glTexCoord2f(1, 1);
glVertex2f(this->GetWidth(), this->GetHeight());
glTexCoord2f(0, 1);
glVertex2f(0, this->GetHeight());
glTexCoord2f(0, 0);
glEnd();
glDeleteTextures(1, &texture_handle);
glPopMatrix();
glFlush();
完成のために、ここに Box2D 部分があります
/* define body for box */
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(this->xPos / RATIO, this->yPos / RATIO);
bodyDef.angle = this->angle * (M_PI / 180);
body = this->world->CreateBody(&bodyDef);
b2PolygonShape box;
box.SetAsBox((this->width / 2) / RATIO, (this->height / 2) / RATIO);
b2FixtureDef shapeDef;
shapeDef.shape = &box;
shapeDef.density = 1f;
shapeDef.friction = 0.8f;
body->CreateFixture(&shapeDef);
this->body = body;
/* apply physics */
b2Vec2 position = this->body->GetPosition();
this->angle = this->body->GetAngle() / (M_PI / 180);
this->xPos = (position.x * RATIO);
this->yPos = (position.y * RATIO);