[Fix] Temporary fix to sprite scaling & rotation.

This commit is contained in:
Tamir Atias 2012-04-08 03:56:35 +03:00
parent f8a67600ae
commit 38efab7bfc
4 changed files with 24 additions and 12 deletions

1
.gitignore vendored
View File

@ -14,4 +14,5 @@ Bin/VC10/Debug
Bin/VC10/Release
Bin/VC10/ipch
Bin/*.exe
Bin/*.dll

View File

@ -22,10 +22,12 @@ bool Game::Init(void) {
glDepthFunc(GL_LEQUAL);
Texture* testTexture = new Texture();
testTexture->Load("../../Data/Img/test.png");
testTexture->Load("../Data/Img/test.png");
_testSprite = new Sprite();
_testSprite->SetTexture(testTexture);
_testSprite->SetHandle(Vec2(800/2, 600/2));
_testSprite->SetScale(Vec2(1.0f, 1.0f));
// Return success.
return true;
@ -49,6 +51,7 @@ void Game::Render(void) {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
_testSprite->SetRotation(_rotationAngle);
_testSprite->Draw();
}

View File

@ -22,11 +22,13 @@ void Sprite::Draw() const {
// . .
// 3---------2
Vec2 scaledSize(size.x*scale.x, size.y*scale.y);
Vec2 vertices[4] = {
Vec2(handle.x, handle.y),
Vec2(handle.x + size.x, handle.y),
Vec2(handle.x + size.x, handle.y + size.y),
Vec2(handle.x, handle.y + size.y),
Vec2(0.0f, 0.0f),
Vec2(scaledSize.x, 0.0f),
Vec2(scaledSize.x, scaledSize.y),
Vec2(0.0f, scaledSize.y),
};
Vec2 texCoords[4] = {
@ -36,14 +38,18 @@ void Sprite::Draw() const {
Vec2(0.0f, 1.0f),
};
for(int i = 0; i < 4; i++){
vertices[i].x *= scale.x;
vertices[i].y *= scale.y;
}
glEnable(GL_TEXTURE_2D);
BindTexture(texture->GetTexID());
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
// Temporary solution.
Vec2 halfScaledSize = scaledSize / 2.0f;
glTranslatef(handle.x + halfScaledSize.x, handle.y + halfScaledSize.y, 0.0f);
glRotatef(rotation, 0.0f, 0.0f, 1.0f);
glTranslatef(-halfScaledSize.x, -halfScaledSize.y, 0.0f);
glBegin(GL_QUADS);
glTexCoord2fv((const GLfloat*)&texCoords[0]);
glVertex2fv((const GLfloat*)&vertices[0]);
@ -54,9 +60,11 @@ void Sprite::Draw() const {
glTexCoord2fv((const GLfloat*)&texCoords[3]);
glVertex2fv((const GLfloat*)&vertices[3]);
glEnd();
glPopMatrix();
}
void Sprite::SetTexture(Texture* texture) {
this->texture = texture;
this->size = Vec2(texture->GetWidth(), texture->GetHeight());
this->size = Vec2((float)texture->GetWidth(), (float)texture->GetHeight());
}

View File

@ -24,7 +24,7 @@ public:
void SetRotation(float rotation) { this->rotation = rotation; }
void SetTexture(Texture* texture);
private:
protected:
Vec2 handle;
Vec2 size;
Vec2 scale;