
Exercise 3.1 running:
This blog is a log of my work in Computer Graphics at UNCW.
The second part of this assignment was to create a Bezier curve in OpenGL. The curve rotates when you hit the arrow button.
Finally, I created a multi-colored 3-d cube. This also rotates when the arrows are pushed. I plan on expanding this tomorrow, but I have this so far so might as well post it.
The basic outline of a house using 3d OpenGGL commands.
import processing.pdf.*;
float borderDiam=700;
int numCircs=1000000;//change back to at least 1000000
boolean overlap;
int count=0;
Circ[] balls = new Circ[numCircs];
int diameter;
void setup(){
background(255);
size(700,700);
noLoop();
beginRecord(PDF, "T2BRainbow1.pdf");
// stroke(100);
smooth();
//ellipse(350,350,700,700);
noStroke();
int count=0;
for (int i=0;i float x=random(borderDiam);
float y=random(borderDiam);
float diameter=(random(borderDiam/10)+10);
Circ temp=new Circ(x,y,diameter);
if (inBorder(x,y,diameter)&&collide(x,y,diameter,count)){
balls[count]=temp;
count++;
}
}
for (int i=count;i float x=random(borderDiam);
float y=random(borderDiam);
float diameter=(random(borderDiam/20)+10);
Circ temp=new Circ(x,y,diameter);
if (inBorder(x,y,diameter)&&collide(x,y,diameter,count)){
balls[count]=temp;
count++;
}
}
for (int i=count;i float x=random(borderDiam);
float y=random(borderDiam);
float diameter=(random(borderDiam/30)+5);
Circ temp=new Circ(x,y,diameter);
if (inBorder(x,y,diameter)&&collide(x,y,diameter,count)){
balls[count]=temp;
count++;
}
}
for (int i=count;i float x=random(borderDiam);
float y=random(borderDiam);
float diameter=(random(borderDiam/30)+2);
Circ temp=new Circ(x,y,diameter);
if (inBorder(x,y,diameter)&&collide(x,y,diameter,count)){
balls[count]=temp;
count++;
}
}
System.out.println(count);
for (int i = 0; i < count; i++){
balls[i].display();
}
endRecord();
}
void draw(){
}
boolean inBorder(float x, float y, float diameter){
float distToCenter=dist(x,y,borderDiam/2,borderDiam/2);
float distToEdge= distToCenter+diameter/2;
if (distToEdge>borderDiam/2){
return false;
}
else return true;
}
boolean collide(float x, float y, float d, int numCircles){
int diameter=(int)d;
for (int i = 0; i < numCircles; i++){
float distance = dist(x, y, balls[i].x, balls[i].y);
float minDist = balls[i].diameter/2 + diameter/2;
if (distance < minDist){
return false;
}
}
return true;
}
class Circ{
float x, y;
float diameter;
int id;
boolean display = true;
boolean inBorder=true;
float col;
float sat;
float bright;
float gray;
Circ(float xin, float yin, float diameter){
x = xin;
y = yin;
this.diameter = diameter;
//blue 195
//cool green 145
//pink 300
//red 340
//yellow green 60
//0 red orange
//for a rainbow coloring
//col=((dist(borderDiam/2,borderDiam/2,x,y))/(borderDiam/720));
//col= ((borderDiam/2-dist(x,y,borderDiam/2,borderDiam/2))/(borderDiam/720));
//col=+(random(20));
col=y/(borderDiam/360)+random(40);
sat=((dist(borderDiam/2,borderDiam/2,x,y))/(borderDiam/200));
bright=((borderDiam/2-dist(x,y,borderDiam/2,borderDiam/2))/(borderDiam/100));
gray=(borderDiam/2-dist(x,y,borderDiam/2,borderDiam/2))/1.2;
}
void display(){
colorMode(HSB,360,100,100);
fill(col,sat,100);
//fill(gray);
ellipse(x, y, diameter, diameter);
}
}