ios - 如何使用GLKit绘制线条(线框)?

标签 ios opengl-es-2.0

我拥有的:一个 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/

相关文章:

ios - 在 iPhone 7 的顶部和底部扬声器之间平移声音

ios - 我怎样才能加快 UITableView 的速度?

ios - 在 GRDB 和 Swift 3 中使用 rows.next() 编译错误

ios - 无法在 CADisplayLink 渲染循环中绑定(bind) EAGLDrawable

ios - 无论设备方向如何,如何将 GLKView(或 UIView)保持在纵向模式?

ios - 如何使用 Facebook 图形 API 识别 Facebook 帖子是否已被点赞?

ios - 同步/异步的行为是否类似于串行/并发,即它们都控制DispatchQueues还是仅执行同步/异步控制线程

java - OGL ES 2.0 平面纹理

Android OpenGL ES 2 和 armeabi-v7a

android c++ 未定义对 eglGetCurrentContext 的引用