OpenGL渲染多个三角形条带导致间隙

时间:2011-08-24 21:45:33

标签: c++ qt opengl

我正在使用C ++和Qt作为支持演员,首次涉足OpenGL。

在我的游乐场实现主应用程序之外的功能的数量,我试图从二维浮动数组中绘制相当于网格表面的数量。这个2d数组的索引用于x和z坐标,值是y坐标。

目前我的实施已被窃听。而不是创建一个坚实的表面,有明显的黑色间隙。

Google快速向我展示http://marc.blog.atpurpose.com/2009/10/24/programatically-generating-a-rectangular-mesh-using-single-gl_triangle_strip/,这与我的渲染方法非常相似。但是,在绘制一行三角形并在最后开始一个新的条带后,我终止了我的三角形条带。

下面是一些示例调试输出,显示了我正在创建的顶点:

glBegin
drawing vertex ( 0 , 2.76401 , 3 ) 
drawing vertex ( 0 , 1.82236 , 4 ) 
drawing vertex ( 1 , 1.55657 , 3 ) 
drawing vertex ( 1 , 3.82013 , 4 ) 
drawing vertex ( 2 , 3.1032 , 3 ) 
drawing vertex ( 2 , 2.77563 , 4 ) 
drawing vertex ( 3 , 2.2032 , 3 ) 
drawing vertex ( 3 , 4.49317 , 4 ) 
drawing vertex ( 4 , 0.469515 , 3 ) 
drawing vertex ( 4 , 1.48398 , 4 ) 
drawing vertex ( 5 , 0.301526 , 3 ) 
drawing vertex ( 5 , 0.606281 , 4 ) 
drawing vertex ( 6 , 1.12292 , 3 ) 
drawing vertex ( 6 , 1.98806 , 4 ) 
glEnd/glBegin
drawing vertex ( 0 , 4.31023 , 2 ) 
drawing vertex ( 0 , 2.76401 , 3 ) 
drawing vertex ( 1 , 3.64741 , 2 ) 
drawing vertex ( 1 , 1.55657 , 3 ) 
drawing vertex ( 2 , 2.48897 , 2 ) 
drawing vertex ( 2 , 3.1032 , 3 ) 
drawing vertex ( 3 , 4.54997 , 2 ) 
drawing vertex ( 3 , 2.2032 , 3 ) 
drawing vertex ( 4 , 0.11039 , 2 ) 
drawing vertex ( 4 , 0.469515 , 3 ) 
drawing vertex ( 5 , 1.12043 , 2 ) 
drawing vertex ( 5 , 0.301526 , 3 ) 
drawing vertex ( 6 , 4.27371 , 2 ) 
drawing vertex ( 6 , 1.12292 , 3 ) 
glEnd/glBegin
drawing vertex ( 0 , 0.818045 , 1 ) 
drawing vertex ( 0 , 4.31023 , 2 ) 
drawing vertex ( 1 , 0.886993 , 1 ) 
drawing vertex ( 1 , 3.64741 , 2 ) 
drawing vertex ( 2 , 0.612948 , 1 ) 
drawing vertex ( 2 , 2.48897 , 2 ) 
drawing vertex ( 3 , 4.69348 , 1 ) 
drawing vertex ( 3 , 4.54997 , 2 ) 
drawing vertex ( 4 , 3.56293 , 1 ) 
drawing vertex ( 4 , 0.11039 , 2 ) 
drawing vertex ( 5 , 2.22925 , 1 ) 
drawing vertex ( 5 , 1.12043 , 2 ) 
drawing vertex ( 6 , 0.15616 , 1 ) 
drawing vertex ( 6 , 4.27371 , 2 ) 
glEnd/glBegin
drawing vertex ( 0 , 1.84323 , 0 ) 
drawing vertex ( 0 , 0.818045 , 1 ) 
drawing vertex ( 1 , 2.28323 , 0 ) 
drawing vertex ( 1 , 0.886993 , 1 ) 
drawing vertex ( 2 , 1.1108 , 0 ) 
drawing vertex ( 2 , 0.612948 , 1 ) 
drawing vertex ( 3 , 3.72698 , 0 ) 
drawing vertex ( 3 , 4.69348 , 1 ) 
drawing vertex ( 4 , 4.41645 , 0 ) 
drawing vertex ( 4 , 3.56293 , 1 ) 
drawing vertex ( 5 , 4.69124 , 0 ) 
drawing vertex ( 5 , 2.22925 , 1 ) 
drawing vertex ( 6 , 3.11876 , 0 ) 
drawing vertex ( 6 , 0.15616 , 1 ) 
glEnd

我所看到的截图(不同的顶点值):Gaps!

我正在寻找任何有关我可能做错的线索或见解。正如我所说,我是OpenGL的新手。我没有使用单三角形条带网格方法,因为我认为它将证明最终应用程序存在问题。

更新:我已经玩过我的y值,并注意到当我使用随机数生成y时,渲染只会出现问题

qrand() / (float)(RAND_MAX) * 5.0f

使用常量值(y = 1.0f),y = xy = z % 2 == 0 ? x : xMax - x之类的内容。

3 个答案:

答案 0 :(得分:0)

猜测:

您是否启用了脸部剔除?将顶点发送到openGL的顺序确定三角形是正面还是背面。您可以使用glFrontFace控制哪个方向,CW或CCW(默认为CCW)被视为正面。

尝试禁用面部剔除; glDisable(GL_CULL_FACE);并查看它是否修复了您的图像。

如果这确实是你的问题,你应该保持启用面部剔除,但修复你将顶点发送到openGL的顺序。

答案 1 :(得分:0)

对我来说,openGl已经有一段时间了(然后,它是iPod上的OpenGL-ez)。但渲染看起来像条带不在X,Z的规则网格上。我会减小Y的范围(甚至将其设置为0)来测试你的三角形条。

此外,一切都是以浮动方式发送的吗?我有点怀疑调试输出显示1,2等,而不是1.0,2.0。

答案 2 :(得分:0)

我最终废弃了渲染并使用了一个提供我需要的库(一旦我开始工作)。对于那些感兴趣的人来说,图书馆是QwtPlot3D。它需要对我的需求进行一些严格的性能改进,但它让我可以绕过这个最初的障碍。