Overview
Comment: | OFMatrix4x4: Add -[transformedVector3D:] |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
1e550fabe39dfe9a6abfa878d2cb205c |
User & Date: | js on 2023-02-15 21:54:40 |
Other Links: | manifest | tags |
Context
2023-02-16
| ||
19:59 | OFVector3D -> OFPoint3D check-in: db7991d07b user: js tags: trunk | |
2023-02-15
| ||
21:54 | OFMatrix4x4: Add -[transformedVector3D:] check-in: 1e550fabe3 user: js tags: trunk | |
2023-02-13
| ||
22:14 | OFColor: Allow some imprecision for tagged pointer check-in: 061e16d166 user: js tags: trunk | |
Changes
Modified src/OFMatrix4x4.h from [f8bbebd161] to [6444eb96ee].
︙ | ︙ | |||
66 67 68 69 70 71 72 73 74 75 | /** * @brief Mulitplies the receiver with the specified matrix on the left side * and the receiver on the right side. * * @param matrix The matrix to multiply the receiver with */ - (void)multiplyWithMatrix: (OFMatrix4x4 *)matrix; @end OF_ASSUME_NONNULL_END | > > > > > > > > > > > > > > | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | /** * @brief Mulitplies the receiver with the specified matrix on the left side * and the receiver on the right side. * * @param matrix The matrix to multiply the receiver with */ - (void)multiplyWithMatrix: (OFMatrix4x4 *)matrix; /** * @brief Transforms the specified 3D vector according to the matrix. * * As multiplying a 4x4 matrix with a 3D vector is not defined, this extends * the 3D vector to a 4D vector with its `w` value being set to 0 and just * discards the `w` value of the resulting 4D vector for the returned 3D * vector. This allows reducing the number number of calculations performed and * is mostly useful for 3D graphics. * * @param vector The 3D vector to transform * @return The transformed 3D vector */ - (OFVector3D)transformedVector3D: (OFVector3D)vector; @end OF_ASSUME_NONNULL_END |
Modified src/OFMatrix4x4.m from [61d81a3bf6] to [97bdb88364].
︙ | ︙ | |||
179 180 181 182 183 184 185 186 187 188 189 190 191 192 | matrix->_values[10] * copy[14] + matrix->_values[14] * copy[15]; _values[15] = matrix->_values[3] * copy[12] + matrix->_values[7] * copy[13] + matrix->_values[11] * copy[14] + matrix->_values[15] * copy[15]; } - (OFString *)description { return [OFString stringWithFormat: @"<OFMatrix4x4: {\n" @"\t%g %g %g %g\n" @"\t%g %g %g %g\n" | > > > > > > > > > > > | 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | matrix->_values[10] * copy[14] + matrix->_values[14] * copy[15]; _values[15] = matrix->_values[3] * copy[12] + matrix->_values[7] * copy[13] + matrix->_values[11] * copy[14] + matrix->_values[15] * copy[15]; } - (OFVector3D)transformedVector3D: (OFVector3D)vector { return OFMakeVector3D( _values[0] * vector.x + _values[4] * vector.y + _values[8] * vector.z, _values[1] * vector.x + _values[5] * vector.y + _values[9] * vector.z, _values[2] * vector.x + _values[6] * vector.y + _values[10] * vector.z); } - (OFString *)description { return [OFString stringWithFormat: @"<OFMatrix4x4: {\n" @"\t%g %g %g %g\n" @"\t%g %g %g %g\n" |
︙ | ︙ |
Modified tests/OFMatrix4x4Tests.m from [9a374ca140] to [9aa8c2d363].
︙ | ︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 32 33 | static OFString *const module = @"OFMatrix4x4Tests"; @implementation TestsAppDelegate (OFMatrix4x4Tests) - (void)matrix4x4Tests { void *pool = objc_autoreleasePoolPush(); OFMatrix4x4 *matrix, *matrix2; TEST(@"+[identityMatrix]", memcmp([[OFMatrix4x4 identityMatrix] values], (float [16]){ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 | > | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | static OFString *const module = @"OFMatrix4x4Tests"; @implementation TestsAppDelegate (OFMatrix4x4Tests) - (void)matrix4x4Tests { void *pool = objc_autoreleasePoolPush(); OFMatrix4x4 *matrix, *matrix2; OFVector3D vec3; TEST(@"+[identityMatrix]", memcmp([[OFMatrix4x4 identityMatrix] values], (float [16]){ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 |
︙ | ︙ | |||
82 83 84 85 86 87 88 89 90 91 | [matrix2 isEqual: [OFMatrix4x4 matrixWithValues: (float [16]){ 9000, 20200, 31400, 42600, 10000, 22800, 35600, 48400, 11000, 25400, 39800, 54200, 12000, 28000, 44000, 60000 }]]) objc_autoreleasePoolPop(pool); } @end | > > > > | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | [matrix2 isEqual: [OFMatrix4x4 matrixWithValues: (float [16]){ 9000, 20200, 31400, 42600, 10000, 22800, 35600, 48400, 11000, 25400, 39800, 54200, 12000, 28000, 44000, 60000 }]]) TEST(@"-[transformedVector3D:]", R((vec3 = [matrix transformedVector3D: OFMakeVector3D(1, 2, 3)])) && vec3.x == 14 && vec3.y == 38 && vec3.z == 62) objc_autoreleasePoolPop(pool); } @end |