2016-06-03 18 views
0

Ich experimentiere mit dem Google-VR iOS SDK. Ich habe eine sehr einfache SceneKit-Szene, die ein einzelnes strukturiertes Objekt enthält. Dies wird in der GVRCardboardViewDelegate-Methode drawEye mit einem SCNRenderer gerendert. Wenn vrModeEnabled in der GVRCardboardView auf false gesetzt ist, wird das Objekt korrekt gerendert, aber wenn es auf "True" gesetzt wird, wird die Textur nicht korrekt angewendet. Siehe das Bild unten.Texturen werden nicht korrekt angezeigt, wenn GoogleVR und SceneKit verwendet werden

Nach weiteren Untersuchungen habe ich festgestellt, dass das Laden einer Szene mit einem strukturierten Objekt aus SceneKit .SCN-Datei funktioniert. Das Problem tritt auf, wenn eine OBJ-Datei geladen wird (und es ist .mtl Datei und jpg Textur) in eine SCNNode von Modelio wie folgt aus:

let stageURL = NSBundle.mainBundle().URLForResource("newStage", withExtension: "obj", subdirectory: "Art.scnassets") 
let stageAsset = MDLAsset(URL: stageURL) 
let stageObject = asset.objectAtIndex(0) 
let stage = SCNNode(MDLObject: stageObject) 
scene.addChildNode(stage) 

Es scheint, wie es ein OpenGL-Zustand Problem sein könnte (und möglicherweise ein Fehler in ModelIO), aber ich konnte keine Lösung oder Workaround finden. Irgendwelche Vorschläge?

Example of texture appearance. Top vrModeEnabled = false, bottom vrModeEnabled = true

Example of texture appearance. Top vrModeEnabled = false, bottom vrModeEnabled = true

Antwort

1

Update: die tatsächliche Lösung war einfach. Aus irgendeinem unbekannten Grund wurde die Textur-Transformation durcheinander gebracht. Wenn Sie dem Code in der Frage die folgenden Zeilen hinzufügen, wird die Textur wie erwartet angezeigt.

var transformForTexture = SCNMatrix4MakeScale(1, -1, 1); 
transformForTexture = SCNMatrix4Translate(transformForTexture, 0, 1, 0) 
stage.geometry?.firstMaterial?.diffuse.contentsTransform = transformForTexture 

Ursprüngliche Abhilfe:

eine OBJ-Datei mit Modelio Laden wird implizit die dazugehörige Material Beschreibungsdatei verwenden (die die gleichen Dateinamen wie die OBJ-Datei hat jedoch mit der Erweiterung .mtl) zur Verfügung zu stellen Texturen und Materialeigenschaften für die Geometrie. Durch das Entfernen der Materialdatei und das Laden der Textur wurde das Problem explizit behoben.

Dies ist keine ideale Lösung, aber eine angemessene Problemumgehung, bis ich Zeit habe, die genaue Ursache zu debuggen.

Beachten Sie, dass ich vor dem Erreichen dieser Lösung versucht habe, die Textureigenschaften in der SCNMaterialProperty auf dem diffusen Material des Knotens zu aktualisieren, aber dies hatte keine Auswirkungen.