CALayer als diffusen Inhalt von SCNMaterial einstellen

Ich habe in den letzten Tagen vergeblich im Internet gesucht. Leider ist die Dokumentation von Apple zu diesem speziellen Problem vage und es ist kein Beispielcode verfügbar (zumindest habe ich das herausgefunden). Was scheint das Problem zu sein, das Sie vielleicht fragen ...

Ich versuche, eine uiview-Ebene als Inhalt des Materials festzulegen, das zum Rendern des Bildschirms eines iPhone-Modells verwendet wird (Ja, trippy: P). Die UV-Zuordnung des iPhone-Bildschirms ist von 0 bis 1 festgelegt, sodass die Zuordnung der Textur / Ebene auf den Texeln kein Problem darstellt.

So wird diese Ebene nicht wie das linke Bild auf dem iPhone gerendert. Stattdessen wird sie wie das rechte Bild auf dem iPhone gerendert.

Correct Render Incorrect Render

Beachten Sie auch, dass, wenn ich einen Haltepunkt setze, den tatsächlichen iPhone-Knoten debugge und ihn in Xcode anzeige, ein völlig anderes Rendering angezeigt wird und die Ebene zur Hälfte repariert wird, wenn ich die Ausführung fortsetze:

Now then ... WIE behebe ich dieses Problem ??? Ich habe versucht, mit der Transformationsmatrix für den diffusen Inhalt zu spielen, aber nichts wird repariert. Ich habe auch versucht, die Größe von UIView auf 256x256 zu ändern (da die UV-Größe 256x256 zu sein scheint, wie in Blender - dem 3D-Modellierungspaket - gezeigt), aber das behebt nichts.

Hier ist der Code für die Ebene:

UIView *screen = [[UIView alloc] initWithFrame:self.view.bounds];
screen.backgroundColor = [UIColor redColor];

UIView *temp = [[UIView alloc] initWithFrame:CGRectMake(0, 0, screen.bounds.size.width, 60)];
temp.backgroundColor = [UIColor colorWithRed:0 green:(112.f/255.f) blue:(235.f/255.f) alpha:1];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectInset(temp.bounds, 40, 0)];
label.frame = CGRectOffset(label.frame, 40, 0);
label.textColor = [UIColor colorWithRed:0 green:(48.f/255.f) blue:(84.f/255.f) alpha:1];
label.text = @"Select Track";
label.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:30];
label.minimumScaleFactor = 0.001;
label.adjustsFontSizeToFitWidth = YES;
label.lineBreakMode = NSLineBreakByClipping;
[temp addSubview:label];

UIView *separator = [[UIView alloc] initWithFrame:CGRectMake(0, temp.bounds.size.height - 2, temp.bounds.size.width, 2)];
separator.backgroundColor = [UIColor colorWithRed:0 green:(48.f/255.f) blue:(84.f/255.f) alpha:1];
[temp addSubview:separator];
[screen addSubview:temp];
screen.layer.contentsGravity = kCAGravityCenter;

Bearbeite
Was noch seltsamer ist, ist dass, wenn ich ein UIImage der Ansicht mit erfassen:

- (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;
}

und benutze das als Inhalt der Diffuse ... alles funktioniert einwandfrei ?! Es ist wirklich seltsam und frustrierend, da die Größe des Bildes genau der des uiview entspricht ...

Edit 2

m Ende habe ich nur ein Bild der Ansicht als Textur verwendet, wodurch die Dinge viel statischer werden, als ich es brauchte. Ich werde dies nicht als Antwort festlegen, da ich immer noch auf eine korrekte Behebung dieses Problems warten werde, auch wenn es noch lange dauert. Wenn Sie also eine Antwort haben und dieses Thema schon lange geöffnet ist, stoßen Sie sie bitte an, wenn Sie können. Die Dokumentation in diesem Abschnitt ist einfach so schlecht.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage