- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个描绘人体的几何节点。物体的 Material 是透明的
let node = newScene.rootNode.childNode(withName: "man_mesh", recursively: true)
let nodeMaterial = node?.geometry?.firstMaterial
nodeMaterial?.emission.contents = UIColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 1.0)
nodeMaterial?.transparencyMode = .rgbZero
nodeMaterial?.transparent.contents = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
我试图获得的效果是让对象在面向相机的区域完全透明,但随着多边形面向侧面而变得更加不透明……这会产生一种 Shiny 的蓝色边缘。像这样:
知道如何创建这种效果吗?
谢谢
编辑:另一个有趣的地方:SceneKit 似乎确实支持菲涅耳效果。效果会影响反射率贴图 - 应该是这样,但是,一旦你对对象应用透明度,它也会影响反射率(完全透明也会使反射率消失) - 我认为这是 Apple 的概念错误 - Material 可以透明并仍然反射光!
最佳答案
我做了一些研究并找到了答案。要实现此效果,您可以使用以下代码。
func ghostEffect(scene: SCNScene) {
let sphere = SCNSphere(radius: 3)
let material = SCNMaterial()
material.diffuse.contents = UIColor.black
material.reflective.contents = UIColor(red: 0, green: 0.764, blue: 1, alpha: 1)
material.reflective.intensity = 3
material.transparent.contents = UIColor.black.withAlphaComponent(0.3)
material.transparencyMode = .default
material.fresnelExponent = 4
sphere.materials = [material]
let node = SCNNode(geometry: sphere)
scene.rootNode.addChildNode(node)
}
Explanation from: SCNMaterial.
透明 - An object that determines the opacity of each point in a material
反光 - An object that defines the reflected color for each point on a surface
fresnselExponent - A factor affecting the material’s reflectivity
这种方法可以应用于任何 3D 对象。
附言希望它会有用。
关于iOS SceneKit - 为 Material 透明度添加菲涅耳效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43843110/
为什么当我输入 bash 时:if [ false ];然后 echo “确定”; fi; 结果是 ok 字符串?使用变量时我也可以获得类似的结果:ok=false;如果 [$确定];然后 echo
请帮忙。执行此操作时出现错误。我该如何修复 if [ awk 'BEGIN{print 0.4*10}' > 1 -eq 1 ]; then echo YES; fi 最佳答案 shell 语法一开始
我是一名优秀的程序员,十分优秀!