ianhi_processing/NatureOfCode/The-Nature-of-Code-Examples-master/Processing/chp4_systems/flight404/flight404_particles_2_GLtexture/NOC_gl.pde

int squareList;
void initGL(){
  pgl.beginGL();
  squareList = gl.glGenLists(1);
  gl.glNewList(squareList, GL.GL_COMPILE);
  gl.glBegin(GL.GL_POLYGON);
  gl.glTexCoord2f(0, 0);    gl.glVertex2f(-.5, -.5);
  gl.glTexCoord2f(1, 0);    gl.glVertex2f( .5, -.5);
  gl.glTexCoord2f(1, 1);    gl.glVertex2f( .5,  .5);
  gl.glTexCoord2f(0, 1);    gl.glVertex2f(-.5,  .5);
  gl.glEnd();
  gl.glEndList();
  pgl.endGL();
}

void renderImage( Vec3D _loc, float _diam, color _col, float _alpha ){
  gl.glPushMatrix();
  gl.glTranslatef( _loc.x, -_loc.y, _loc.z );
  pov.glReverseCamera();
  gl.glScalef( _diam, _diam, _diam );
  gl.glColor4f( red(_col), green(_col), blue(_col), _alpha );
  gl.glCallList( squareList );
  gl.glPopMatrix();
}

// This will allow you to draw images that are oriented to the floor plane.
void renderImageOnFloor( Vec3D _loc, float _diam, color _col, float _aa ){
  gl.glPushMatrix();
  gl.glTranslatef( _loc.x, -_loc.y, _loc.z );
  gl.glScalef( _diam, _diam, _diam );
  gl.glRotatef( 90, 1.0, 0.0, 0.0 );
  gl.glColor4f( red(_col), green(_col), blue(_col), _aa );
  gl.glCallList( squareList );
  gl.glPopMatrix();
}

// This will allow you to specify a rotation for images that are oriented perpendicular to the eyeNormal 
// which is the vector pointing from the camera's eye to the camera's point of interest.
void renderImageAndRotate( Vec3D _loc, float _diam, color _col, float _aa, float _rot ){
  gl.glPushMatrix();
  gl.glTranslatef( _loc.x, -_loc.y, _loc.z );
  gl.glRotatef( degrees( _rot ), pov.eyeNormal.x, pov.eyeNormal.y, pov.eyeNormal.z );
  pov.glReverseCamera();
  gl.glScalef( _diam, _diam, _diam );
  gl.glColor4f( red(_col), green(_col), blue(_col), _aa );
  gl.glCallList( squareList );
  gl.glPopMatrix();
}
