3D オブジェクトを回転できますが、2D オブジェクトでは機能しないようです。
移動可能な (矢印を介して) 正方形を右に 90 度回転させたいと思います (回転の中心: 正方形の中心)。次のコードを思いつきました:
class CSquare : public CObject {
SPoint pnta; //left top corner of a square
uint16 len; //length
bool bFill, bRotate; //filled? rotating?
GLubyte color[4]; //filling color
float angle; //rotate for this
public:
CSquare();
CSquare(const CSquare &sqr);
CSquare(SPoint &a, uint16 l, bool fill = false);
CSquare(uint16 x, uint16 y, uint16 l, bool fill = false);
void draw();
void toggleRotate();
void setColor(GLubyte r, GLubyte g, GLubyte b, GLubyte a);
void setPoint(uint16 x, uint16 y);
SPoint getPoint();
uint16 getPosX();
uint16 getPosY();
uint16 getLength();
};
void CSquare::draw() {
glPushMatrix();
if (bRotate)
if (++angle < 360.0f)
{
glTranslatef(pnta.nX + len/2, pnta.nY + len/2, 0);
glRotatef(90, 0, 0, 1);
}
else angle = 0.0f;
if (bFill == true) glBegin(GL_QUADS);
else glBegin(GL_LINE_LOOP);
glColor4ubv(color);
glVertex2i(pnta.nX, pnta.nY);
glColor4ub(255, 255, 0, 0); //temporary to visualise rotation effect
glVertex2i(pnta.nX + len, pnta.nY);
glColor4ub(0, 255, 0, 0);
glVertex2i(pnta.nX + len, pnta.nY + len);
glColor4ub(0, 0, 255, 0);
glVertex2i(pnta.nX, pnta.nY + len);
glEnd();
glPopMatrix();
}
私のコードはある程度機能します。オブジェクトを回転させますが、目的の点に中心を置きません。
PS。必要に応じてアプリケーション全体をアップロードできます (Visual Studio 2010 プロジェクト、FreeGLUT と SDL を使用)。