0

編集 *解決しました。ソースコードが動作するバージョンに更新されました! *

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);
4

0 に答える 0