我有一个位图图像: 将图像转换到SceneKit节点
(然而,这应与任意图像工作)
我希望把我的形象,使其成为3D SCNNode。这段代码我已经完成了很多。这需要图像中的每个像素,并使用SCNBox几何创建SCNNode。
static inline SCNNode* NodeFromSprite(const UIImage* image) {
SCNNode *node = [SCNNode node];
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
const UInt8* data = CFDataGetBytePtr(pixelData);
for (int x = 0; x < image.size.width; x++)
{
for (int y = 0; y < image.size.height; y++)
{
int pixelInfo = ((image.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 - image.size.width/2.0,
y - image.size.height/2.0,
0);
[node addChildNode:pixel];
}
}
}
CFRelease(pixelData);
node = [node flattenedClone];
//The image is upside down and I have no idea why.
node.rotation = SCNVector4Make(1, 0, 0, M_PI);
return node;
}
但问题是,我正在做的事情占用了很多内存!
我试图找到一种方法来做到这一点与更少的内存。
所有代码和资源,可以发现: https://github.com/KonradWright/KNodeFromSprite
在Objective-C风格的伪代码中,如何将两个并排立方体网格化? 我被给了一个javascript的例子,但我不知道如何在obj-c中做到这一点。 – 2015-03-03 16:00:23
@KonradWright用伪代码更新答案。 – 2015-03-05 09:44:55
谢谢Ef Dot :) – 2015-03-05 10:03:32