Geometría personalizada de iOS en SceneKit

Tengo problemas para tratar de get un quad simple con un map de textura para ejecutarlo en el Simulador de iOS. He leído todas las demás preguntas aquí que tratan sobre cosas similares y estoy atrapado. El resultado se ve así:

introduzca la descripción de la imagen aquí

La textura es esta:

introduzca la descripción de la imagen aquí

Mi código es el siguiente:

// v1 +----+ v0 // | | // v2 +----+ v3 SCNVector3 vertices[] = { SCNVector3Make( 5.0, 5.0, 0.0), SCNVector3Make( -5.0, 5.0, 0.0), SCNVector3Make( -5.0, -5.0, 0.0), SCNVector3Make( 5.0, -5.0, 0.0) }; SCNVector3 normals[] = { SCNVector3Make( 0.0f, 0.0f, 1.0), SCNVector3Make( 0.0f, 0.0f, 1.0), SCNVector3Make( 0.0f, 0.0f, 1.0), SCNVector3Make( 0.0f, 0.0f, 1.0) }; CGPoint textureCoordinates[] = { CGPointMake( 1.0, 1.0), CGPointMake( 0.0, 1.0), CGPointMake( 0.0, 0.0), CGPointMake( 1.0, 0.0) }; NSUInteger vertexCount = 4; NSMutableData *indicesData = [NSMutableData data]; UInt8 indices[] = { 0, 1, 2, 0, 2, 3}; [indicesData appendBytes:indices length:sizeof(UInt8)*6]; SCNGeometryElement *indicesElement = [SCNGeometryElement geometryElementWithData:indicesData primitiveType:SCNGeometryPrimitiveTypeTriangles primitiveCount:2 bytesPerIndex:sizeof(UInt8)]; NSMutableData *vertexData = [NSMutableData dataWithBytes:vertices length:vertexCount * sizeof(SCNVector3)]; SCNGeometrySource *verticesSource = [SCNGeometrySource geometrySourceWithData:vertexData semantic:SCNGeometrySourceSemanticVertex vectorCount:vertexCount floatComponents:YES componentsPerVector:3 bytesPerComponent:sizeof(float) dataOffset:0 dataStride:sizeof(SCNVector3)]; NSMutableData *normalData = [NSMutableData dataWithBytes:normals length:vertexCount * sizeof(SCNVector3)]; SCNGeometrySource *normalsSource = [SCNGeometrySource geometrySourceWithData:normalData semantic:SCNGeometrySourceSemanticNormal vectorCount:vertexCount floatComponents:YES componentsPerVector:3 bytesPerComponent:sizeof(float) dataOffset:0 dataStride:sizeof(SCNVector3)]; NSMutableData *textureData = [NSMutableData dataWithBytes:textureCoordinates length:vertexCount * sizeof(CGPoint)]; SCNGeometrySource *textureSource = [SCNGeometrySource geometrySourceWithData:textureData semantic:SCNGeometrySourceSemanticTexcoord vectorCount:vertexCount floatComponents:YES componentsPerVector:2 bytesPerComponent:sizeof(float) dataOffset:0 dataStride:sizeof(CGPoint)]; SCNGeometry *geometry = [SCNGeometry geometryWithSources:@[verticesSource, normalsSource, textureSource] elements:@[indicesElement]]; SCNMaterial *material = [SCNMaterial material]; //material.diffuse.contents = [UIColor networkingColor]; material.diffuse.contents = [UIImage imageNamed:@"diffuse.jpg"]; material.diffuse.wrapS = SCNWrapModeRepeat; material.diffuse.wrapT = SCNWrapModeRepeat; material.diffuse.contentsTransform = SCNMatrix4MakeScale( 1.0f, 1.0f, 1.0f); material.doubleSided = YES; material.normal.wrapS = SCNWrapModeRepeat; material.normal.wrapT = SCNWrapModeRepeat; // material.litPerPixel = YES; geometry.materials = @[material]; 

[Edit] He probado muchas cosas diferentes con este código y nada parece funcionar. Aún tengo que ver un ejemplo de trabajo en Objective-C que funciona en iOS. Cualquier cambio en material.diffuse.wrapS no tiene efecto.

He hecho este tipo de cosas en OpenGL antes sin ningún problema, pero he estado mirando este código durante días y no puedo ver mi error. Cualquier ayuda sería muy apreciada.

@ Paul-Jan me puso en el path correcto, lo que me lleva a esta respuesta:

Cambiar las coorderadas de textura de CGPoint para flotar lo corrige.

  float textureCoordinates[] = { 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0 }; NSMutableData *textureData = [NSMutableData dataWithBytes:textureCoordinates length:vertexCount * sizeof(float) * 2]; SCNGeometrySource *textureSource = [SCNGeometrySource geometrySourceWithData:textureData semantic:SCNGeometrySourceSemanticTexcoord vectorCount:vertexCount floatComponents:YES componentsPerVector:2 bytesPerComponent:sizeof(float) dataOffset:0 dataStride:sizeof(float) * 2]; 

Resultado:

introduzca la descripción de la imagen aquí