2

Java3D や OpenGL などの 3D ライブラリを使用せずに Java で 3D 長方形を作成するための簡単なコード例やガイドがあるかどうか疑問に思っていました!

4

3 に答える 3

2

3D Rectangle は直角プリズムと呼ばれます。

3D 形状の定義はそれほど難しくありません。直角プリズムの定義の 1 つを次に示します。

import java.awt.Graphics;

public class RectangularPrism {

    protected Point3D originPoint;
    protected Point3D xPoint;
    protected Point3D yPoint;
    protected Point3D zPoint;

    public RectangularPrism() {

    }

    public RectangularPrism(Point3D originPoint, Point3D xPoint, 
            Point3D yPoint, Point3D zPoint) {
        this.originPoint = originPoint;
        this.xPoint = xPoint;
        this.yPoint = yPoint;
        this.zPoint = zPoint;
    }

    public void setOriginPoint(Point3D originPoint) {
        this.originPoint = originPoint;
    }

    public void setxPoint(Point3D xPoint) {
        this.xPoint = xPoint;
    }

    public void setyPoint(Point3D yPoint) {
        this.yPoint = yPoint;
    }


    public void setzPoint(Point3D zPoint) {
        this.zPoint = zPoint;
    }

    public void render(Graphics g, Point3D viewPoint) {

    }

    public class Point3D {
        protected int x;
        protected int y;
        protected int z;

        public int getX() {
            return x;
        }

        public void setX(int x) {
            this.x = x;
        }

        public int getY() {
            return y;
        }

        public void setY(int y) {
            this.y = y;
        }

        public int getZ() {
            return z;
        }

        public void setZ(int z) {
            this.z = z;
        }

    }

}

計算が必要な render メソッドを作成しています。そして、その計算は、定義したい 3D 形状ごとに異なります。

呼び出しルーチンは、すべての 3D 形状をレンダリングする順序を把握する必要があります。基本的に、最も遠い 3D 形状が最初にレンダリングされ、より近い 3D 形状が適切にオーバーラップする必要があります。

3D ライブラリは、これらすべてを把握しているだけでなく、3D シーンを可能な限り短い時間でレンダリングできるように最適化されています。

于 2012-12-28T17:21:48.943 に答える
0

http://dl.dropbox.com/u/14767221/projection.7zからダウンロードできるシンプルなビューアを実装しました。

于 2012-12-28T16:35:23.863 に答える
0

java.awt.Graphics.draw3DRect() メソッドを使用できます。
http://www.java-examples.com/draw-3d-rectangle-square-applet-window-example .

于 2012-12-28T16:30:23.120 に答える