首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SCNGeometry渲染为线框

将SCNGeometry渲染为线框
EN

Stack Overflow用户
提问于 2015-03-01 21:17:32
回答 3查看 6.1K关注 0票数 12

我在iOS上使用SceneKit,并且我有一个想要渲染为线框的几何体。所以基本上我只想画线条,所以没有纹理。

我想我可以使用已使用的SCNMaterialshaderModifiers属性来实现这一点。明暗器修改器示例:

代码语言:javascript
复制
material.shaderModifiers = [
    SCNShaderModifierEntryPointFragment: "_output.color.rgb = vec3(1.0) - _output.color.rgb;"
]

这个例子显然只是反转了输出的颜色。我对这个'GLSL‘语言一无所知,我必须为着色器片段使用它。

谁能告诉我,我应该使用什么代码作为着色器片段,只绘制边缘,使几何体看起来像一个线框?

或者可能有一种完全不同的方法来将几何体渲染为线框。我很想听你说。

EN

回答 3

Stack Overflow用户

发布于 2017-07-16 01:43:59

尝试将material fillMode设置为.lines (iOS 11+和macOS 10.13+):

sphereNode.geometry?.firstMaterial?.fillMode = .lines

票数 21
EN

Stack Overflow用户

发布于 2015-12-22 01:30:01

现在(至少在Cocoa中)可以使用:

代码语言:javascript
复制
gameView.debugOptions.insert(SCNDebugOptions.showWireframe)

或者,如果使用以下命令启用统计信息,则可以交互方式执行此操作:

代码语言:javascript
复制
gameView.showsStatistics = true

(gameView是SCNView的一个实例)

票数 7
EN

Stack Overflow用户

发布于 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中,可以使用带有geometryShaderSCNProgram在顶点/碎片着色器运行之前添加重心坐标,但随后必须进行自己的着色(即,不能像使用着色器修改器那样利用SceneKit着色)。而这在iOS中是不可用的-那里的硬件不做几何着色器。如果纹理坐标恰好在您的几何体中对齐,您可以使用纹理坐标来伪造它。

仅使用线条绘制对象可能会更简单-尝试从原始(实体)几何体的源和元素创建新的SCNGeometry,但在重新创建SCNGeometryElement时,请使用SCNPrimitiveTypeLine

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28793982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档