pierre59 
		
		YaBB Newbies
		 
		Offline 
		
		
		Posts: 41
		
		
		
		
 
	 
	
		
			
				Lights (bis)  
				 Feb 27th , 2009, 6:56pm 
			 
			
				
	  
			 
		
		
			Hello. How can I light the sphere, as the moon in quarter, for example ? Thank's. import processing.core.*; import processing.opengl.*; import javax.media.opengl.*; import javax.media.opengl.glu.*; import java.applet.*; import java.awt.*; import javax.swing.*; import javax.vecmath.Color3f; import toxi.geom.Vec3D; public class Sphere_bis extends JFrame {   PGraphicsOpenGL pgl;   GL gl;   boolean opengl=true;   int largeur_ecran, hauteur_ecran, x1, y1, z1;   float debut,x9,y9,z9;   double alpha, delta, alpha_centre=5.0, delta_centre=0.0;   sp_bis fenetre;   float rayon_sphere=200.0f;   float rotX, rotY, rotZ;   PImage texImg, fond;   int NUM_ROWS = 50, NUM_LINES = 50;   Vec3D p[][]; //bidimensional array of vectors that compose each point in the sphere   float sphereX[][], sphereY[][], sphereZ[][];   public static void main(String args[])    {    new Sphere_bis().setVisible(true);    }   public Sphere_bis()    {    setSize(1400,900);    add(fenetre = new sp_bis());    fenetre.init();    }   class sp_bis extends PApplet {   float u, theta, v, phi, x, y, z; public void setup() {    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();    largeur_ecran=screenSize.width;    hauteur_ecran=screenSize.height;   size(largeur_ecran, hauteur_ecran, opengl ? OPENGL: P3D);   fond=loadImage("fonds/preferes/baviere.jpg");   texImg = loadImage("textures_planetes/mars501.jpg");   size(largeur_ecran, hauteur_ecran, OPENGL);   noStroke();      Sphere(); } public void draw() {   defineLights();   background(0);   pgl = (PGraphicsOpenGL) g;   gl = pgl.beginGL();   gl.setSwapInterval(1);   gl.glNormal3f(0.0f,0.0f,-1.0f);   gl.glEnable(gl.GL_TEXTURE_2D);   render();   gl.glDisable(gl.GL_TEXTURE_2D);  pgl.endGL(); }   public void render(){    pushMatrix();    calculer_x_y_3D(alpha_centre,delta_centre);     gl.glTranslatef(x1, y1, z1);     gl.glScalef(rayon_sphere, rayon_sphere, rayon_sphere);     renderSphere();     popMatrix();   }    void calculer_x_y_3D(double alph, double delt)      {      float facteur_zoom=1.0f;      float centreX=(float) (largeur_ecran/2);      float centreY=(float) (hauteur_ecran/2);      float centreZ=150.0f+(float) (20.0*facteur_zoom);      double ct1=180/Math.PI;      float rayon_sphere_ciel=(float) (largeur_ecran/2*5.0f);      alph=(alph-alpha_centre+12)*15/ct1;      delt=-delt/ct1;      x9 = centreX + rayon_sphere_ciel * (float) (Math.cos(delt)*Math.sin(alph));      y9 = centreY + rayon_sphere_ciel * (float) (Math.cos(delta_centre)*Math.sin(delt)-Math.sin(delta_centre)*Math.cos(delt)*Mat h.cos(alph));      z9 = centreZ + rayon_sphere_ciel * (float) (Math.sin(delta_centre)*Math.sin(delt)+Math.cos(delta_centre)*Math.cos(delt)*Mat h.cos(alph));      // Coordonnées 2D pour les clics sur les objets.      x1=(int) screenX(x9,y9,z9);      y1=(int) screenY(x9,y9,z9);      z1=(int) screenZ(x9,y9,z9);      } void defineLights() {   spotLight(255f, 0f, 0f,  // Color             300f, 400f, 100f,     // Position             1f, 0.0f, 0-1f,  // Direction             (float) (PI / 2), 2f);     // Angle, concentration }   public void Sphere(){     p = new Vec3D[NUM_ROWS][NUM_LINES];     sphereX = new float[NUM_ROWS][NUM_LINES];     sphereY = new float[NUM_ROWS][NUM_LINES];     sphereZ = new float[NUM_ROWS][NUM_LINES];     for(int i=0; i<NUM_ROWS; i++){       u = (float)i/(NUM_ROWS-1);       theta = u*TWO_PI;       for(int j=0; j<NUM_LINES; j++){         v = (float)j/(NUM_LINES-1);         phi = PI*v;         x = cos(theta) * sin(phi);         y = sin(theta) * sin(phi);         z = cos(phi);         p[i][j] = new Vec3D(x, y, z); //normalized vector of one point in the sphere                sphereX[i][j] = x;         sphereY[i][j] = y;         sphereZ[i][j] = z;       }      }   }   public void renderSphere(){     pgl.bindTexture(texImg);     gl.glTexEnvf(gl.GL_TEXTURE_ENV,gl.GL_TEXTURE_ENV_MODE,gl.GL_MODULATE);     float u, uNext;     float v;     for(int i=0; i<NUM_ROWS; i++){     gl.glBegin(gl.GL_TRIANGLE_STRIP);       int next = (i+1)%NUM_ROWS;       u = (float)i/(NUM_ROWS-1);       uNext = (float)next/(NUM_ROWS-1);       for(int j=0; j<NUM_LINES; j++){         v = (float)j/(NUM_LINES-1);         gl.glTexCoord2f(u, v);         // '-' en x pour afficher correctement la sphère.         // Car sinon les formations et labels sont inversés de gauche à droite.         gl.glColor3f(1.0f,0.0f,0.0f);         gl.glVertex3f(-p[i][j].x, p[i][j].y, p[i][j].z);         gl.glTexCoord2f(uNext, v);         gl.glColor3f(1.0f,0.0f,0.0f);         gl.glVertex3f(-p[next][j].x, p[next][j].y, p[next][j].z);       }        gl.glEnd();     }   } }  }