processingで原子のモデルを動かしたい 立体の重なり方がおかしい



こんな感じのを電子を動かして見せたいなと思った。


float t =0;
void setup() {
size(500,500,P3D);
noStroke();
lights();
}

void draw() {
  fill(255,50);
  rect(0,0,width,height);//backgroundではなく不透明のrectでリフレッシュすることで残像をつける
  fill(153);
translate(width/2,height/2,0);
sphere(25);//原子核
fill(255,0,0,10);//k殻原子領域の色
sphere(100);//原子領域を示す透明

fill(0,255,0,10);//l殻の領域の色
//sphere(150);


fill(0,0,255,255);//電子を示す色



pushMatrix();//電子の回転用

pushMatrix();
rotateZ(t+5);//z軸で回す
translate(100,0,0);//z軸で回す
sphere(10);//電子
popMatrix();

pushMatrix();
rotateX(t+4);//x軸で回す
translate(0,0,100);//x軸で回す
sphere(10);//電子
popMatrix();

pushMatrix();
rotateY(t+2);//y軸で回す
translate(100,0,0);
sphere(10);//電子
popMatrix();



pushMatrix();
rotateX(TWO_PI/8);
rotateY(t);//斜め軸で回す
translate(100,0,0);
sphere(10);//電子
popMatrix();


popMatrix();//電子の回転終わり




  t=t+TWO_PI/(60*3);
}

これで実行してみると

電子が後ろに回ったときに、なぜか消えている。
原子の部分は赤色で透明度を設定しているのにおかしい。

http://tercel-sakuragaoka.blogspot.com/2011/11/p3d.html
調べてみると上のサイトに
processing : P3D モードのヘンなクセ
ということで記述されていた。 P3Dだと仕方ないことらしい

setup()の部分に

  hint(ENABLE_DEPTH_SORT); // ←追加 

を追加するといいらしい

描画方式をデフォルトのZ バッファリングから画家のアルゴリズムに変更する ことができているらしい

そうしたら

うまくいった。