我在iOS上使用SceneKit,并且我有一个想要渲染为线框的几何体。所以基本上我只想画线条,所以没有纹理。
我想我可以使用已使用的SCNMaterial的shaderModifiers属性来实现这一点。明暗器修改器示例:
material.shaderModifiers = [
SCNShaderModifierEntryPointFragment: "_output.color.rgb = vec3(1.0) - _output.color.rgb;"
]这个例子显然只是反转了输出的颜色。我对这个'GLSL‘语言一无所知,我必须为着色器片段使用它。
谁能告诉我,我应该使用什么代码作为着色器片段,只绘制边缘,使几何体看起来像一个线框?
或者可能有一种完全不同的方法来将几何体渲染为线框。我很想听你说。
发布于 2017-07-16 01:43:59
尝试将material fillMode设置为.lines (iOS 11+和macOS 10.13+):
sphereNode.geometry?.firstMaterial?.fillMode = .lines
发布于 2015-12-22 01:30:01
现在(至少在Cocoa中)可以使用:
gameView.debugOptions.insert(SCNDebugOptions.showWireframe)或者,如果使用以下命令启用统计信息,则可以交互方式执行此操作:
gameView.showsStatistics = true(gameView是SCNView的一个实例)
发布于 2015-03-03 08:46:43
这不是(完全)答案,因为这是一个没有简单答案的问题。
完全在着色器代码中进行线框渲染比看起来要困难得多,特别是在没有几何着色器的移动设备上。问题是顶点着色器(以及随后的片段着色器)不具备知道多边形边所在位置所需的信息。
我对这个'GLSL‘语言一无所知,我必须为着色器片段使用它。
如果你真的想解决这个问题,你需要学习更多关于GLSL ( OpenGL着色语言)的知识。有大量的书籍和教程可以做到这一点。
一旦你掌握了一些通用学习语言,看看关于这个问题的一些问题(比如this one pulled from the Related sidebar)和other stuff people have written。(请注意,当您寻找特定于移动设备的限制时,OpenGL ES与桌面上的WebGL具有相同的限制。)
使用SceneKit,您可能没有正在处理的几何体的重心坐标顶点属性(也称为SCNGeometrySource),并且您可能不想做生成一个顶点属性的繁重工作。在OS X中,可以使用带有geometryShader的SCNProgram在顶点/碎片着色器运行之前添加重心坐标,但随后必须进行自己的着色(即,不能像使用着色器修改器那样利用SceneKit着色)。而这在iOS中是不可用的-那里的硬件不做几何着色器。如果纹理坐标恰好在您的几何体中对齐,您可以使用纹理坐标来伪造它。
仅使用线条绘制对象可能会更简单-尝试从原始(实体)几何体的源和元素创建新的SCNGeometry,但在重新创建SCNGeometryElement时,请使用SCNPrimitiveTypeLine。
https://stackoverflow.com/questions/28793982
复制相似问题