我拥有的东西:一个GLKViewController及其关联的视图,用于绘制我的立方体对象(如果我想要的话,在预期的位置,比例,颜色等处旋转)
* 我想要的是什么:我想指定一个具有几何体的对象,而不是立方体,这是一个顶点对数组,并说服GLKit(暗示:OpenGL-ES-2)到在视图空间中将每对顶点绘制为线段。
注意:我的线段 NOT 形成一条线条,因此没有线条。我的线段将 NOT 形成三角形作为网格(或任何其他几何体)的一部分。它们只是空间中的单独线段,彼此无关。想想“拾取棒”或类似的东西。
我尝试了什么:我创建了一个顶点对(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答案,教程等。
注意:我依赖于内置着色器(也就是说,我的应用中没有任何创建着色器代码。)
虽然我的最终结果几何是 NOT 一个立方体,但我可以在这里绘制一个基本的线框多维数据集作为概念验证。但是,不使用三角形或线条,因为我的最终结果不适合那些。
任何人都可以给我任何指向示例代码的指针吗?我会查看哪种裸线段绘图?
谢谢!
答案 0 :(得分:1)
哎呀,哦! (当发生这种情况时,我<恨> !)
在继续试图追踪这一情况的同时,我跑过this related SO question,他们说他们已成功画线。将该代码与我的代码进行比较,我注意到我错误地将“每个顶点的坐标数”从3(正确的值)更改为2.似乎我滑倒了一个大脑齿轮并将该值误认为“每个坐标的坐标数”几何“(3代表三角形,2代表行。)
一旦我解决了这个问题,我的线条的“随机性”就会被理顺,现在一切都很完美。
我打算撤回/删除这个问题,但决定留下它,希望我的错误(和解决方案)能够教导别人。我上面的错误代码会对更正进行评论。
顺便说一句,我注意到在另一篇文章中,“stride”值被错误地设置为3(应该为0.)我评论说,希望他们能更新代码。