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