2010-11-24 6 views
0

Java2Dを使用して単純な3D家を描くにはどうすればよいですか?私は単純な3D図面のように見えるように家の側壁を描きたい。Java2Dを使用して3Dハウスを描画しますか?

// House.java

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GradientPaint; 
import java.awt.geom.Rectangle2D; 

public class House extends Canvas{ 

    House(){ 
    setSize(800,600); 
    } 
    public void paint(Graphics g){ 

    // house - foundation 
    g.setColor(new Color(0xCDBE70)); 
    g.fillRect(148,500,304,50); 

    // house - front 
    g.setColor(new Color(0xFFEC8B)); 
    g.fillRect(150,350,300,150); 

    // house - side 
    }  
    } 

//ShowHouse.java

import java.awt.Frame; 
import java.awt.AWTEvent; 
import java.awt.event.WindowEvent; 

public class ShowHouse extends Frame{ 
    public static void main(String arg[]){ 
    new ShowHouse(); 
    } 
    ShowHouse(){ 
    enableEvents(AWTEvent.WINDOW_EVENT_MASK); 
    setLocation(250,50); 
    House canvas = new House(); 
    add(canvas); 
    pack(); 
    setVisible(true); 
    } 
    public void processWindowEvent(WindowEvent event){ 
    if(event.getID() == WindowEvent.WINDOW_CLOSING) 
     System.exit(0); 
    } 
    } 
+1

http://en.wikipedia.org/wiki/Axonometric_projection、http://en.wi kipedia.org/wiki/Perspective_projection#Perspective_projection –

+0

+1ありがとうございます。面白い読書。私は、軸索投影法で描かれたオブジェクトの限界が、観察者に近づいたり遠ざかったりするにつれて大きくないか小さく見えないということを知らなかった。 – Anthony

+0

私は等角投影を見ています。私は一般的なパスまたはdrawLineの使用を避けようとしていました。その代わりに、3D効果を与えるために矩形とポリゴンをグループ化しようとしていました。 – Anthony

答えて

1

私はあなたの家クラスに書き換えています:

//House.java

public class House extends Canvas{ 

    House(){ 
    setSize(800,600); 
    } 
    public void paint(Graphics g){ 

    Polygon p = new Polygon(); 
    p.addPoint(100,50); 
    p.addPoint(300,50); 
    p.addPoint(250,100); 
    p.addPoint(50,100); 

    g.fillPolygon(p); 

    Graphics2D g2 = (Graphics2D) g; 
    g2.setColor(new Color(0xAEAEAE)); 
    g2.draw(new Line2D.Double(300, 50, 350, 100)); 
    g2.draw(new Line2D.Double(350, 100, 350, 180)); 
    g2.draw(new Line2D.Double(350, 180, 250, 180)); 
    g.setColor(new Color(0xFFEABB)); 
    p = new Polygon(); 
    p.addPoint(50,100); 
    p.addPoint(250,100); 
    p.addPoint(250,180); 
    p.addPoint(50,180); 

    g.fillPolygon(p); 

    g.setColor(new Color(0xFFFFFF)); 
    p = new Polygon(); 
    p.addPoint(75,125); 
    p.addPoint(225,125); 
    p.addPoint(225,150); 
    p.addPoint(75,150); 

    g.fillPolygon(p); 

    } 
    } 
+0

+1ありがとうモハメド。あなたのコードは本当に私がこれを行う方法を理解するのに役立っています。 – Anthony

関連する問題