opengl池球池

时间:2011-04-21 00:48:58

标签: c++ arrays opengl

我正在使用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();
    }

2 个答案:

答案 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)......来形成一个三角形!这是否有意义/回答你的问题?