我在iOS上使用SceneKit,我想要渲染为线框的几何体。所以基本上我只想绘制线条,所以没有纹理。
我发现我可以使用所使用的shaderModifiers
的{{1}}属性来完成此任务。着色器修改器的示例:
SCNMaterial
这个例子显然只是反转输出颜色。我对此事一无所知' GLSL'语言我必须用于着色器片段。
任何人都可以告诉我,我应该使用哪些代码作为着色器片段,仅在边缘附近绘制,以使几何看起来像线框?
或者可能有另一种方法将几何体渲染为线框。我很乐意听到它。
答案 0 :(得分:11)
尝试将材料fillMode设置为.lines(iOS 11+和macOS 10.13 +):
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
window.close();
}
答案 1 :(得分:4)
现在有可能(至少在Cocoa中):
gameView.debugOptions.insert(SCNDebugOptions.ShowWireframe)
或者如果使用以下命令启用统计信息,则可以以交互方式执行:
gameView.showsStatistics = true
(gameView是SCNView
)的实例
答案 2 :(得分:2)
这不是(完全)一个答案,因为这是一个没有简单答案的问题。
完全使用着色器代码进行线框渲染比看起来要困难得多,尤其是在没有几何着色器的移动设备上。问题是顶点着色器(以及随后的片段着色器)只是没有知道多边形边缘所在的信息。
我对用于着色器片段的'GLSL'语言一无所知。
如果你真的想解决这个问题,你需要学习更多关于GLSL(OpenGL着色语言)的知识。那里有大量的书籍和教程。
一旦你掌握了一些GLSL,请看一下有关问题的一些问题(如this one pulled from the Related sidebar)和other stuff people have written。 (请注意,当您在寻找特定于移动设备的限制时,OpenGL ES与桌面上的WebGL具有相同的限制。)
使用SceneKit,您可能没有为您正在使用的几何体设置重心坐标顶点属性(又名SCNGeometrySource
)的额外皱纹,您可能不想这样做生成一个人的艰苦工作。在OS X中,您可以使用带有SCNProgram
的{{1}}在顶点/片段着色器运行之前添加重心坐标 - 但是您必须自己进行着色(即您无法搭载使用着色器修改器就像使用SceneKit着色一样。这在iOS中不可用 - 硬件没有几何着色器。如果碰巧在几何体中排成一行,您可以使用纹理坐标伪造它。
使用直线绘制对象可能更容易 - 尝试从原始(实体)几何体的源和元素创建新的geometryShader
,但在重新创建SCNGeometry
时,请使用{{ 1}}。