2014-05-19 30 views
-2

我的顯示()函數,我把氣球位置的值,以彈出()如何通過點擊鼠標來破壞氣球?

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); 
    } 
} 

我不知道如何鏈接它並比較鼠標位置和氣球位置的值。

回答

0

在OpenGL中,您在找什麼叫做picking。有兩種方法,即Ray Picking和opengl Selection Mode。參見here,here,herehere

0

用不同顏色繪製每個氣球,然後獲得鼠標所在像素的顏色,這會給你氣球的顏色(如果你指向一個)。爲此,請看glReadPixels。使用某種列表來查看哪個氣球對應於哪種顏色。如果你不想顯示這種顏色,你可以清除屏幕並用你想要的顏色,紋理,着色器等來渲染。

相關問題