我有一个场景有许多对象,都有不同的纹理。由于某种原因,2个物体对它们有红色调,即使它们的纹理没有红色。你仍然可以看到纹理中的图案,它只是在红色上有不同的阴影。 (在模拟器上,2个物体具有黑色和白色纹理以及红色设备色调)有没有人知道为什么会发生这种情况?其他对象工作正常。Scenekit一些纹理有红色色调
回答
对于材质属性,如metalness
和roughness
SceneKit支持1通道(灰度)图像。为了节省内存,这些图像保存为灰度纹理,它们不会转换为每个通道中具有相同数据的RGB纹理。
当您为“彩色”材质属性(例如diffuse
)使用这样的图像时,SceneKit会询问样本的红色,绿色和蓝色分量,但绿色和蓝色将始终为0,图像将会出现红。
一个不幸的解决方案在于在图像编辑应用程序中重新构建纹理,以便将其保存为RBG而不是灰度。
您也可以尝试着色改性剂从灰度转换为RGB:
_surface.diffuse.rgb = _surface.diffuse.rrr;
我有一个索引颜色质地为png同样的问题。
我解决这个问题的方法是将索引颜色png转换为真彩色png。
它可能是一个NSImage的错误。当我使用CGImage加载png文件时,它不会导致任何问题。
let url = URL(fileURLWithPath: pngFileName, relativeTo: directoryPath)
// let reddishImage = NSImage(contentsOf: url)
let cgDataProvider = CGDataProvider(url: url as CFURL)!
let cgImage = CGImage(pngDataProviderSource: cgDataProvider, decode: nil, shouldInterpolate: false, intent: CGColorRenderingIntent.defaultIntent)!
let imageSize = CGSize(width: cgImage.width, height: cgImage.height)
let correctImage = NSImage(cgImage: cgImage, size: imageSize)
我已经有与加载(灰色).png图像作为纹理SCNMaterial
相同的问题。
在模拟器上它表现很好。但是在设备上,所有只有黑色,白色或灰色的图像呈现红色基色。
let texture = SCNMaterial()
texture.diffuse.contents = UIImage(named: "rgb image with only gray")
我通过创建从给定UIImage
新UIImage
解决了这个问题:
let texture = SCNMaterial()
var newImage: UIImage?
if let textureImage = UIImage(named: "rgb image with only gray") {
UIGraphicsBeginImageContext(textureImage.size)
let width = textureImage.size.width
let height = textureImage.size.height
textureImage.draw(in: CGRect(x: 0, y: 0, width: width, height: height))
newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
texture.diffuse.contents = newImage
HTH
这个工程!我在某些设备(iPhone X,我的纯白色+ alpha纹理以红色显示)而不是其他设备(iPad Pro,它看起来正确)上遇到问题,并且此解决方法解决了此问题。很明显,原始图像资源或UIImage加载的内容可能会发生变化,可能会转换为单通道图像而不是RGB,导致仅在某些设备上将其解释为红色。 – Clafou
- 1. Scenekit - 为相机添加红色色调
- 2. iOS + SceneKit:如何将纹理着色器应用于纹理?
- 3. SDL OpenGL纹理困扰绿色色调
- 4. Opengl渲染深度纹理 - 红色?
- 5. openGL纹理只显示纹理的红色部分
- 6. 设置纹理有色CC3MeshNode
- 7. glColor着色所有纹理
- 8. OpenGL ES 2.0/MonoTouch:纹理是彩色的红色
- 9. SceneKit地板纹理改变了Xcode 8的颜色
- 10. 处理js红色()绿色()蓝色()
- 11. JOGL白色纹理?
- 12. 色彩映射表红色色调
- 13. 一面有纹理其他彩色黄色XNA C#
- 14. 使用着色器更改纹理某些片段的颜色
- 15. OpenGL,Shader Model 3.3纹理:黑色纹理?
- 16. XNA - UV纹理或着色器纹理?
- 17. 获取一些颜色的调色板
- 18. 用于纹理,颜色和纹理/颜色的片段着色器GLSL
- 19. 将颜色与纹理颜色不同
- 20. Android GLUtils.texImage2D在使用OpenGLES 2.0着色器时产生一些黑色纹理
- 21. 利用现有的OpenGL纹理scenekit
- 22. 有三个用户点击名为红色,蓝色,粉红色和一个Jlabel的某些JButton。
- 23. 加载一些纹理与iPhone的openGL时奇怪的颜色
- 24. 与纹理区域的白色屏幕与一些图像
- 25. 卸下非红色调色像素
- 26. shape3d纹理或颜色没有显示
- 27. OpenGL GL_TEXTURE_CUBE_MAP没有纹理/黑色
- 28. OpenGL纹理,没有错误,但灰色
- 29. 颜色和纹理有什么区别?
- 30. libGDX所有纹理/精灵白色块
我不认为我的理解。我的纹理已经是RGB。我只是将纹理拖入模型中,就像我对每个对象所做的一样。 – Colddog
并说我的纹理是RGB,我的意思是它有颜色。 – Colddog
我可能误解了你的意思,“在模拟器上2个物体有黑白纹理和红色的装置阴影”)。你可以发布图片的图片以及它们在场景中的外观吗? – mnuages