我有一個場景有許多對象,都有不同的紋理。由於某種原因,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