Texture d'environnement

Faites pivoter le cube avec la souris et observez le reflet des nuages sur la face vitrée.
Desole votre navigateur ne supporte pas le Java.

Cet effet réaliste de reflet est obtenu en faisant glisser une texture de nuages dans le sens inverse de la rotation du cube sur une surface semi transparente.

Dans l'applet Java le mouvement de la souris est récuperé pour faire pivoter le cube et pour décaler les coordonnées de la texture (imagepoint).
Voici le code de la face vitrée ce sont les point de textureCoordinate qui sont décalés. L'image ciel.jpg fait 128*64 pixels.

case java.awt.Event.MOUSE_DRAG:{
  update3d(event.x-x,event.y-y);
  x=event.x;
  y=event.y;
  break;
}

public void update3d(float deltax,float deltay){
  float[] rot=new float[4];
  float[] tex=new float[8];

//rotation horizontale du cube
  rot=cuberot.getValueFloatArray(0,-1);
  rot[3]+=deltax/40f;
  cuberot.setValueFloatArray(0,-1,rot);

//modification des point texCoordinate
  tex=imagepoint.getValueFloatArray(0,-1);
  for (int i=0;i<8;i+=2){
    tex[i]+=deltax/40f;
    tex[i+1]-=deltay/40f;
  }
  imagepoint.setValueFloatArray(0,-1,tex);
}
Shape{
  appearance Appearance {
    material Material {
      transparency 0.4
    }
    texture ImageTexture {
      url["ciel.jpg"]
    }
  }
  geometry IndexedFaceSet {
    coord Coordinate {
      point [  -0.5 -0.5 0.5,0.5 -0.5 0.5,
                0.5 0.5 0.5,-0.5 0.5 0.5 ]
    }
    coordIndex [ 0,1,2,3,-1 ]
    texCoord DEF image TextureCoordinate {
      point [ 0 0,0.5 0,0.5 1,0 1 ]
    }
    texCoordIndex [ 0,1,2,3,-1 ]
  }
}