0

我所拥有的:一个 GLKViewController 及其关联的视图,它在预期的位置、比例、颜色等中绘制我的立方体对象(如果我愿意,可以旋转:)。

*我想要的:而不是立方体,我想指定一个几何对象,它是一个顶点对数组,并说服 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 问题,但大多数都归结为线条或三角形网格,否则不太适用。有些与设置问题相关(已经消除,因为我的立方体画得很好。)对于其他非 SO 答案、教程等,类似的不太正确。

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

虽然我的最终结果几何不是立方体,但我可以在这里绘制一个基本的线框立方体作为概念验证。不过,再一次,不使用三角形或线条,因为我的最终结果不适合这些。

谁能给我任何指向示例代码的指针,这些示例代码可以完成我正在寻找的那种裸线段绘图?

谢谢!

4

1 回答 1

1

哎呀,哦!(我讨厌这种情况发生!)

在继续尝试追踪这一点的同时,我遇到了这个相关的 SO 问题,他们说他们正在成功地画线。将该代码与我的代码进行比较,我注意到我错误地将“每个顶点的坐标数”从 3(正确值)更改为 2。似乎我滑了一个大脑齿轮并将该值误认为“每件的坐标数”几何”(三角形 3 个,线条 2 个。)

一旦我解决了这个问题,我的线条的“随机性”就被理顺了,现在一切都很完美。

我打算撤回/删除这个问题,但决定留下它,希望我的错误(和解决方案)能够帮助别人。上面我不正确的代码带有更正的注释。

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

于 2013-05-28T00:08:05.880 回答