我有一款遊戲使用像素藝術風格,因此1像素等於屏幕上的2x2區域。然而,當我在OpenGL旋轉精靈它吸引它使用的屏幕像素,它打破了一個低分辨率的遊戲風格的幻想:在OpenGL中使用2像素旋轉像素藝術
我如何可以旋轉精靈,並使用更大的繪製像素?眼下精靈使用的是有一個方法叫得出一個Sprite類繪製,並且代碼看起來是這樣的:
void Sprite::Draw(int x, int y, int w, int h, int tx = 0, int ty = 0, int tw = 1, int th = 1, int rotation = 0, int rx = 0, int ry = 0, int sr = 0, float r = 1, float g = 1, float b = 1) {
glEnable(GL_TEXTURE_2D);
glTranslatef(x+(w/2), y+(h/2), 0);
glRotatef((float) sr, 0.0f, 0.0f, 1.0f);
glTranslatef(-x-(w/2), -y-(h/2), 0);
glTranslatef(x+(w/2)+rx, y+(h/2)+ry, 0);
glRotatef((float) rotation, 0.0f, 0.0f, 1.0f);
glTranslatef(-(w/2)-rx, -(h/2)-ry, 0);
glColor3f(r, g, b);
glBindTexture(GL_TEXTURE_2D, texture);
const float verts[] = {
0, (float) h,
(float) w, (float) h,
0, 0,
(float) w, 0
};
const float tVerts[] = {
(float)tx/(float)width, ((float)ty+(float)th)/(float)height,
((float)tx+(float)tw)/(float)width, ((float)ty+(float)th)/(float)height,
(float)tx/(float)width, (float)ty/(float)height,
((float)tx+(float)tw)/(float)width, (float)ty/(float)height
};
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, verts);
glTexCoordPointer(2, GL_FLOAT, 0, tVerts);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glLoadIdentity();
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_TEXTURE_2D);
}
謝謝!
編輯:我想我應該提到我使用SDL2進行窗口管理。
所以你想旋轉,然後高檔?我認爲這可能最終看起來很可怕。傳統的像素藝術遊戲不會進行旋轉,或者他們有一小部分方向的手繪精靈。 – Thomas 2014-10-26 14:17:13
@Thomas它可能,我不知道。我可以手繪精靈旋轉,但是這個遊戲有一些軌道機制,所以能夠非常精確地指出這艘船很重要,這意味着它需要大概100個左右的旋轉精靈。 – 2014-10-26 14:19:35
如果問題在於您正在看*旋轉像素,那麼請考慮縮小到「實際」像素,然後再旋轉,然後再放大。 – usr2564301 2014-10-26 15:17:27