Canvas3D und setXORMode und Vista

Status
Nicht offen für weitere Antworten.

MikeM

Mitglied
Hallo,
ich entwickle ein kleines CAD-System mit Java3D. Auf meinem alten PC (Windows XP) funktioniert es auch problemlos. Unter Windows Vista hängt das Fadenkreuz, weil das Zeichnen mit Graphics2D und der XOR-Methode sehr langsam ist.

Ich verwende die JDK 1.6 und Java3d 1.5

Weise ich dem Canvas3D kein SimpleUniverse zu, ist die Geschwindigkeit OK.


Code:
import java.awt.*;
import javax.swing.*;

import javax.media.j3d.*;

import com.sun.j3d.utils.universe.*;

@SuppressWarnings("serial")
public class myTestFrame extends JFrame 
{
   protected SimpleUniverse universe = null;
   private Canvas3D cadPanel = null;
   private Point crossHairPosition = new Point();
   private boolean crossHairIsVisible = false;   
   
   public myTestFrame() 
   {
	 cadPanel = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
	 universe = new SimpleUniverse(cadPanel);
	 universe.addBranchGraph(new BranchGroup());
	 
	 cadPanel.setBackground(Color.black);	
	 cadPanel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() 
	 {
	   public void mouseMoved(java.awt.event.MouseEvent e) 
	   {
		 cadPanel_mouseMoved(e);
	   }
	 });  
	 
	 this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
	 this.getContentPane().add(cadPanel);
	 this.addWindowListener(new java.awt.event.WindowAdapter() 
	 {
	    public void windowClosing(java.awt.event.WindowEvent e) 
	    {
	      System.exit(0);
		}
	 });	 
   }


   public static void main(String[] args)
   {
 	myTestFrame instance = new myTestFrame();
 	instance.setSize(600, 400);
 	instance.setVisible(true);
   }	
   
   private void cadPanel_mouseMoved(java.awt.event.MouseEvent e)
   {
 	 if (crossHairIsVisible) drawCrossHair();
 	
  	 crossHairPosition.x = e.getX();
 	 crossHairPosition.y = e.getY();
 	
 	 drawCrossHair();
   }  
   
   public void drawCrossHair()
   {
 	 Graphics2D g2d = (Graphics2D) cadPanel.getGraphics();
 	 g2d.setXORMode(Color.white);
 	
 	 g2d.drawLine(crossHairPosition.x, crossHairPosition.y-20, 
 	  		      crossHairPosition.x, crossHairPosition.y+20);
 	 g2d.drawLine(crossHairPosition.x-20, crossHairPosition.y, 
 		          crossHairPosition.x+20, crossHairPosition.y);	
 	
 	 crossHairIsVisible = !crossHairIsVisible;  
   }    
}

Ist das ein Problem von Windows Vista?
Oder gibt es eine Einstellung, die man vornehmen muss?

Vielen Dank und viele Grüße

MikeM
 

Evil-Devil

Top Contributor
Nutzt du OpenGL oder Direct3D bei Java3D unter Vista?
OpenGL ist unter Vista ohne passenden Treiber sehr langsam.
 

MikeM

Mitglied
Danke für die schnelle Antwort.

Ich glaube ich verwende OpenGL, da ich beim Starten keine Optionen angebe.
Wie kann ich Direct3D einstellen?

MikeM
 

Evil-Devil

Top Contributor
Gute Frage, vermutlich als Startparameter. Da werden die Java3Dler dir mehr helfen können. Ich nutz nur LWJGL.
 

MikeM

Mitglied
Den Startparmeter für Direct3D habe ich gefunden (java -Dj3d.rend=d3d)
Die Geschwindigkeit wird nicht besser.
Meinen Grafikkartentreiber (NVIDIA) habe ich auch aktualisiert. Ebenfalls ohne Erfolg.

MikeM
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben