2013-05-27 24 views
0

我有什么:,吸引了我的多维数据集对象(旋转,如果我想:)预期的位置,规模,颜色等。GLKViewController及其相关视图如何使用GLKit绘制线条(线框)?

* 我想要什么:相反比立方体,我想指定一个对象的几何体是顶点对的数组,并说服GLKit(暗示:OpenGL-ES-2)在我的视图空间中绘制每对顶点作为一个线段。

注:我的线段做不是形成一个线条,所以没有线条。我的线段不是将三角形作为网格(或任何其他几何图形)的一部分。它们只是空间中的单个线段,彼此之间没有任何关系。想想“拿起棍子”或类似的东西。

我试了一下:我创建顶点对(GLKVector3)和顶点颜色的像这样的数组(GLKVector4):

lineVertices = calloc (verts, sizeof(GLKVector3)); 
colorVertices = calloc (verts, sizeof(GLKVector4)); 

lineVertices[index++] = GLKVector3Make(x, 0, z); 
lineVertices[index++] = GLKVector3Make(x2, 0, z2); 
// etc., snip 
colorVertices[cIndex++] = GLKVector4Make(1, 0.0, 1, 1); 
// etc., snip 

...,并试图拉拢他们是这样的:

glEnable(GL_DEPTH_TEST); 

glEnableVertexAttribArray(GLKVertexAttribPosition); 
glVertexAttribPointer(GLKVertexAttribPosition, 2, // ** WRONG ** "2" should be "3" 
          GL_FLOAT, GL_FALSE, 0, lineVertices); 

glEnableVertexAttribArray(GLKVertexAttribColor); 
glVertexAttribPointer(GLKVertexAttribColor, 4, 
           GL_FLOAT, GL_FALSE, 0, colorVertices); 

glDrawArrays(GL_LINES, 0, lineVertCount); 

glDisableVertexAttribArray(GLKVertexAttribPosition); 
glDisableVertexAttribArray(GLKVertexAttribColor); 

(所有这些代码是在正确的地方,用事实证明我的立方体对象,使用相同的基础设施建设,正确绘制作为证明。)

当我尝试时,我得到了:只有一些线段画出来,它们似乎指向每一个方向,而不是我想要看到的可爱图案。我似乎无法辨别他绘制的线段的模式。这是因为如果我得到随机内存,但我lineVertices阵列是正确的

作业完成(选中):我看到很多是接近的,但做题最移交给线条或三角网格或其他方式不完全适用。有些是与设置有关的问题(已经消除,因为我的立方体绘制得很好)。对于其他非SO解答,教程等类似的不太正确。

注意:我依靠内置着色器(也就是说,我没有任何创建着色器代码在我的应用程序。)

虽然我的归宿几何不是一个立方体,我会没事用绘制基本线框立方体作为证据概念,在这里。同样,不使用三角形或线条,因为我的最终结果不适合这些。

任何人都可以给我指向示例代码的任何指针,它可以做我正在寻找的那种裸线段绘图吗?

谢谢!

回答

1

糟糕! (我讨厌当发生这种情况!)

虽然继续尝试跟踪这一点,我跑过this related SO question他们说,他们说他们成功画线。将该代码与我的代码进行比较,我发现我错误地将“每个顶点的坐标数”从3(正确值)改为2.似乎我滑倒了一个大脑齿轮,并将该值误认为“每个坐标的坐标数几何形状“(3个用于三角形,2个用于线条。)

一旦我解决了这个问题,我的线条的“随机性”就变得清晰了,现在一切正常。

我打算撤回/删除这个问题,但决定放弃它,希望我的错误(和解决方案)能够用来教别人。我上面的不正确的代码被修正后评论。

顺便说一句,我注意到在另一篇文章中,“步幅”值被错误地设置为3(应该是0.)我评论说,希望他们会更新代码。