dugla
dugla

Reputation: 12954

GLKit. How do I assign to a component of a GLKVector3

What is the correct way to assign to a field of a GLKVector3 (or 4)?

This fails: enter image description here

Which makes sense since .x and .z are getters. What is the workaround?

Upvotes: 0

Views: 122

Answers (1)

Tommy
Tommy

Reputation: 100632

I believe that in Swift GLKVector3s are immutable, whether a var or a let. Use GLKVector3Make to create one with arbitrary Float values; subsequently generate new results to new instances.

So:

let ballLocation = GLKVector3Make(
     (locationInBallCoordinates.x - ballCentre.x) / ballRadius,
     0.0,
     (locationInBallCoordinates.y - ballCentre.y) / ballRadius)

Or, if locationInBallCoordinates and ballCentre were already instances of GLKVector3 — and the y-to-z component switch that I hadn't noticed when I first wrote this answer weren't there — then:

let ballLocation = 
    GLKVector3DivideScalar(
        GLKVector3Subtract(locationInBallCoordinates, ballCentre),
        ballRadius)

It's probably easiest to unpack and repack to move ys into zs but you could also use a matrix multiply if you were desperate to keep it high level.

Upvotes: 1

Related Questions