【发布时间】:2017-01-25 06:55:18
【问题描述】:
我们的应用程序允许用户上传自定义图像作为 SCNNodes 的材料,您可以从下面的屏幕截图和代码中看到。
屏幕截图 1 显示材质使用比例为 1 时的 SCNNodes。
屏幕截图 2 显示了相同的节点,比例为 2。
虽然使用 2 的比例会显着锐化纹理/材质,但由于 wrapS 和 wrapT 属性,它也会重复图像。对这些属性使用 Mirror 或 Clamp 而不是 Repeat 没有帮助。
在 SceneKit 或 UIKit 中,您提供更高分辨率的图像并按比例缩小以提高不同设备的清晰度。例如,对于一个 50x50 的按钮,您提供一个 100x100 的图像。通过在底部的 UIKit 组件中查看相同图像的锐度,您可以看到相同图像的 UIKit 锐度和 SceneKit 锐度之间的对比。
1) 您如何将相同的原理应用于 SceneKit?
2) 更重要的是,如何在避免重复行为的同时实现截图 2 的纹理/材质清晰度?
代码:
// Create box geometry
let box = SCNBox(width: 1.0, height: 1.0, length: 1.0, chamferRadius: 0.0)
box.firstMaterial!.diffuse.contents = style.getContents() // This returns a UIImage
box.firstMaterial!.specular.contents = UIColor.whiteColor()
// Increase resolution for image styles
let scale = Float(2)
if style.type == .Image {
box.firstMaterial!.diffuse.contentsTransform = SCNMatrix4MakeScale(scale, scale, scale)
//box.firstMaterial!.locksAmbientWithDiffuse = true
box.firstMaterial!.diffuse.wrapS = .Repeat
box.firstMaterial!.diffuse.wrapT = .Repeat
box.firstMaterial!.diffuse.mipFilter = .Linear
}
纹理:
【问题讨论】:
-
您是否将这些图像添加到几何体的面?例如,它们是立方体的侧面还是类似的东西?
-
是的,代码在问题中。将澄清问题,但内容正在设置为 UIImage。
-
@Confused 如果你想重现盒子,还添加了纹理。
-
我认为你需要更大的纹理。没有其他方法可以获得我能想到的清晰度。
-
@Confused 谢谢。我们需要什么尺寸?使用 SpriteKit 和 UIKit,很容易估计纹理大小,因为它与组件的大小有关(例如,100px 图像对应 50px 按钮对应 2x 分辨率)。
标签: ios textures scenekit scene scnnode