Opengl 如何通过点击鼠标来打破气球?

Opengl 如何通过点击鼠标来打破气球?,opengl,glut,Opengl,Glut,我的display()函数,我将引出序号位置的值设置为pop() 这是我的pop()函数 void pop(浮动x,浮动y) { 如果(x-0.1f您正在寻找的是OpenGL中的拾取。有两种方法可以实现这一点,即光线拾取和OpenGL选择模式。请参见、和。使用不同的颜色绘制每个气球,然后获取鼠标所在像素的颜色,这将为您提供气球的颜色(如果您指向一个)。为此,请查看glReadPixels。使用某种列表查看哪个气球对应于哪个颜色。如果您不想显示此颜色,可以清除屏幕并使用所需的颜色、纹理、着色器等进

我的display()函数,我将引出序号位置的值设置为pop()

这是我的pop()函数

void pop(浮动x,浮动y)
{

如果(x-0.1f您正在寻找的是OpenGL中的
拾取
。有两种方法可以实现这一点,即
光线拾取
和OpenGL
选择模式
。请参见、和。

使用不同的颜色绘制每个气球,然后获取鼠标所在像素的颜色,这将为您提供气球的颜色(如果您指向一个)。为此,请查看
glReadPixels
。使用某种列表查看哪个气球对应于哪个颜色。如果您不想显示此颜色,可以清除屏幕并使用所需的颜色、纹理、着色器等进行渲染

void display()
{
glClear (GL_COLOR_BUFFER_BIT);

// update balloon position
p = 0;

for(w=0; w<100; w++)
{
    p = rand() % speedrange;

    balloon[w].pos.y = balloon[w].pos.y + speed[p];
}

for(balloonBurst=0; balloonBurst<100; balloonBurst++)
{
    drawCircleOutline(balloon[balloonBurst]);
    if(mouseleft){
    pop(balloon[balloonBurst].pos.x,balloon[balloonBurst].pos.y);
    }
}
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{

if (button==GLUT_LEFT_BUTTON)
{
    mouseleft = (state == GLUT_LEFT_BUTTON);
    mouseX = x;
    mouseY = y;
    /*tex_2d = SOIL_load_OGL_texture(
    "balloonBurst.png",
    SOIL_LOAD_AUTO,
    SOIL_CREATE_NEW_ID,
    SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT);*/
    }
}
void pop (float x, float y)
{
    if( x - 0.1f <= mouseX/800 <= x + 0.1f && y - 0.1f <= 1 - mouseY/800 <= y + 0.1f)
    {
        tex_2d = SOIL_load_OGL_texture(
        "balloonBurst.png",
        SOIL_LOAD_AUTO,
        SOIL_CREATE_NEW_ID,
        SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT);
    }
}