[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:01742] Re: 余色立体表示



 巛巛巛    【毎週水曜日 人数限定のタイムセール 実施!】
 巛巛巛巛巛  4/11〜4/12午前10時まで受付 ソウル9800円
 从⌒ ⌒从  ★ 総額400万の賞品が合計1,500名様に!★
  人 ▽ 人   ヴィッツ、液晶テレビ、デジカメ、海外旅行他
  ~\∧/~        http://ml.infoseek.co.jp/1104.php3 ;
------------------------------------------------------------------------


こんにちは、小林です。

> javax.media.j3d.View に LEFT_EYE_VIEW、RIGHT_EYE_VIEW、CYCLOPEAN_EYE_VIEW
> というモードがあるようですね。
> 
> やったことが無いのですが、泥臭い方法としては、
> 左目用と右目用、合計2個の View をシーングラフに追加して
> それぞれオフスクリーンレンダリングするのかもしれません。

オフスクリーン用のCanvas3Dを作って、OnScreenのCanvas3Dと
同じViewに関連付け、右目用のイメージと左目用のイメージを
作成して、とりあえずJPGファイルに出力してみました。

ここまでできたのですが、遠藤さんがおっしゃってた、
> オフスクリーンレンダリングで
> 右目用オフスクリーンと
> 左目用オフスクリーンにそれぞれ描画して
> 一つの Canvas3D に転送すれば可能かも知れません。

この「一つのCanvas3Dに転送する」というのはどういう意味
なのでしょうか?
右目用の画像、左目用の画像というのは、2次元であるわけで、
それを一つCanvas3Dに貼り付ける?? と、Canvas3D上に
見えるのは2次元の画像ですよね。
Canvas3Dなのに画像を貼る??
と、何か変な感じがするのですが。

とりあえず次は、2つの画像から立体表示用の一つの画像を作る
ことにチャレンジしてみます。


下にあるのが、オフスクリーンのCanvas3Dクラスです。
printOffScreen()を呼んで、JPGを作成しています。


public class OffScreenCanvas3D extends Canvas3D
{
    boolean     offFlg = false;
    Canvas3D    onCanvas = null;
    String  fileName = null;

    public OffScreenCanvas3D(GraphicsConfiguration gc, Canvas3D c, View view)
    {
        super(gc, true);
        onCanvas = c;

        Screen3D    sOn = onCanvas.getScreen3D();
        Screen3D    sOff = getScreen3D();
        sOff.setSize(sOn.getSize());
        sOff.setPhysicalScreenWidth(sOn.getPhysicalScreenWidth());
        sOff.setPhysicalScreenHeight(sOn.getPhysicalScreenHeight());

        view.addCanvas3D(this);
    }

    public void printOffScreen(boolean rightFlg)
    {
        System.out.println("Start " + new Date(System.currentTimeMillis()).toString
());

        BufferedImage   bImage = new BufferedImage(onCanvas.getWidth(), onCanvas.
getHeight(), BufferedImage.TYPE_INT_RGB);
        ImageComponent2D    buffer = new ImageComponent2D(ImageComponent.FORMAT_RGB,
 bImage);

        buffer.setCapability(ImageComponent2D.ALLOW_IMAGE_READ);
        setOffScreenBuffer(buffer);

        if(rightFlg){
            fileName = "c:\\temp\\Right.jpg";
            setMonoscopicViewPolicy(View.RIGHT_EYE_VIEW);
        }else{
            fileName = "c:\\temp\\Left.jpg";
            setMonoscopicViewPolicy(View.LEFT_EYE_VIEW);
        }

        offFlg = true;
        renderOffScreenBuffer();
    }


    public void postSwap()
    {
        System.out.println("postSwap() " + offFlg);

        if(offFlg){
            super.postSwap();

            ImageComponent2D    image = getOffScreenBuffer();
            BufferedImage   img = image.getImage();
            try {
                FileOutputStream out = new FileOutputStream(fileName);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(img);
                param.setQuality(0.9f,false);
                encoder.setJPEGEncodeParam(param);
                encoder.encode(img);
                out.close();
            } catch ( IOException e ) {
                System.out.println("I/O exception!");
            }
        System.out.println("End  " + new Date(System.currentTimeMillis()).toString())
;

            offFlg = false;

        }
    }


}


 ★
☆ 小林  洋美 < Hiromi Kobayashi >    ♪
 ★  e-mail : hiromi@xxxxxxxxxxx   ♪
☆                                      ♪

------------------------------------------------------------------------
    ◆桜も良いけど爽やか季節♪ 〜お出かけどこ行く?!
 http://www.infoseek.co.jp/Playspot?pg=playspot_top.html&svx=971122