Gå til innhold

Hvorfor treigere i Windows enn Ubuntu? Graphics2D


Anbefalte innlegg

Hei,

 

Det virker som programmet mitt kjører saktere i Windows enn i Ubuntu. Er det noe med måten Windows og Ubuntu tegner på? Hva kan jeg gjøre for å få dette programmet til å funke med Windows? Det er skrevet i Ubuntu, hvor det kjører med rundt 80 FPS, og 3 FPS i Windows XP på maskinen min... 3.4 GHz Conroe prosessor.

 

Hm, går tydeligvis ikke an å laste opp .jar filer. Legger ved vesentlig kode under.

 

Klikk for å se/fjerne innholdet nedenfor

 public void paintComponent(Graphics g)

 {

 	// call original function

 	super.paintComponent(g);



 	// convert to "advanced" graphics object (more options)

 	Graphics2D g2 = (Graphics2D)g;



 	// set background

 	g2.setColor(Color.BLACK);

 	g2.fillRect(0, 0, viewPort.size.width, viewPort.size.height);



 	// draw floor

 	g2.setColor(floor.color);

 	for (i = 0; i < floor.localLines.length; i++)

 	{

   pointOnScreenStart = viewPort.getPointOnScreen(floor.localLines[i].start);

   pointOnScreenEnd = viewPort.getPointOnScreen(floor.localLines[i].end);

   if (pointOnScreenStart != null && pointOnScreenEnd != null)

   	g2.drawLine(pointOnScreenStart.x, pointOnScreenStart.y, pointOnScreenEnd.x, pointOnScreenEnd.y);

 	}



 	// draw world coord system

 	origo = viewPort.getPointOnScreen(new Vector(0, 0, 0));

 	// x

 	g2.setColor(Color.BLUE);

 	xPoint = viewPort.getPointOnScreen(new Vector(worldAxisLen, 0, 0));

 	if (origo != null && xPoint != null)

 	{

   g2.drawLine(origo.x, origo.y, xPoint.x, xPoint.y);

   g2.drawString("x", xPoint.x, xPoint.y);

 	}

 	// y

 	g2.setColor(Color.GREEN);

 	yPoint = viewPort.getPointOnScreen(new Vector(0, worldAxisLen, 0));

 	if (origo != null && yPoint != null)

 	{

   g2.drawLine(origo.x, origo.y, yPoint.x, yPoint.y);

   g2.drawString("y", yPoint.x, yPoint.y);

 	}

 	// z

 	g2.setColor(Color.RED);

 	zPoint = viewPort.getPointOnScreen(new Vector(0, 0, worldAxisLen));

 	if (origo != null && zPoint != null)

 	{

   g2.drawLine(origo.x, origo.y, zPoint.x, zPoint.y);

   g2.drawString("z", zPoint.x, zPoint.y);

 	}



 	// draw model objects

 	for (i = 0; i < models.length; i++)

 	{

   g2.setColor(models[i].color);

   for (j = 0; j < models[i].localPoints.length; j++)

   {

   	pointOnScreen = viewPort.getPointOnScreen(models[i].totalRot.getVector(models[i].localPoints[j]).getAdd(models[i].center));

   	if (pointOnScreen != null) // if not behind camera

     g2.fillRect(pointOnScreen.x, pointOnScreen.y, 1, 1);

   }

 	}



 	// draw point model objects' local coord system

 	for (i = 0; i < models.length; i++)

 	{

   modelCenterPoint = viewPort.getPointOnScreen(models[i].center);

   // x

   g2.setColor(Color.BLUE);

   xPoint = viewPort.getPointOnScreen(models[i].xAxis.getMultiply(models[i].axisLen).getAdd(models[i].center));

   if (modelCenterPoint != null && xPoint != null)

   {

   	g2.drawLine(modelCenterPoint.x, modelCenterPoint.y, xPoint.x, xPoint.y);

   	g2.drawString("x", xPoint.x, xPoint.y);

   }

   // y

   g2.setColor(Color.GREEN);

   yPoint = viewPort.getPointOnScreen(models[i].yAxis.getMultiply(models[i].axisLen).getAdd(models[i].center));

   if (modelCenterPoint != null && yPoint != null)

   {

   	g2.drawLine(modelCenterPoint.x, modelCenterPoint.y, yPoint.x, yPoint.y);

   	g2.drawString("y", yPoint.x, yPoint.y);

   }

   // z

   g2.setColor(Color.RED);

   zPoint = viewPort.getPointOnScreen(models[i].zAxis.getMultiply(models[i].axisLen).getAdd(models[i].center));

   if (modelCenterPoint != null && zPoint != null)

   {

   	g2.drawLine(modelCenterPoint.x, modelCenterPoint.y, zPoint.x, zPoint.y);

   	g2.drawString("z", zPoint.x, zPoint.y);

   }

 	}



 	// varius data output

 	g2.setColor(Color.WHITE);

 	g2.drawString("framerate: " + framerate, 25, 25);

 	g2.drawString("time accel: " + timeAccel, 25, 35);

 	g2.drawString("active: " + models[activeModel].name, 25, 45);

 }

}

 

Ok, det ble veldig rotete. Men uansett, det jeg gjør er at man bruker fillRect(...) rundt 80000 ganger hver gang. Går fint i Ubuntu, men ikke i Windows, noen andre funksjoner jeg burde bruke, eller gjør jeg noe galt?

Endret av LostOblivion
Lenke til kommentar
Videoannonse
Annonse

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...