【发布时间】:2015-05-01 01:10:07
【问题描述】:
我使用这个方法来抓取 UIImage 并将其转换为 3D 模型。但是,这意味着我添加了很多节点。我在想也许可以通过将所有几何图形添加到单个节点中来优化它。有没有办法做到这一点?
这是代码
static inline SCNNode* S2NNode(const UIImage* sprite) {
SCNNode *spriteNode = [SCNNode node];
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(sprite.CGImage));
const UInt8* data = CFDataGetBytePtr(pixelData);
for (int x = 0; x < sprite.size.width; x++)
{
for (int y = 0; y < sprite.size.height; y++)
{
int pixelInfo = ((sprite.size.width * y) + x) * 4;
UInt8 alpha = data[pixelInfo + 3];
if (alpha > 3)
{
UInt8 red = data[pixelInfo];
UInt8 green = data[pixelInfo + 1];
UInt8 blue = data[pixelInfo + 2];
UIColor *color = [UIColor colorWithRed:red/255.0f green:green/255.0f blue:blue/255.0f alpha:alpha/255.0f];
SCNNode *pixel = [SCNNode node];
pixel.geometry = [SCNBox boxWithWidth:1.001 height:1.001 length:1.001 chamferRadius:0];
pixel.geometry.firstMaterial.diffuse.contents = color;
pixel.position = SCNVector3Make(x - sprite.size.width / 2.0,
y - sprite.size.height / 2.0,
0);
[spriteNode addChildNode:pixel];
}
}
}
CFRelease(pixelData);
//The image is upside down and I have no idea why.
spriteNode.rotation = SCNVector4Make(1, 0, 0, M_PI);
return spriteNode;
}
【问题讨论】:
-
这段代码应该用于小精灵
-
尽量不要在 CGSizeMake(100,100) 上使用图像
-
你想做什么?为图像的每个像素制作一个立方体确实对性能没有好处。根据您想要实现的目标,可能还有其他解决方案。
-
我想为我放置的所有这些立方体设置一个几何图形。所以我想知道是否有一种方法可以将所有这些几何图形添加在一起,这样可能会有助于提高性能。
标签: ios objective-c xcode scenekit