46 lines
1.1 KiB
Plaintext
46 lines
1.1 KiB
Plaintext
float rotX, rotY;
|
|
|
|
PVector[][] sphere;
|
|
int detail = 50;
|
|
|
|
void setup() {
|
|
size(600, 600, P3D);
|
|
background(50, 50, 200);
|
|
fill(255, 0, 200);
|
|
stroke(0, 40);
|
|
sphere = new PVector[detail+1][detail+1];
|
|
}
|
|
|
|
void draw() {
|
|
pointLight(255, 255, 255, -width, -height, 2*height);
|
|
translate(width/2, height/2);
|
|
rotateX(rotX);
|
|
rotateY(rotY);
|
|
float r = 200;
|
|
for (int i = 0; i <= detail; i++) {
|
|
float rows = map(i, 0, detail, 0, PI);
|
|
for (int j = 0; j <= detail; j++) {
|
|
float columns = map(j, 0, detail, 0, TWO_PI);
|
|
float x = r * sin(rows) * cos(columns);
|
|
float y = r * sin(rows) * sin(columns);
|
|
float z = r * cos(rows);
|
|
sphere[i][j] = new PVector(x, y, z);
|
|
}
|
|
}
|
|
for (int i = 0; i < detail; i++) {
|
|
beginShape(TRIANGLE_STRIP);
|
|
for (int j = 0; j <= detail; j++) {
|
|
PVector v1 = sphere[i][j];
|
|
vertex(v1.x, v1.y, v1.z);
|
|
PVector v2 = sphere[i+1][j];
|
|
vertex(v2.x, v2.y, v2.z);
|
|
}
|
|
endShape();
|
|
}
|
|
}
|
|
|
|
void mouseDragged() {
|
|
rotY -= (mouseX - pmouseX) * 0.01;
|
|
rotX -= (mouseY - pmouseY) * 0.01;
|
|
}
|