我正在使用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
我所看到的截图(不同的顶点值):
我正在寻找任何有关我可能做错的线索或见解。正如我所说,我是OpenGL的新手。我没有使用单三角形条带网格方法,因为我认为它将证明最终应用程序存在问题。
更新:我已经玩过我的y值,并注意到当我使用随机数生成y时,渲染只会出现问题
qrand() / (float)(RAND_MAX) * 5.0f
使用常量值(y = 1.0f
),y = x
或y = z % 2 == 0 ? x : xMax - x
之类的内容。
答案 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。它需要对我的需求进行一些严格的性能改进,但它让我可以绕过这个最初的障碍。