Fix mass components 3D view (#957)

Co-authored-by: Sibo Van Gool <sibo.van.gool@24sea.eu>
This commit is contained in:
SiboVG 2021-06-27 00:38:31 +02:00 committed by GitHub
parent 2e6a189305
commit eddaae88ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -125,11 +125,19 @@ final class MassObjectRenderer {
private MassObjectRenderer() {
}
/**
* Draw the mass object as a 3D figure.
*
* @param gl OpenGL object
* @param o mass object to draw (e.g. Parachute or Mass Component)
* @param slices number of slices for the 3D object (kind of like subdivision surface)
* @param stacks number of stacks for the 3D object (kind of like subdivision surface)
*/
static final void drawMassObject(final GL2 gl, final MassObject o,
final int slices, final int stacks) {
double da, r, dz;
double x, y, z;
double da, r, dz; // Axial length per slice, radius & length per stack
double x, y, z; // X-, y- and z-position
int i, j;
da = 2.0f * PI / slices;
@ -157,19 +165,23 @@ final class MassObjectRenderer {
y = cos((i * da));
}
// Add radial offset
double xOffset = o.getRadialPosition() * sin(o.getRadialDirection());
double yOffset = o.getRadialPosition() * cos(o.getRadialDirection());
if (r == 0)
normal3d(gl, 0, 0, 1);
else
normal3d(gl, x, y, z);
TXTR_COORD(gl, s, t);
glVertex3d(gl, (x * r), (y * r), z);
glVertex3d(gl, (x * r) + xOffset, (y * r) + yOffset, z);
if (rNext == 0)
normal3d(gl, 0, 0, -1);
else
normal3d(gl, x, y, z);
TXTR_COORD(gl, s, t + dt);
glVertex3d(gl, (x * rNext), (y * rNext), (z + dz));
glVertex3d(gl, (x * rNext) + xOffset, (y * rNext) + yOffset, (z + dz));
s += ds;
} // for slices