Update Sphere to match three.js axis

This commit is contained in:
Peter Klimai 2020-02-05 12:34:08 +03:00
parent 8206a636b5
commit 0c69c1cdbc

View File

@ -29,9 +29,10 @@ class Sphere(
override fun <T : Any> toGeometry(geometryBuilder: GeometryBuilder<T>) { override fun <T : Any> toGeometry(geometryBuilder: GeometryBuilder<T>) {
fun point3DfromSphCoord(r: Float, theta: Float, phi: Float): Point3D { fun point3DfromSphCoord(r: Float, theta: Float, phi: Float): Point3D {
val z = r * cos(theta) // This transformation matches three.js sphere implementation
val x = r * sin(theta) * cos(phi) val y = r * cos(theta)
val y = r * sin(theta) * sin(phi) val z = r * sin(theta) * sin(phi)
val x = - r * sin(theta) * cos(phi)
return Point3D(x, y, z) return Point3D(x, y, z)
} }
val segments = this.detail ?: 8 val segments = this.detail ?: 8
@ -49,7 +50,8 @@ class Sphere(
val point3 = point3DfromSphCoord(radius, theta2, phi2) val point3 = point3DfromSphCoord(radius, theta2, phi2)
val point4 = point3DfromSphCoord(radius, theta2, phi1) val point4 = point3DfromSphCoord(radius, theta2, phi1)
geometryBuilder.apply { geometryBuilder.apply {
face4(point1, point2, point3, point4) // 1-2-3-4 gives the same face but with opposite orientation
face4(point1, point4, point3, point2)
} }
} }
} }