在OpenGL中使用glDepthFunc和透明度

时间:2018-04-27 11:28:19

标签: opengl

此图像使用三遍进行渲染。

  1. 在第一遍中,我渲染了一个三轴。
  2. 在第二遍中渲染透明圆柱体(glEnable(GL_BLEND))alpha = 0.5f。
  3. 最后在第三遍(glEnable(GL_BLEND))中呈现金色和灰色球体。
  4. 黄金球的alpha值= 1.0f,灰色球= 0.2f。

    enter image description here

    问题: 如你所见,

    1. 即使我们启用混合,圆柱体也会与球体重叠。
    2. 轴与圆柱体和球体重叠!
    3. 这是我的代码:

          glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
          glClearDepthf(1.0f);
          glEnable(GL_DEPTH_TEST);
          glDepthFunc(GL_LEQUAL);
          glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
          glEnable(GL_CULL_FACE);
          glFrontFace(GL_CCW);
          glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
      

      这里准备数据并发送到着色器(第一次通过)

          glDrawElements(GL_POINTS, 256, GL_UNSIGNED_INT, reinterpret_cast<void*>(0));
      

      ps:几何着色器用于渲染给定点的线条。

      然后我们准备并传递圆柱数据

          glEnable(GL_BLEND);
          glCullFace(GL_FRONT);
          glDrawElements(GL_POINTS, 256, GL_UNSIGNED_INT, reinterpret_cast<void*>(0));
          glCullFace(GL_BACK);
          glDrawElements(GL_POINTS, 256, GL_UNSIGNED_INT, reinterpret_cast<void*>(0));
          glDisable( GL_BLEND);
      

      ps:几何着色器也用于渲染给定点的圆柱网格。

      最后,我一次性渲染黄金球体和灰色球体

          glEnable(GL_BLEND);
          glDrawElements(GL_LINE_STRIP, goldenSphereNumber, GL_UNSIGNED_INT, (void*)0);
          glDrawElements(GL_LINE_STRIP, sphereIndexCount, GL_UNSIGNED_INT, (void*)0);
          glDisable( GL_BLEND);
      

      ps:此处还使用几何着色器从给定的线条渲染圆柱体的网格。

      你知道有什么不对吗?你能帮忙吗?

0 个答案:

没有答案