我正在使用c ++在opengl中绘制一个池球数组 我面临的问题是阵列直线绘制。 当我使用gltranslate时,当我编辑z轴和y轴时,球仍然只沿着线平移 我想要做的是将球设置成三角形,就像打破一场比赛一样 我如何使用数组代码来设置这样的球? 任何帮助将不胜感激
balls[7];
for (int x = ball-start; x<ball-end;x++)
{
glTranslatef(0,0,0.5);
glColor3f(1,0,0);
ball[x].drawball();
}
答案 0 :(得分:3)
假设:
struct Ball {
double x,y,z;
void drawball(void);
/* ... */
} ball[7];
尝试:
for(int i=0; i<7 ;i++)
{
glPushMatrix();
glTranslated(ball[i].x,ball[i].y,ball[i].z);
glColor3f(1,0,0);
ball[i].drawball();
glPopMatrix();
}
细节可能会有所不同,但希望你能得到这个想法。
答案 1 :(得分:2)
做这样的事情:
// first of all, include the x,y position (assuming 2D, since pool) in the Ball object:
class Ball
{
//...
private:
float xpos, ypos;
//...
};
然后当你构造球的数组时,而不是仅仅制造8个球,你将要在堆上分配内存,以便它将持续整个游戏。所以这样做:
Ball *ball= new Ball*[8];
ball[0] = new Ball(x0,y0);
ball[1] = new Ball(x1,y1);
ball[2] = new Ball(x2,y2);
ball[3] = new Ball(x3,y3);
// ...
确保游戏结束后,你自己清理干净。
for (int i = 0; i < 8; i++)
delete ball[i];
delete [] ball;
然后在你的Ball :: draw()做类似的事情:
Ball::draw()
{
glColor3f(/*yellow*/); // Set the color to yellow
glTranslatef(-xpos, -ypos, 0); // Move to the position of the ball
// Draw the ball
glTranslatef(xpos, ypos, 0); // Move back to the default position
}
你所要做的就是想出正确的(x0,y0),(x1,y1),(x2,y2)......来形成一个三角形!这是否有意义/回答你的问题?