Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - rushtone

#1
German corner / Re: performance frage
January 08, 2013, 09:33:47 PM
danke schön mal wieder.
ich glaub langsam ich mach mir nen zu großen kopf um solche dinge anstatt einfach das zu nehmen was gut funktioniert.
#2
German corner / Re: performance frage
January 08, 2013, 09:15:16 PM
jawoll will die objekte entfernen..
meine objekte haben eine update methode,
die bei jedem frame durchlaufen wird.
in der update methode aktualsieren die objekte ihre position, rotation. bzw das verhalten das ich bei dem jeweiligen objekt haben möchte.
da möchte ich auch prüfen ob sie ausserhalb des spielfeldes geraten um sie dann zu entfernen.
also wasVisible ist auch ok. ich schätze da wird nur nen bool wert geprüft der ohnehin besetzt wird? zumindest war das meine vermutung und lese das auch nun so raus aus deiner antwort.
dann wäre das zumindest für die nicht spieler gesteuerten objekte perfekt.

ist die funktionsweise von reprojectCenter sehr performance lastig?
weil mein vom spieler bedienbares objekt möchte ich nicht komplett aus dem spielfeld haben bevor ich erkenne das das objekt aus dem spielfeld ist.
#3
German corner / performance frage
January 08, 2013, 01:43:55 PM
Hi egon.
kurze frage:
wenn man auf performance bedacht ist, welche vorgehensweise wäre die beste und inwiefern unterscheidet sich die performance in folgenden 3 ansätzen:

um zu prüfen, ob ein objekt im playfield ist hätte ich 3 optionen.

1. könnte ich mir feste eck punkte definieren die ich interpoliere mit der z koordinate meines objektes und dann prüfe ob der wert außerhalb meines spielfeldes ist.

2. ich könnte wasVisible verwenden um das zu prüfen.

3. ich könnte aber auch über reprojectCenter
die screen coordinate holen und das mit 0/0 und width/height prüfen.

3 wäre eigentlich am einfachsten aber ich bin mir nicht sicher was hier alles im hintergrund geschieht. wenn das nicht zu sehr auf die performance geht wäre das wohl mein favorit.

es geht nicht nur um 1 object das damit geprüft werden soll, sondern um so ziemlich alle in der szene.
#4
vielen Dank, du bist der beste :)
#5
hier der code:

//1:
world.getCamera().setPosition(0, -15, -22.5f);
world.getCamera().lookAt(new SimpleVector(0,0,0));

PLAYFIELD_TOP_LEFT.set(get2D3DWS(0, 0, 23.5));

// Der hier funktioniert wunderbar mit --> world.getCamera().setPosition(0, 0, -22.5f); aber mit world.getCamera().setPosition(0, -15, -22.5f); nicht mehr.
public SimpleVector get2D3DWS(int x, int y, float z) {
SimpleVector position = Interact2D.reproject2D3D(camera, fb, x, y, z);
position.add(world.getCamera().getPosition());
position.matMul(camera.getBack().invert3x3());
return position;
}

Hiermit kommt auch nicht das gewünschte raus.

Interact2D.reproject2D3DWS(camera, fb, 0, 0)


Ich hab auch schon versucht camera.getDirection() mit einzubeziehen, aber wahrscheinlich nicht richtig.
#6
German corner / Re: Rotation anhand des Bodens
January 07, 2013, 08:11:16 PM
du könntest deinem objekt einfach die translationsmatrix zuweisen.
dann wird es an die selbe stelle gesetzt, aber ohne rotation.
#7
hätte hierzu nochmal eine frage..
ich hab mein spiel ein wenig umgestellt.
vorher war die camera auf 0/0/-40 und zeigte auf 0/0/0.
meine objekte haben sich auf x,y und z bewegt.

jetzt habe ich die camera auf 0/-15/-22.5 die cam zeigt auch auf 0/0/0.
meine objekte bewegen sich nun nurnoch auf x und z und y=0.

jetzt bekomm ich meine eckpunkte wieder nicht ordentlich hin.

ich werd wohl irgendwie die camera richtung mit einbeziehen müssen, die sich nun geändert hat.
magst du mir da nochmal helfen?
ich komm leider nicht drauf.

#8
vielen dank.
#9
Moin,
ich hätte mal wieder eine kleine Frage.

Leider hab ich nirgends eine Erklärung gefunden, auch Beispiele für JPCT-AE sind denke ich sehr rar.

Ich hab nun ein wenig rumgespielt mit jpct-ae und möchte mein Projekt nun nochmal mit dem neuen Wissen neu machen.

Jetzt frage ich mich, wie geht man normalerweise vor, wenn man Objecte aus der Szene nimmt?
Wirklich rausnehmen mit world.removeObject() oder nimmt man dafür gewöhnlicherweise obj.setvisibility(false).

Ich rede hier natürlich von Objecten die nicht einmalig entfernt bzw. der Welt hinzugefügt werden.
Die würde ich direkt aus der Welt entfernen, wenn ich sie nicht mehr brauche. Mir gehts eher um Projektile beispielsweise.



#10
so nachdem ich bis gestern nach um 5 Uhr noch herumgegrübelt habe, dneke ich es auch verstanden zu haben.
Danke schonmal habe hier aufjedenfall etwas gelernt.

Eigentlich war es dumm auf die z Koordinate eingehen zu wollen, da kann man auch das reproject2D3DWS mit z = 1 verwenden und den Punkt einfach auf der Z Achse verschieben.
Aber das war mir an der Stelle irgendwie nicht klar.

Also das klappt nun, vielen dank..

Aber, wie immer gibt es ein aber.. ;)
Kann ich den auch den maximalen Z Wert ermitteln?

Wie bereits erwähnt: meine Objekte bewegen sich auf y und z Achse gleichermaßen.
Beispiel:
y=10, z=-10 -> y=100, z = -100 bzw. in Richtung 1,-1

Wenn ich nun über die reproject Methoden meine maximale y Koordinate auf z = 1 ermittel, könnte ich diesen Punkt auf der z Achse verschieben, wenn ich wüßte wo mein maximaler Z Bereich endet.

Ich könnte nun natürlich hergehen und ein Object an meiner Startposition auf dem selben weg zu verschieben, bis dieses nicht mehr sichtbar ist und mir dann das maximale Z auf diesem wege zu holen. Find ich aber blöd und unsauber.

Wie bekomme ich nun also auf der ebene auf der meine Objekte verschoben werden, den Punkt z an dem sie aus dem Bild verschwinden würden, also außerhalb des Frustum geraten?

Ggf. könnte man den Schnittpunkt den beide Vektoren bilden dazu verwenden?
(Ich werde mir mal Vektoren und Schnittpunkte anschauen derweil, hab noch keinen Schimmer wie das berechnet wird.)

Danke und Gruß.
#11
Ok ich muss zugeben, ich muss noch ne Menge lernen.
Und so recht verstanden habe ich es immer noch nicht, mag daran liegen das ich matrizen und Vektoren nie in der Schule hatte.
Was ich weiß habe ich mir selbst angeeignet.

Was bei mir nun hängen geblieben ist, ist dass ich:
1. die Position der Kamera nicht einberechnet habe. Ok das macht Sinn.
2. vom Ursprung ausgehe, was koordinate 0,0,0 im WS ist richtig? Ich aber von der Kamera ausgehen müsste, richtig?
Oder bin ich total falsch grade?

Also hiermit kommt in etwa das raus was ich erwarten würde.
Da ich die Kamera auf -40 z sitzen habe und eine tiefe von 20 habe, muss ich bei der tiefe 60 angeben richtig?
40 um auf den Ursprung zu kommen + 20 für die tiefe..


//Kamera etwas raus
camera.setPosition(0, 0, -40);
.
.
.
SimpleVector position = Interact2D.reproject2D3D(camera, fb, x, y,60);
//Kamera Position berücksichtigen
position.add(world.getCamera().getPosition());
position.matMul(camera.getBack().invert3x3());



Kann man die Maximale tiefe auch berechnen?
Das mit dem interpolieren bekomm ich locker hin.

P.s. kannst du mir ein gutes Buch empfehlen damit ich das alles schnell drauf habe?
#12
Hi Egon,

vielleicht kannst du mir helfen..
Auch andere dürfen natürlich helfen, wenn sie möchten.. ;)

Du hast mir im englischen Unterforum zu der Methode
reproject2d3d(x,y,z) geraten, leider funzt das nicht so wie ich dachte.

Ich hab meinen Denkfehler dort übrigens noch nicht so recht verstanden, ich war der Meinung, wenn ich
einen Richtungsvektor habe und den mit meiner Distanz multipliziere, dann müsste das, dasselbe sein wie eine translation des Objektes.
Und ich müsste die gleiche koordinate bekommen.. Wo ist mein Denkfehler?
Ich würds gerne verstehen... Sonst lern ich ja nix dabei..

Ich würde gerne die sichtbaren bereiche der Kamera ermitteln, damit ich:

A:
Gegner kurz außerhalb des sichtbaren bereichs erscheinen lassen kann.

B:
Verhindern kann das mein Spielerobjekt außerhalb des sichtbaren bereichs gerät.
Momentan fange ich das durch feste x und y Koordinaten ab, was aber aufgrund der perspektivischen Verzerrung blöd ist, da
die x koordinate natürlich je nach z koordinate anders liegen.

(Meine Objekte bewegen sich alle gleichermaßen auf y und z Achse. (translate(x,y,-y)))

Ich dachte ich kann das einfach ermitteln indem ich über die Bildschirm Koordinaten über die Methode reproject
die jeweiligen maximalen und minimalen Welt Koordinaten ermittle und diese beim Start besetze.

vereinfacht dargstellt:

// Ist klar das das nicht funktioniert, das soll auch nur mein Problem deutlich machen..:
//links oben = letzte sichtbare X koordinate oben
topX = reproject(0, 0, screenHeight);

//rechts unten = letzte sichtbare Y koordinate rechts
bottomY = reproject(screenWidth, screenHeight, 0);


Kannst du mir da helfen?

(bin relativ neu bei dem 3D Kram, ich versuche soviel zu lernen wie möglich und bin auch dabei mich in das thema einzulesen..
Aber jeder hat ja mal klein angefangen, daher hoffe ich, dass ich hier richtig bin und dich nicht nerve.)

Gruß und Danke.

#13
Support / Re: Scaling on different devices
December 20, 2012, 06:19:14 PM
ahh ok i see.. i was thinking it the same like a translation.. i get a direction vector. multiplying it with the distance and it should be the point where i projected my ray to. im still a bit confused i must admit.

egon as i saw you are able to speak german on other forums.. you are properply a german?
is english the desired language here or can i talk in german with you? might be easier.. at least for me.. ;)

what i tried with my attempt above was to figure out where my visible bounds are.
i wanna spawn enemys just a little distance outside the visible area.
since i move my ships equally on z and y axis..
i could take the value of the screen height divided by 2 as this z parameter.
or what kind of z does this method you suggested is expecting? z of the world coords i guess?
if i could use the half height of the screen size. im fine i think. couldnt test it yet..
my wife doesnt want me to go onto the pc today.. ;)

im honest this is my first 3d project. i guess my questions are totaly newbish. so im sorry if that is the case. i try to learn as much as i can.
#14
Support / Re: Scaling on different devices
December 19, 2012, 07:13:24 PM
Hi there,
its me again.. :)

I thought after you helped so nicely, i could ask one more question.
I wonder how i could get the coords in world space from a touch event.

I already played around with Interact2D.reproject() and Interact2D.reprojectWS()
Methods, but i do something wrong i guess.
The data i get in return doesnt match the data my object has..

for example if i touch my upper left corner this would return x=0 y=0 screen coords..
if i would want that point in worldspace visible by the camera at z location 20 how should i do this?

i tried like this:



//camera set up in init method
//set camera a little bit off axis
camera.setFOV(67);
camera.setOrientation(new SimpleVector(0,0,1), new SimpleVector(0,-1,0));
camera.setPosition(0, 0, -30);
.
.
.
//onTouchEvent..
// x,y comes from the touchevent (imagine 0/0)
SimpleVector position = Interact2D.reproject2D3D(camera, fb, x, y).normalize();
position.scalarMul(20);


where is my mistake?

When i touch on my Object, output is this:
Touch: (-7.165911,-7.2304683,17.2154)
Object: (-19.719666,-20.244387,19.565144)

Do i have to take the changed camera orientation into this calculation some how?

P.s. Egon, the Method wasVisible() now actually works like a charm.
#15
Support / Re: Scaling on different devices
December 18, 2012, 10:27:12 PM
on same aspect rations with different sizes they are on the same point on screen? i think so, and i think it makes sense.. just to get sure i ask.
(never had the need to care of those things yet)

no they dont trigger collisions.. you misunderstood something.
i just asked for the collision cache to have absolutely no allocations beside the touch events.. ;)
but maybe i am a bit to enthusiastic with avoiding allocations in general.

i thank you for answering all my questions.
you really helped me.

thank you. :)