我试图让我的代码没有警告。因为我刚刚更新了我的 Xcode 并且我知道收到警告信号。我也尝试在下面解决这个问题。
这是给我警告的代码:
代码:
extension float4x4 {
var translation: float3 {
return float3(columns.3.x, columns.3.y, columns.3.z)
}
init(translation vector: float3) {
self.init(float4(1, 0, 0, 0),
float4(0, 1, 0, 0),
float4(0, 0, 1, 0),
float4(vector.x, vector.y, vector.z, 1))
}
}
extension float4 {
var xyz: float3 {
return float3(x, y, z)
}
这是我试图在下面翻译:
代码:
extension SIMD4 {
var translation: SIMD3<Float> {
return SIMD3(columns.3.x, columns.3.y, columns.3.z)
}
init(translation vector: SIMD3<Float>) {
self.init(SIMD4<Float>(1, 0, 0, 0),
SIMD4<Float>(0, 1, 0, 0),
SIMD4<Float>(0, 0, 1, 0),
SIMD4(vector.x, vector.y, vector.z))
}
}
extension SIMD4 {
var xyz: SIMD3<Float> {
return SIMD3<Float>(x, y, z) as! SIMD3<Float>
}
}
最佳答案
看起来您不小心扩展了 SIMD4
当你真的想扩展 float4x4
(与 float3
和 float4
不同,不推荐使用)。
此外,在您的其他扩展中,它可能应该是 SIMD3<Scalar>
,不是 SIMD3<Float>
,所以 xyz
将返回 SIMD3
具有相同类型的 Scalar
随便 SIMD4
呼吁:
extension float4x4 {
var translation: SIMD3<Float> {
SIMD3(columns.3.x, columns.3.y, columns.3.z)
}
init(translation vector: SIMD3<Float>) {
self.init(.init(1, 0, 0, 0),
.init(0, 1, 0, 0),
.init(0, 0, 1, 0),
.init(vector.x, vector.y, vector.z, 1))
}
}
extension SIMD4 {
var xyz: SIMD3<Scalar> {
SIMD3(x, y, z)
}
}
关于swift - 如何将 float3 转换为 SIMD3<Float>(Xcode 11 Swift 5 使用 float3 和 float4 给出折旧警告),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59915812/