openGL Multiple viewports still… How to turn off the "default" viewport?

_vk_vk
edited September 2014 in Questions about Code

previous post

So I managed to get the multiple viewport working, or almost…

Now I narrow down my problem to aha,t seams to me, the default viewport being seen. Easy to understand running the snippet.

The real scenario is a canvas with 2160 x 640, containing 6 viewports 213 x 640 each.

So I set my camera aspect ratio to 213 X 640 and stuff inside the viewport is fine no distortion. But… Even with only one vp I still seeing the "default" render, and this one is badly distorted.

Can I tur this one off?

Please ask if it's unclear.

thanks

float margin = 73.5;
float dMargin = margin * 2;
float rectW = 213;
float rectH = 640;
PVector[] coord = new PVector [7] ;
float x, y, speed = -0.1;
float a, r = 150;

Part[] parts = new Part[1000];
float mx = -200, my, tmx, tmy;



PGL gl;
float m = 6; 

void setup() {

  sphereDetail(10);
  size(1000, 640, P3D);
  noStroke();

  PGraphicsOpenGL pgl = (PGraphicsOpenGL) g; 
  gl = pgl.beginPGL();

  for (float i = 0, x = margin; i < 7; i++, x+= (rectW+dMargin )) {
    coord[int(i)] = (new PVector(x, 0));
  }

  for (int i = 0; i < parts.length; i++) {
    parts[i] = new Part();
  }
}



void draw() {
  lights();
  frame.setTitle(nf(frameRate, 3, 2));

  background(0);

  perspective(PI/1.96, (float) 214/640, 100, 5000);
  camera(0, 0, 2152, -238, -9, -1141, 0, 1, 0);
  renderP();
  gl.viewport (int(coord[0].x), int(0), int(rectW), int(rectH));
}


void renderP() {
  for (Part p : parts) {
    p.display();
  }
}



class Part {
  // angle1, angle 2, radius, speed1, speed2
  float a1, a2, r, sp1, sp2;
  PVector pos;
  color c;

  Part() {
    // random init
    c   = color(255);
    a1  = radians(random(360));
    a2  = radians(random(360));
    sp1 = random(-0.001, 0.001);
    sp2 = random( -0.001, 0.001);

    // hard number for now..
    r = 600;

    //get spherical coordinates
    pos = getSpherical(a1, a2, r);
  }


  void display() {
    noStroke();
    update();
    pushMatrix();
    translate(pos.x, pos.y, pos.z);
    fill(c);
    sphere(20);
    popMatrix();
  }

  void update() {
    pos = getSpherical(a1+=sp1, a2+=sp2, r);
  }


  // spherical coordinates
  PVector getSpherical(float ang1, float ang2, float rad) {
    PVector result = new PVector();
    result.x = rad * sin(ang1) * cos (ang2);
    result.y = rad * sin(ang1) * sin (ang2);
    result.z = rad * cos(ang1);

    return result;
  }
}
Tagged:
Sign In or Register to comment.