3D Balken

Status
Nicht offen für weitere Antworten.

Phenix

Bekanntes Mitglied
Hi, hat einer von euch vielleicht Erfahrung mit 3D-Grafiken? Ich möchte nichts wildes machen, möchte nur ein "3DRect" zeichnen, dass anstelle eines vorher vorhandenen "rects" gesetzt wird. Also quasi einen Balken in meinem Balkendiagramm konvertieren zu einem 3DBalken.

Hab das folgendermaßen versucht:
Code:
--------
if(threeD)
        {
            g.setColor(Color.gray);
            g.draw3DRect(0,0,width-1,height-1,true);
        }
-------
Jetzt wird mir zwar der Balken gemalt, aber man sieht nicht wirklich viel Tiefe. Wie kann ich das machen? Danke schonmal.
 

Phenix

Bekanntes Mitglied
Hm... ok, aber wofür gibt es denn dann die Methode draw3DRect(int,int,int,int,boolean) im package java.awt.Graphics?
 

0x7F800000

Top Contributor
naja, nicht für sowas jedenfalls. 3DRect ist afaik nur dazu da, um Schaltflächen und ein wenig aus der bildfläche herausragenden Components zu zeichnen. Solche Quader müsstest du dir wohl selbst aus irgendwelchen gefüllten polygonzügen zusammenbasteln.
 

0x7F800000

Top Contributor
Code:
	public void fill3DBar(Graphics g, int x, int y, int w, int h, int depth){
		Color originalColor=g.getColor(); 	// urspruengliche Farbe abspeichern
		g.fillRect(x,y,w,h); 				// Fassade
		g.setColor(g.getColor().darker());
		g.fillPolygon(	new int[]{x,x+w,x+w+depth,x+depth}, 
						new int[]{y,y,y-depth,y-depth},4);		// Deckel
		g.setColor(g.getColor().darker());
		g.fillPolygon(	new int[]{x+w,x+w,x+w+depth,x+w+depth},
						new int[]{y,y+h,y+h-depth,y-depth},4);	// Seitenflaeche
		g.setColor(originalColor);			// urspruengliche Farbe wiederherstellen
	}
auch nicht grad die schwierigste Herausforderung... :roll:
 

0x7F800000

Top Contributor
da kriegt man sogar einen Transparenzeffekt auch noch geschenkt:
Code:
	public void fill3DBar(Graphics g, int x, int y, int w, int h, int d){
		Color frontColor=g.getColor(); 	// urspruengliche Farbe abspeichern
		Color topColor=frontColor.darker();
		Color sideColor=topColor.darker();
		topColor=new Color(topColor.getRed(),topColor.getGreen(),topColor.getBlue(),frontColor.getAlpha());
		sideColor=new Color(sideColor.getRed(),sideColor.getGreen(),sideColor.getBlue(),frontColor.getAlpha());
		
		if(frontColor.getAlpha()!=0xFF){
			// hintere wand
			g.fillRect(x+d,y-d,w,h);
			
			// unterseite
			g.setColor(topColor);
			g.fillPolygon(	new int[]{x,x+w,x+w+d,x+d}, 
							new int[]{y+h,y+h,y+h-d,y+h-d},4);		
			//linke seite
			g.setColor(sideColor);
			g.fillPolygon(	new int[]{x,x,x+d,x+d},
							new int[]{y,y+h,y+h-d,y-d},4);
		}
		
		//fassade
		g.setColor(frontColor);
		g.fillRect(x,y,w,h);
		
		// deckel
		g.setColor(topColor);
		g.fillPolygon(	new int[]{x,x+w,x+w+d,x+d}, 
						new int[]{y,y,y-d,y-d},4);
		
		//rechte seite
		g.setColor(sideColor);
		g.fillPolygon(	new int[]{x+w,x+w,x+w+d,x+w+d},
						new int[]{y,y+h,y+h-d,y-d},4);		
		
		// urspruengliche Farbe wiederherstellen
		g.setColor(frontColor);
		
	}
probier's zB mit sowas aus:
Code:
    g.setColor(new Color(125,255,20,30));
		fill3DBar(g, 100, 100, 20, 60, 10);
		g.setColor(new Color(240,30,220,15));
		fill3DBar(g, 73, 60, 30, 130, 15);
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben