我拥有的:一个 GLKViewController 及其关联的 View ,用于在预期的位置、比例、颜色等中绘制我的立方体对象(旋转,如果我想要的话:)。
*我想要的:而不是立方体,我想指定一个具有几何图形的对象,该几何图形是顶点对数组,并说服 GLKit(隐含:OpenGL-ES-2)在我的 View 空间中将每对顶点绘制为线段。
注意:我的线段不形成线带,所以没有线带。我的线段不形成作为网格(或任何其他几何体)一部分的三角形。它们只是空间中的单独线段,彼此没有关系。想想“拾取棒”或类似的东西。
我尝试过的:我创建了一个顶点对 (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 答案、教程等,类似的不太正确。
注意:我依赖内置着色器(也就是说,我的应用程序中没有任何创建着色器代码。)
虽然我的最终结果几何体不是一个立方体,但我可以在这里绘制一个基本的线框立方体作为概念验证。不过,再次强调,不要使用三角形或线带,因为我的最终结果不适合这些。
任何人都可以给我任何指向示例代码的指针,该示例代码可以执行我正在寻找的那种裸线段绘图吗?
谢谢!
最佳答案
哎呀,哦! (我讨厌这种情况发生!)
在继续尝试追踪此问题时,我遇到了 this related SO question他们说他们成功地画了线。将该代码与我的代码进行比较,我注意到我错误地将“每个顶点的坐标数”从 3(正确值)更改为 2。似乎我忽略了一个大脑齿轮,并将该值误认为是“每 block 的坐标数”几何形状”(3 个用于三角形,2 个用于直线。)
一旦我解决了这个问题,我的线条的“随机性”就得到了理顺,现在一切都很完美。
我本来打算撤回/删除该问题,但决定保留它,希望我的错误(和解决方案)能够教导其他人。上面我的错误代码已通过更正进行了注释。
顺便说一句,我注意到在那篇文章中,“步幅”值被错误地设置为 3(应该是 0。)我发表了评论,希望他们会更新代码。
关于ios - 如何使用GLKit绘制线条(线框)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16780229/