Tom*_*ren 9 shader fragment-shader ios scenekit
我在iOS上使用SceneKit,我想要渲染为线框的几何体.所以基本上我只想绘制线条,所以没有纹理.
我发现我可以使用shaderModifiersused 的属性SCNMaterial来实现这一点.着色器修改器的示例:
material.shaderModifiers = [
SCNShaderModifierEntryPointFragment: "_output.color.rgb = vec3(1.0) - _output.color.rgb;"
]
Run Code Online (Sandbox Code Playgroud)
这个例子显然只是反转输出颜色.我对用于着色器片段的'GLSL'语言一无所知.
任何人都可以告诉我,我应该使用哪些代码作为着色器片段,仅在边缘附近绘制,以使几何看起来像线框?
或者可能还有一种将几何体渲染为线框的方法.我很乐意听到它.
现在有可能(至少在可可中):
gameView.debugOptions.insert(SCNDebugOptions.ShowWireframe)
Run Code Online (Sandbox Code Playgroud)
或者您可以通过以下方式交互式地进行统计:
gameView.showsStatistics = true
Run Code Online (Sandbox Code Playgroud)
(gameView是的实例SCNView)
这不是(完全)一个答案,因为这是一个没有简单答案的问题。
\n\n完全在着色器代码中进行线框渲染比看起来应该要困难得多,尤其是在没有几何着色器的移动设备上。问题在于顶点着色器(以及随后的片段着色器)没有了解多边形边在哪里所需的信息。
\n\n\n\n\n我对必须用于着色器片段的“GLSL”语言一无所知。
\n
如果您确实想解决这个问题,您需要更多地了解 GLSL(OpenGL 着色语言)。有大量的书籍和教程。
\n\n一旦您掌握了一些 GLSL,请查看一些问题(例如从相关侧边栏拉出的这个问题)以及人们写的其他内容有关该问题的其他内容。(请注意,当您寻找特定于移动设备的限制时,OpenGL ES 与桌面上的 WebGL 具有相同的限制。)
\n\n使用 SceneKit,您可能会遇到额外的问题,即您可能没有SCNGeometrySource正在使用的几何体的重心坐标顶点属性(也称为 ),并且您可能不想进行生成的艰苦工作一。在 OS X 中,您可以使用SCNProgram和geometryShader来添加重心坐标,但随后您必须进行自己的着色(即您不能像您一样使用 SceneKit 着色)可以使用着色器修改器)。这在 iOS \xe2\x80\x94 中不可用,那里的硬件不支持几何着色器。如果纹理坐标恰好在几何体中对齐,您也许可以使用纹理坐标来伪造它。
使用线 \xe2\x80\x94 绘制对象可能会更容易,尝试SCNGeometry从原始(实体)几何体的源和元素中创建一个新对象,但是在重新创建时SCNGeometryElement,请使用SCNPrimitiveTypeLine.
| 归档时间: |
|
| 查看次数: |
4781 次 |
| 最近记录: |