【问题标题】:How do I replicate a vector_float3 in Swift from Objective-C?如何从 Objective-C 在 Swift 中复制 vector_float3?
【发布时间】:2014-10-06 12:23:46
【问题描述】:

我正在尝试将这段代码从 Objective-C 翻译成 Swift,但我很难弄清楚 vector_mix 在这种情况下做了什么。我看到 vector_mix 在 Swift 中可用,但 vector_float3 类型不可用。

SCNNode *car = [_vehicleNode presentationNode];
SCNVector3 carPos = car.position; //this is a SCNVector3
vector_float3 targetPos = {carPos.x, 30., carPos.z + 25.};
vector_float3 cameraPos = SCNVector3ToFloat3(_cameraNode.position);
cameraPos = vector_mix(cameraPos, targetPos, (vector_float3)(cameraDamping));
_cameraNode.position = SCNVector3FromFloat3(cameraPos);

似乎它是从cameraPos 中提取x,从targetPos 中提取y,并从cameraDamping 中提取z,但是你为什么还要费心写targetPos x,@ 987654331@和z?

我从this 知道vector_float3 目前在 Swift 中不可用,但必须有一种方法来模拟类似的东西。我只是不明白在这种情况下到底是什么。

如何在 Swift 中复制 vector_float3?或者我如何在 Swift 中编写这段代码?

【问题讨论】:

    标签: ios objective-c swift scenekit


    【解决方案1】:

    编辑: SIMD 类型现在可在 Swift 中使用


    您可以在任何地方使用 SCNVector3 并重新实现缺少的实用程序(例如混合功能)

    SCNNode *car = [_vehicleNode presentationNode];
    SCNVector3 carPos = car.position;
    SCNVector3 targetPos = SCNVector3Make(carPos.x, 30., carPos.z + 25.);
    SCNVector3 cameraPos = _cameraNode.position;
    cameraPos = SCNVector3Make(cameraPos.x * (1.0 - cameraDamping) + targetPos.x * cameraDamping,
                               cameraPos.y * (1.0 - cameraDamping) + targetPos.y * cameraDamping,
                               cameraPos.z * (1.0 - cameraDamping) + targetPos.z * cameraDamping);
    _cameraNode.position = cameraPos;
    

    【讨论】:

    • 你能举个例子吗?混合功能可用。
    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 2018-07-18
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多