ブラウザの[戻る]を押してね!



<液晶 TV 画面上の表示内容(TV全景)>




<液晶 TV 画面上の表示内容(表示部分を拡大)>




<PC用ソフト、WinDVD BD for VAIO での表示内容(表示部分を拡大)>




< BD-J 版 Java でのソースプログラム内容 >

/*
  3次元グラフィックス表示プログラム A (BD-J 用バージョン)
  (とりあえず、図形をひとつだけ表示してみたもの)
*/
package com.sony.vaio.clicktodisc;

import java.io.PrintStream;
import javax.tv.xlet.*;

public class ClickToDiscXlet implements Xlet {
 int icnt;            // ループカウンタなど用のワーク変数
 int x3d, y3d, z;        // 3次元座標軸上でのx、y、zの値
 int x2d, y2d;         // 2次元座標軸上でのx、yの値
 int max[] = new int[400]; // 最大値格納用配列
 int min[] = new int[400]; // 最小値格納用配列
 int wait_time = 10;     // 待ち時間
 Graphics g;          // グラフィックス表示用

 public void initXlet(XletContext ctx) throws XletStateChangeException {
 }

 public void startXlet() throws XletStateChangeException {
  // 最大値/最小値配列の初期化
  for ( icnt=0; icnt<400; icnt++ ) {
   max[icnt] = 0;
   min[icnt] = 400;
  }

  g = scene.getGraphics();
  g.drawString("3D Graphics Test Program",100,30); // 3次元図形表示処理

  // 3次元図形表示処理
  for ( y3d=0; y3d<128; y3d +=2 ) {
   for ( x3d=0; x3d<160; x3d +=2 ) { // Z値算出処理(任意の関数 z=f(x3d, y3d) に置き換え可能)
    if (((x3d >= 20) && (x3d <= 140)) && ((y3d >= 20) && (y3d <= 108))) {
     z = ((x3d - 80) * (x3d - 80)) / 60 + ((y3d - 64) * (y3d - 64)) / 40;
    } else {
     z = 110;
    }

    // 3次元→2次元座標変換処理
    x2d = 200 - (x3d - y3d);
    y2d = z + 290 - ((x3d / 4) + (y3d / 2) + 100);

    // 陰線処理(最大値/最小値判定による)
    if ((y2d >= max[x2d]) || (y2d <= min[x2d])) {
     if (y2d >= max[x2d]) {
      max[x2d] = y2d;
     }

     if (y2d <= min[x2d]) {
      min[x2d] = y2d;
     }

     if ((y2d >= 0) && (y2d < 500)) {
      // 直線を用いて点を描画する
      g.drawLine(x2d, y2d, x2d+1, y2d);

      if (wait_time != 0) {
       try { // 描画後、ちょっと待たせる
        Thread.sleep(wait_time);
       }
       catch (InterruptedException ex) {
        ex.printStackTrace();
       }
      }
     }
    }
   }
  }
 }

 public void pauseXlet() {
 }

 public void destroyXlet(boolean arg0) throws XletStateChangeException {
 }
}