【问题标题】:Wireframe visible through OpenGL drawn cubes, any ideas?通过 OpenGL 绘制的立方体可见线框,有什么想法吗?
【发布时间】:2011-03-16 21:25:23
【问题描述】:

我是 OpenGL/ES 和 OpenTK 的新手,如果我的理解/术语有一点偏差,请原谅我。

基本上,

  1. 我正在使用顶点缓冲区对象阵列 (VBO) 绘制一系列 [白色] 基于三角形的立方体。
  2. 然后我使用相同的顶点来渲染立方体的 [黑色] 线框,使用 lines 和 polygonOffset()。
  3. 问题是,我可以看到在背面渲染的线框(即透视),我不确定为什么(?)。
  4. 我正在使用 4 值颜色 (rgba),我对第 4 值(alpha/不透明度)似乎没有任何作用。

为基于三角形的立方体部分定义了法线,总共 36 个(2 x 3 顶点/tri x 6 边),但是,我 还没有为线框线段定义任何法线(目前)。

有没有人知道我可能做错了什么,仅基于 OpenGL 陷阱/经验。

JFYI,我在 mono/monotouch (C#) 上使用 OpenTK-OpenGL ES11

附:如果您想知道为什么我没有发布任何代码,那是因为渲染代码与游戏逻辑混合并分布在多个文件中。如有必要,我会尽快制作一个简单、独立的示例。

【问题讨论】:

  • 您传递给 glPolygonOffset 的值是什么,以及在哪些绘图调用上?你有 glEnable(GL_POLYGON_OFFSET) 吗?
  • @ryanm,我有以下调用 GL.EnableClientState(All.PolygonOffsetFill); GL.PolygonOffset(-0.1f, -0.1f);就在我的立方体重绘例程(但不是线框绘制)之前,然后相应地禁用 All.PolygonOffsetFill,看起来对吗?

标签: iphone opengl-es xamarin.ios opentk


【解决方案1】:

确保您已开启深度测试。即使是组成线条和点的片段也会进行深度测试,因此如果您在线条前面绘制了形状,那么这些形状应该会遮挡线条。

您想查看带有参数GL_DEPTH_TESTglEnable 函数。

【讨论】:

  • 我的 EAGLView.CreateFrameBuffer() 方法中已经定义了以下三行:- GL.ClearDepth (1f); GL.Enable (All.DepthTest); GL.DepthFunc (All.Lequal);。这些顺序是通过复制和粘贴(对不起)产生的,所以我不确定它们是否正确。有什么想法吗?
【解决方案2】:

假设 GL.EnableClientState 是glEnableClientState 的直接模拟,这不是启用多边形偏移的方式。是否有 glEnable 的等价物? 以下对我来说可以获得可见的线框:

 glEnable( GL_POLYGON_OFFSET_FILL );
 // push back the filled faces a touch
 glPolygonOffset( 1, 1 );
 // draw filled faces
 ...
 glDisable( GL_POLYGON_OFFSET_FILL );
 // draw wireframe
 ...

【讨论】:

  • 感谢您这么快回复 ;-) 。您的代码片段概述了我做事的顺序,是的,OpenTK 的 GL 类(此处为 ES11.GL)确实具有等效的 GL.Enable 方法(请参阅opentk.com/files/doc/functions_0x65.html#index_e)。我现在在工作,所以我没有 Mac,但我会在今天晚些时候尝试验证此更改。再次感谢 ;-)
猜你喜欢
  • 2011-04-17
  • 2013-05-27
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
相关资源
最近更新 更多