小编Dea*_*xel的帖子

场景套件性能与立方体测试

在学习游戏的3D图形编程时,我决定通过使用Scene Kit 3D API开始简单.我的第一个游戏目标是构建一个非常简化的模拟MineCraft.只是立方体的游戏 - 它有多难.

下面是我写的一个循环,用于放置100 x 100立方体(10,000)并且FPS性能非常差(~20 FPS).对于Scene Kit,我的初始游戏目标是否过多,或者有更好的方法来解决这个问题吗?

我已经阅读了StackExchange上的其他主题,但感觉不到他们回答我的问题.将暴露的表面块转换为单个网格将不起作用,因为SCNGeometry是不可变的.

func createBoxArray(scene : SCNScene, lengthCount: Int, depthCount: Int) {
    let startX : CGFloat = -(CGFloat(lengthCount) * CUBE_SIZE) + (CGFloat(lengthCount) * CUBE_MARGIN) / 2.0
    let startY : CGFloat = 0.0
    let startZ : CGFloat = -(CGFloat(lengthCount) * CUBE_SIZE) + (CGFloat(lengthCount) * CUBE_MARGIN) / 2.0

    var currentZ : CGFloat = startZ

    for z in 0 ..< depthCount {
        currentZ += CUBE_SIZE + CUBE_MARGIN

        var currentX = startX
        for x in …
Run Code Online (Sandbox Code Playgroud)

3d optimization performance scenekit swift

13
推荐指数
1
解决办法
2301
查看次数

有效地将Swift Array复制到iOS Metal的内存缓冲区

我正在使用Apple的新Metal框架编写iOS应用程序.我有一个Matrix4对象数组(参见Ray Wenderlich的教程),我需要通过MTLDevice.newBufferWithLength()方法传入着色器.Matrix4对象正在利用Apple的GLKit(它包含一个GLKMatrix4对象).

我正在利用GPU调用实例化.

我稍后会将其更改为一个结构,其中包含每个实例的更多数据(不仅仅是Matrix4对象).

  1. 如何有效地将[Matrix4]对象数组复制到此缓冲区中?

  2. 有一个更好的方法吗?再次,我将扩展它以使用未来更多数据的结构.

以下是我的代码的子集:

let sizeofMatrix4 = sizeof(Float) * Matrix4.numberofElements()

// This returns an array of [Matrix4] objects.
let boxArray = createBoxArray(parentModelViewMatrix)

let sizeOfUniformBuffer = boxArray.count * sizeOfMatrix4
var uniformBuffer = device.newBufferWithLength(sizeofUniformBuffer, options: .CPUCacheModeDefaultCache)
let bufferPointer = uniformBuffer?.contents()

// Ouch - way too slow.  How can I optimize?
for i in 0..<boxArray.count
{
    memcpy(bufferPointer! + (i * sizeOfMatrix4), boxArray[i].raw(), sizeOfMatrix4)
}

renderEncoder.setVertexBuffer(uniformBuffer, offset: 0, atIndex: 2)
Run Code Online (Sandbox Code Playgroud)

注意:boxArray [i] .raw()方法在Objective-C代码中定义如下:

- (void *)raw {
    return glkMatrix.m; …
Run Code Online (Sandbox Code Playgroud)

ios swift swift-array metal

6
推荐指数
1
解决办法
4488
查看次数

标签 统计

swift ×2

3d ×1

ios ×1

metal ×1

optimization ×1

performance ×1

scenekit ×1

swift-array ×1