ウィンドウ全体に「飛行船」が浮かぶ基本的なアニメーションを作成しようとしています。私は自分のコードを構築するのに役立つように、さまざまなチュートリアルとソースを適応させようとしました。私はまだそれを理解しています。私の主な質問は、なぜ私の glutWireSphere が指定された色で塗りつぶされないのですか? 輪郭だけが見える。提案があれば教えてください。コードは以下です。
#include <stdlib.h> // need to include for non keywords like NULL
#include <GLUT/GLUT.h> // open gl wrapper class
GLfloat speedX = 0.01; // blimp's speed in x & y position
GLfloat speedY = 0.001;
GLfloat blimpX = 0.0; // blimp's (x,y) position
GLfloat blimpY = 0.0;
GLfloat blimpXMax, blimpXMin, blimpYMax, blimpYMin; // blimp's bounds
class Blimp {
public:
void draw(void);
};
void Blimp::draw(void)
{
glPushMatrix();
glColor3f(1.0,1.0,0.0);
glutWireSphere(8, 25.0, 25.0);
glPushMatrix();
glTranslatef(-8, 0,0);
glutWireSphere(6, 25, 25);
glPopMatrix();
glPopMatrix();
}
void display()
{
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix(); // save modelview matrix
Blimp blimp;
glTranslatef(blimpX, blimpY, 0.0); // move blimp
blimp.draw();
glPopMatrix(); // restore modelview matrix
glutSwapBuffers();
// compute location for next refresh
blimpX += speedX;
blimpY += speedY;
//check if blimp exceeds edges: return on other side
if (blimpX > blimpXMax + 14) {
blimpX = blimpXMin - 14;
} else if (blimpX < blimpXMin - 14) {
blimpX = blimpXMax + 14;
}
/*
// check if blimp exceeds edges: bounce back other direction
if (blimpX > blimpXMax) {
blimpX = blimpXMax;
speedX = -speedX;
} else if (blimpX < blimpXMin) {
blimpX = blimpXMin;
speedX = -speedX;
}
*/
if (blimpY > blimpYMax) {
blimpY = blimpYMax;
speedY = -speedY;
} else if (blimpY < blimpYMin){
blimpY = blimpYMin;
speedY = -speedY;
}
}
void reshape(int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
blimpXMin = -50.0 + 14;
blimpXMax = 50 - 8;
blimpYMin = 25;
blimpYMax = 50 - 8;
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutIdleFunc(display);
glutMainLoop();
return(0);
}