mirror of
https://github.com/processing/processing4.git
synced 2026-02-04 06:09:17 +01:00
47 lines
1.3 KiB
Plaintext
47 lines
1.3 KiB
Plaintext
void drawTorus(float outerRad, float innerRad, int numc, int numt, int axis) {
|
|
float x, y, z, s, t, u, v;
|
|
float nx, ny, nz;
|
|
float aInner, aOuter;
|
|
int idx = 0;
|
|
|
|
beginShape(QUAD_STRIP);
|
|
for (int i = 0; i < numc; i++) {
|
|
for (int j = 0; j <= numt; j++) {
|
|
t = j;
|
|
v = t / (float)numt;
|
|
aOuter = v * TWO_PI;
|
|
float cOut = cos(aOuter);
|
|
float sOut = sin(aOuter);
|
|
for (int k = 1; k >= 0; k--) {
|
|
s = (i + k);
|
|
u = s / (float)numc;
|
|
aInner = u * TWO_PI;
|
|
float cIn = cos(aInner);
|
|
float sIn = sin(aInner);
|
|
|
|
if (axis == 0) {
|
|
x = (outerRad + innerRad * cIn) * cOut;
|
|
y = (outerRad + innerRad * cIn) * sOut;
|
|
z = innerRad * sIn;
|
|
} else if (axis == 1) {
|
|
x = innerRad * sIn;
|
|
y = (outerRad + innerRad * cIn) * sOut;
|
|
z = (outerRad + innerRad * cIn) * cOut;
|
|
} else {
|
|
x = (outerRad + innerRad * cIn) * cOut;
|
|
y = innerRad * sIn;
|
|
z = (outerRad + innerRad * cIn) * sOut;
|
|
}
|
|
|
|
nx = cIn * cOut;
|
|
ny = cIn * sOut;
|
|
nz = sIn;
|
|
|
|
normal(nx, ny, nz);
|
|
vertex(x, y, z);
|
|
}
|
|
}
|
|
}
|
|
endShape();
|
|
}
|