java 3d ohne Java3d

Chloroplast

Bekanntes Mitglied
ich hoffe ich bin hier richtig. und zwar bin ich gerade dabei ein 3D-anzeigeprogramm zu basteln. bevor jetzt jmd. auf java 3d verweisst - ich habe es mir bereits angesehen, aber ich möchte gerne eine version machen, die funktioniert ohne DAS der user etw installieren muss (natürlich außer java). mein problem ist, dass das alles so nicht hinkommen kann.

Java:
/**
 * @(#)ddhandlertest.java
 *
 * ddhandlertest Applet application
 *
 * @author Chloroplast
 * @version 1.00 2012/3/8
 */

import java.awt.*;
import java.awt.Color.*;
import java.applet.*;
import java.awt.event.*;

public class ddhandlertest extends Applet implements AdjustmentListener{
	int ddobject[][] = new int[13][1];
	int performedDdobject[][];
	int[] newObject = new int[13];
	int allObjects = 1;
	int pointsX[] = new int[4];
	int pointsY[] = new int[4];
	Scrollbar scroll;
	int scrollwert;

	public void init() {
	BorderLayout B = new BorderLayout();
	setLayout(B);

	scroll = new Scrollbar(Scrollbar.HORIZONTAL,360,5,0,720);
	add(scroll,BorderLayout.NORTH);

	scroll.addAdjustmentListener(this);

	initObject();
	}

	//--------------------Eventlistener------------------------------------------------------------------------------

	public void adjustmentValueChanged(AdjustmentEvent e){  //// 3 /////
		scrollwert = e.getValue()-360;
		rotate(scrollwert);
		repaint();}
	//------------------------------------automatische ausführung----------------------------------------------------

	public void rotate(int rot){
		for(int cc=0;cc<allObjects;cc++){
			newObject = turnY(ddobject[1][cc],ddobject[3][cc],ddobject[4][cc], ddobject[6][cc], ddobject[7][cc], ddobject[9][cc], ddobject[10][cc], ddobject[12][cc],rot);

			}
		}

	//------------------------------------Zuweisung von werten--------------------------------------------------------
	public void initObject(){
	ddobject[0][0]=0;
	ddobject[1][0]=60;
	ddobject[2][0]=30;
	ddobject[3][0]=0;//
	ddobject[4][0]=60;
	ddobject[5][0]=-30;
	ddobject[6][0]=0;//
	ddobject[7][0]=-60;
	ddobject[8][0]=-30;
	ddobject[9][0]=0;//
	ddobject[10][0]=-60;
	ddobject[11][0]=30;
	ddobject[12][0]=0;}//


	public void initPolObject(){
		pointsX[0] = newObject[1]+200;
		pointsX[1] = newObject[4]+200;
		pointsX[2] = newObject[7]+200;
		pointsX[3] = newObject[10]+200;
		pointsY[0] = ddobject[2][0]+200;
		pointsY[1] = ddobject[4][0]+200;
		pointsY[2] = ddobject[8][0]+200;
		pointsY[3] = ddobject[11][0]+200;

		System.out.println(pointsX[0]+" bei "+pointsY[0]);
		System.out.println(pointsX[1]+" bei "+pointsY[1]);
		System.out.println(pointsX[2]+" bei "+pointsY[2]);
		System.out.println(pointsX[3]+" bei "+pointsY[3]);
	}

	public int[] turnY(int x1 ,int z1,int x2, int z2, int x3,int z3, int x4, int z4, int rot){

		System.out.println("um "+rot+" gedreht...");
			double hyp1 = Math.sqrt(x1*x1+z1*z1);
			double hyp2 = Math.sqrt(x2*x2+z2*z2);
			double hyp3 = Math.sqrt(x3*x3+z3*z3);
			double hyp4 = Math.sqrt(x4*x4+z4*z4);

			double winkel1, winkel2, winkel3, winkel4;

			if(x1<0 && z1>0)winkel1=rot*(-1)+Math.toDegrees(Math.atan(z1/x1));
			else if(z1<0 && x1>0)winkel1=rot*(-1)+Math.toDegrees(Math.atan(z1/x1));
			else winkel1=rot+Math.toDegrees(Math.atan(z1/x1));

			if(x2<0 && z2>0)winkel2=rot*(-1)+Math.toDegrees(Math.atan(z2/x2));
			else if(z2<0 && x2>0)winkel2=rot*(-1)+Math.toDegrees(Math.atan(z2/x2));
			else winkel2=rot+Math.toDegrees(Math.atan(z2/x2));

			if(x3<0 && z3>0)winkel3=rot*(-1)+Math.toDegrees(Math.atan(z3/x3));
			else if(z3<0 && x3>0)winkel3=rot*(-1)+Math.toDegrees(Math.atan(z3/x3));
			else winkel3=rot+Math.toDegrees(Math.atan(z3/x3));

			if(x4<0 && z4>0)winkel4=rot*(-1)+Math.toDegrees(Math.atan(z4/x4));
			else if(z4<0 && x4>0)winkel4=rot*(-1)+Math.toDegrees(Math.atan(z4/x4));
			else winkel4=rot+Math.toDegrees(Math.atan(z4/x4));

			int out[] = new int[13];
			out[1]=(int)(Math.cos(Math.toRadians(winkel1))+hyp1);
			out[4]=(int)(Math.cos(Math.toRadians(winkel2))+hyp2);
			out[7]=(int)(Math.cos(Math.toRadians(winkel3))+hyp3);
			out[10]=(int)(Math.cos(Math.toRadians(winkel4))+hyp4);
			out[3]=(int)(Math.sin(Math.toRadians(winkel1))+hyp1);
			out[6]=(int)(Math.sin(Math.toRadians(winkel2))+hyp2);
			out[9]=(int)(Math.sin(Math.toRadians(winkel3))+hyp3);
			out[12]=(int)(Math.sin(Math.toRadians(winkel4))+hyp4);

			return out;
		}


	public void paint(Graphics g) {
		initPolObject();

		g.fillPolygon( pointsX, pointsY,4 );
		g.drawString("Welcome to Java!!", 50, 60 );
		g.setColor(Color.red);
		g.fillOval(198,198,4,4);
		g.setColor(Color.blue);

		g.fillOval(pointsX[0]-8,pointsY[0]-8,4,4);
		g.fillOval(pointsX[1]-8,pointsY[1]-8,4,4);
		g.fillOval(pointsX[2]-8,pointsY[2]-8,4,4);
		g.fillOval(pointsX[3]-8,pointsY[3]-8,4,4);
	}
}


das ganze soll so funktionieren, das es in einem 2dimensionalem array polygone(4-eckige) definiert werden (ich habe jetzt erstmal eine fläche) zu jeder fläche gehören 4x x, y, und z koordinaten. dieses wird (erstmal) um die Y-Achse gedreht. ich glaube ich habe irgentwo etw vergessen, aber ich finde die stelle nicht 🙁 hoffe jmd hat die zeit und die lust mir zu helfen
 
Zuletzt bearbeitet:
Ist ja klar, dass das nicht geht: Es darf nicht
Code:
if(x3<0 && z3>0)winkel3=rot*(-1)+Math.toDegrees(Math.atan(z3/x3));
else if(z3<0 && x3>0)winkel3=rot*(-1)+Math.toDegrees(Math.atan(z3/x3));
else winkel3=rot+Math.toDegrees(Math.atan(z3/x3));
heißen, sondern muss
Code:
if(x3<0 && z3>0)winkel3=rot*(-1)+Math.toDegrees(Math.atan(z3/x3));
else if(z3<0 && x3>0)winkel3=rot*(-2)+Math.toDegrees(Math.atan(z2/x3));
else winkel3=rot+Math.toDegrees(Math.atan(z3/x3));
lauten!


:joke:

Also... nur weil man Java3D nicht verwenden will, heißt das ja nicht, dass man sich nicht Interfaces/Klassen schreiben kann wie
Java:
class Point { /* float x,y,z */

class Matrix
{
    Point rotateY(Point p, float angleDegrees) ...
    ...
}
Was soll das denn sonst werden, wenn es "fertig" ist?
 
war das jetzt auf alle 4 stellen bezogen? und, ich muss gestehen, interfaces habe ich noch nie gemacht. ich hatte java mal ein jahr als AG und danach halt übers internet. und das ist jetzt nur ein Applet zu testen, später soll das eine (mehrere) klassen werden mit denen ich 3D-Spiele entwickeln kann.
 
Hmja... solche Threads gibt's öfter, in ähnlicher Form, und oft wird dann ganz einfach gesagt: "Lass es bleiben, da kommt nur Mist raus". Das werde ich nicht sagen. Ich sage: "Das kannst du gerne versuchen (aber geh nicht davon aus, dass etwas anderes als Mist rauskommt)". Im Ernst, 3D-Grafik ist ... (summ...) nicht so einfach, und wenn du von Interfaces noch nichts gehört hast, und bei der Berechnung einer Rotation mit atan und if-Abfragen hantierst, ist schon ein einfacher, rotierender Drahtgitterwürfel mit orthographischer Projektion ein sehr hoch gestecktes Ziel - von Texturen mal ganz abgesehen (vergiß drawPolygon). Es spricht nichts dagegen, sich mal ein paar Sachen in dieser Richtung anzusehen, ich denke, es kann hilfreich sein, mal den frustrierenden Weg der eigenen Matriximplemeintierung und des guten alten Bresenham gagangen zu sein - wenn man SEHR viel Zeit hat. Wenn man eine Basis für 3D-Spiele will, ist das aber der falsche Weg. Einige der richtigERen sind auf Java und 3D-Grafik - it's engine driven [whoopsie's homepage] zusammengefasst.

EDIT: Nur falls das falsch ankam: Die gepostete Code"Korrektur" sollte nur ein Witz sein - ein Wink mit dem Zaunpfahl, der so viel heißen sollte wie: "Was auch immer du da rechnest, es wird kaum jemand nachvollziehen wollen, und wenn doch dann wird er kaum einen Fehler finden, der aus so etwas einfachem wie einem Vorzeichenfehler besteht". Wobei - was zum ... ... ... du da mit dem atan machst, wäre schon fast wert, mal nachvollzogen zu werden 😉
 
Zuletzt bearbeitet:
soll ich mal versuchen es zu erklären? zeit ist bei mir nicht das problem, ist halt mehr ein hobby. ich guck mir das mal an... ich wollte halt versuchen, das ganze so zumachen, das es eben keine weiteren sachen braucht... ich weiss jetzt nicht in wie fern OpenGL vorrausgesetzt ist... mal gucken
 
Was meinst du mit "keiner weiteren Sachen"? Heißt das "keine weiteren JARs"?

EDIT: Java3D ist so gesehen tatsächlich "unhandlich", weil es installiert werden muss, aber eine normale JAR sollte doch kein Problem sein ???:L
 
eine normale jar ist auch nicht das problem, aber ich habe im moment eigentlich keine grafikkarte (nur die onboard, aber die ist total schlecht) da steht ja was von der grafikkarte gestützen 3d; ich weiss nicht ob meine grafikkarte das packt
 
Wenns einer von den Core i Prozessoren von Intel ist, dann packen die das. Damit kannst du auch GTA Vice City oder ähnlich alte Spiele spielen^^
(Und soweit ich weiß, ist Java3D nicht das höchstmodernste)
 
ich weiss jetzt nicht was meine onboardgrafikkarte ist, ich weiss inzwischen nur... sie ist zu schlecht. ich mir jetzt 3 von den 3D sachen bei dem link weiter oben angesehen, und, meine grafikkarte packt das nicht (nur die applets davon) von daher muss ich wohl meine sache weiterentwickeln
 
Das verlinkte Beispiel werde ich mal ausprobieren, um diese Aussage zu bestätigen. Ich muss es vorher nur auf eine 5 1/4-Zoll-Diskette kopieren... :reflect:

:joke:
 
Das verlinkte Beispiel werde ich mal ausprobieren, um diese Aussage zu bestätigen. Ich muss es vorher nur auf eine 5 1/4-Zoll-Diskette kopieren... :reflect:

:joke:

Hoffentlich hast Du noch genug von den Dingern, die JRE musst Du dann ja wahrscheinlich auch noch kopieren... 😉


passiert nichts.. ausser das er bisschen rechnet, und das halt der typische webstart ist,passiert nichts

Staun, ich vermute den Fehler trotzdem woanders ... Selbst ein mir bekannter 9 Jahre alter Bürorechner mit onbord Grafikchip macht OpenGL 2.0 ohne murren.
(Allerdings davon ausgehend das Dein Rechner kein 5 1/4 Zoll Laufwerk mehr hat 😉)


Viele Grüße,
Fancy
 
mein PC ist eigentlich garnicht so schlecht... mit 4GB arbeitsspeicher und einem AMD Phenom(tm) II X6 1055T 2.80 GHz 64bit betriebssystem windows 7. nur halt OnBoard grafikkarte
 
Wie schafft man es, so einen PC ein Bild anzeigen zu lassen ohne, dass er OpenGL fähig ist?^^ Schließe mich daher Fancys Meinung an..
Sollte es aber tatsächlich dran liegen: Lieber 30 € für ne Grafikkarte (vorrausgesetzt es handelt sich nicht um einen Laptop), als das Rad neu zu erfinden 😉
 
Das Webstart Teil müsste nachdems fertiggeladen hat so 3 rot, grün, blaue Zahnräder anzeigen, die sich 'n bisschen bewegen^^
 
Ja, das sollte auf jeden Fall funktionieren. Was für eine GraKa (chipsatz) hast du denn? Vielleicht nur irgendeinen Steinalten Windows-Eigenen Treiber installiert? Schau mal auf der Herstellerwebseite, ob du einen neueren Treiber bekommst
 
Ok, die kann zwar nicht viel, aber en bissel sollte schon gehen...

Hast Du mal den aktuellen NVIDIA Treiber installiert? Den gibt es hier.

Und dann vielleicht noch mal versuchen.

Viele Grüße,
Fancy
 
Was genau? OpenGL? Dann such' nach Threads, in denen Fancy geantwortet hat 😀 Oder das konkrete Conway-Beispiel?

Hoppala, das ist gar nicht der Conway-Thread 😳 (sowas peinliches 😳 ). Zu OpenGL an sich gibt's viele Tutorials. Oft sind die für C, oder für JOGL, aber die nach LWJGL zu portieren ist i.a. nicht so aufwändig. Am besten mal ein, zwei einfache Beispiele anschauen und ein bißchen rumspielen. Für's systematischere gibt's dann ... ja, in letzter Konsequenz GANZ ausführliche Dinge wie Learning Modern 3D Graphics Programming , könnte aber für den Anfang ein Overkill sein.
 
Zuletzt bearbeitet:
Hallo.

Es wurde schon erwähnt das du auch Lib's bzw Jar's von Java3D mitliefern kannst, und ansonsten wird nur noch die nativen libraries (dll) benötigt. Und dann kann "jeder!?" Java3D Anwendungen ausführen.

Wie man Lib's zu Projekten hinzufügt kann man sich sicherlich super erGooglen. 😉
Oder ein Beispiel wäre das hier:
How to install Java3D

Wenn es LWJGL sein soll dann das hier:
lwjgl.org - Home of the Lightweight Java Game Library

Und wenn es was anderes werden soll, dann lässt sich bestimmt auch das per Google finden 🙂

Es gibt ja auch Tutorials für Java3D etc.
 
LWJGL bzw. JOGL einzubinden ist nicht sonderlich schwierig. Schau am besten die Beispiele auf den jeweiligen Seiten an oder frage hier bzw. dort in den Foren. Zunächst müsstest du dir die Libs der jeweiligen Bindings herunterladen.

[edit]Verdammt, zu langsam gewesen...[/edit]
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben