Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGl选择_Opengl_Mouseevent - Fatal编程技术网

OpenGl选择

OpenGl选择,opengl,mouseevent,Opengl,Mouseevent,我正在制作一个盒子,并在底部放置“磁铁”。侧面略微透明(alpha介于.2和.5之间),底部为实心。我试图使用gluUnProject()选择“磁铁”的放置位置,但当渲染长方体的侧面时,我无法将磁铁放入长方体中 是否仍然需要渲染墙的侧面,但为了单击鼠标而忽略它们 我试过GL_CULL_FACE,但乍一看,这似乎不是我想要的。因此,如果我理解正确,你有半透明的盒子,当磁铁在盒子里时,你想根据盒子的半透明程度看到磁铁 我的猜测是,当你画盒子的时候,你打开了深度写入,这样如果盒子恰好在磁铁之前被画出来

我正在制作一个盒子,并在底部放置“磁铁”。侧面略微透明(alpha介于.2和.5之间),底部为实心。我试图使用gluUnProject()选择“磁铁”的放置位置,但当渲染长方体的侧面时,我无法将磁铁放入长方体中

是否仍然需要渲染墙的侧面,但为了单击鼠标而忽略它们


我试过GL_CULL_FACE,但乍一看,这似乎不是我想要的。

因此,如果我理解正确,你有半透明的盒子,当磁铁在盒子里时,你想根据盒子的半透明程度看到磁铁

我的猜测是,当你画盒子的时候,你打开了深度写入,这样如果盒子恰好在磁铁之前被画出来,那么当你画磁铁的时候,它将无法通过深度测试,里面的部分也不会被画出来

最简单的方法是:

  • 首先绘制所有实体对象

  • 禁用深度写入:

    glDepthMask(GL_FALSE);
    
  • 绘制半透明对象时,请使用与顺序无关的混合功能,例如:

    glBlendFunc(GL_ONE, GL_ONE)
    
  • 绘制所有透明对象

  • 再次启用深度写入

    glDepthMask(GL_TRUE);
    

  • 记住,这个简单的方法只有在使用一个可交换的混合方程时才能起作用,如果不考虑使用顺序无关的透明性,一篇好的文章是PyracalalNokes,Geoff Leach和Fabio Zambetta

    < P> >“有效的分层片段缓冲技术”,如果我理解正确的话,您有半透明框,当磁铁位于框内时,您希望根据框的半透明看到磁铁

    我的猜测是,当你画盒子的时候,你打开了深度写入,这样如果盒子恰好在磁铁之前被画出来,那么当你画磁铁的时候,它将无法通过深度测试,里面的部分也不会被画出来

    最简单的方法是:

  • 首先绘制所有实体对象

  • 禁用深度写入:

    glDepthMask(GL_FALSE);
    
  • 绘制半透明对象时,请使用与顺序无关的混合功能,例如:

    glBlendFunc(GL_ONE, GL_ONE)
    
  • 绘制所有透明对象

  • 再次启用深度写入

    glDepthMask(GL_TRUE);
    

  • 请记住,这个简单的方法只有在使用一个可交换的混合方程时才能起作用,如果不考虑使用顺序无关透明性,一篇好文章是“Pyrayal-Nokes,Geoff Leach和Fabio Zambetta

    WOOPS”的“高效分层片段缓冲技术”。在第五步中,我打算写“glDepthMask(true);”哎呀!在第五步中,我打算写“glDepthMask(true);”