entity system funktionsweise?

Previous topic - Next topic

Schranz0r

Ruhig bleiben und abwarten ;)
Wenn mir Gernot mit der Rotation hilf, bau ichs im ES ein .
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

x-tra

cool super, na da bastel ich derweil noch bisschen an meinem level.

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Neee... ich kapier's net. Wo gibt es eine Situation, wo man so was braucht!?

x-tra

stell dir nen sonnensystem vor, nur ohne sonne.

alles bewegt sich um einen virtuellen punkt.

achja, ich habe mal in c3d eine tolle smooth cameraführung gemacht, wäre ohne virtuelle pivots so nicht möglich gewesen.

ich hab das jetzt so gelöst, dass ich als pivot eine grüne kugel nehme, aber das ist keine endlösung.

ein unsichtbares objekt, was aber ganz normal als entity rotiert/bewegt/parented/usw. werden kann würde schon reichen.

ich würd auch selber solch eine funktion machen, wenn ich wüßte wie man so ein objekt unsichtbar macht.

[edit] schau mal in dein postfach hier, vielleicht hilft es ja, oder eben mal bei bb3d, auch wenns wehtut, aber die befehle die es bei bb3d und cobra3d gibt, haben schon ihre berechtigung.

Kitty Hello

Ja, und jetzt machst Du einen Plateten "Sonne" und machts den 0,0,0 Punkt da, wo sich das Teil rum dreht.
Mal im Ernst - ist das ein Real-Life Szenario? Soll wegen so einem Sonnensystem die ganze Engine langsam werden?

Bitte, bitte, bitte aufhören zu meckern und endlich mal was damit machen! Ich mach da gerne weiter, aber nicht, wenn jeder nur meckert statt endlich mal was damit zu machen.

x-tra

#21
@gernot:
Code (glbasic) Select
Ein Drehpunkt (pivot entity) ist ein unsichtbares Objekt in der 3D-Welt. Es wird hauptsächlich als Parent für andere Objekte benutzt. Danach können mit diesem Objekt viele hinzugefügte Objekte gedreht (Zentrum der Rotation) oder verschoben werden.

Alleine um eine Kameraführung relativ einfach umzusetzen.....

Wie gesagt, ein Pivot ist einfach nur ein unsichtbares objekt mit koordinaten und ausrichtung, ich denke, das kostet kaum rechenleistung.es ist nur ein unsichtbares objekt, denn abhängigkeiten werden simple mittels parent gelöst.

ich bau schon mit dem Entity System, aber als pivot habe ich im moment eine normale kugel als mesh geladen, das ist nur nicht der bringer, weil sichtbar.

[edit speziell für gernot]  stell dir eine camera vor, die als parent ein modell hat, sagen wir player a.nun folgt diese camera natürlich player a und soll, egal ob movement oder rotation, alles dem player a nachmachen, was an und für sich schon quatsch ist, da der player dann bei einer rotation der camera als folge einer rotation von player a, sich ebenfalls dreht und das um die eigene achse, ebenso wie player a, und somit player a aus dem sichtfeld von der camera wäre.

mittels zweier pivots kann ich eine super kameraführung bauen, die a) einfach zu verstehen ist b) auf herkömmlichem weg entweder garnicht, da entitysystem unvollständig, oder völlig umständlich ohne entitysystem zu programmieren wäre.

gib mir eine funktion, die ein unsichtbares objekt(vektor bspweise) mit koordinaten und ausrichtung (wie ein geladenes .ddd objekt mit dem ES ansprechbar(movement/rotation/parent), und ich beweise dir wie nützlich sowas sein kann.


schau:http://www.glbasic.com/forum/index.php?topic=1200.msg7334#msg7334

P.S. Für Entityparent(habs noch nich probiert): Das child objekt soll movement und rotation ebenso wie das parent um die eigene achse vollziehen. das ist wichtig. dazu pivots und es wäre perfekt(welche natürlich den selben parentsabhängigkeiten unterliegen wie andere entityobjekte auch)

Schranz0r

Oder du machst das ParentModel auf Scale 0.00000000001 ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

x-tra

#23
wenn das so klein ginge? lol    :good:   :zzz:

nein mal im ernst, gernot hat ja gesagt, wenn ich was brauche fürs ES, soll ich es sagen, was ich nun schon mehrfach getan hab, wie du weißt.

aber es wird halt meiner meinung nach zu oft in frage gestellt, und so ein objekt ist ja denk ich mal nicht soooo schwer.

man kann schon ein wenig die lust daran verlieren, wenn das bei jeder ES erweiterung so wird.

Nun, am liebsten würd ich das ES selber machen, wenn ich genug kenntnisse hätte.

@schranz0r: hast du dein eigenes ES noch, vieleicht kann ich ja was draus lernen.

Ich werd heut nacht eine befehlsreferenz für gernot anfangen, um so ziemlich alles was man so brauchen könnte aufzulisten.Werden dann sehen, was er davon hält, oder ermöglichen wird.



Schranz0r

Ne leider nicht mehr  =(

Aber jetzt mal ein Sau dummer einfall von mir:

Das Newton basiert ja auf einem "Entitysystem" wenn man da jetzt ein schickes Leichteres drum rum bauen würde, wärs doch auch spitze!
Und man hätte automatisch eine Physik dabei :)

Und Externe Drehpunkte gibts da auch ! (Siehe: NewtonConstraintCreateHinge : pivotPt[], pinDir[], child, parent )
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

x-tra

#25
tja eindeutig ein fall für gernot.
ich kapier das ja mit mg[12]  usw noch nichtmal, was die zahlen weiß ich, aber wie das mit den matrizen funktioniert eben nicht.

nunja, wir werden sehen, ich nehm erstmal ne andere sprache für mein spiel und setz das dann nach glb um wenn das system einigermaßen läuft.

BumbleBee

Quote from: Gernot Frisch
Bitte, bitte, bitte aufhören zu meckern und endlich mal was damit machen! Ich mach da gerne weiter, aber nicht, wenn jeder nur meckert statt endlich mal was damit zu machen.
Genau meine Meinung. :)

Quote from: Heiko
nunja, wir werden sehen, ich nehm erstmal ne andere sprache

Ich glaub du wolltest schreiben:

nunja, wir werden sehen, ich nehm erstmal Blitz3D :P ;)

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

x-tra

#27
Nein nehm ich nicht....... :nana:

Ich würd was dafür geben, wenn ich das Entity System selber proggen könnte, aber dafür reicht es nicht ganz bei mir.


ich mach eine befehlsreferenz als vorschlag für gernot, weil das mit dem erstmal probieren ist so eine sache, denn das tue ich ja, aber ein auto fährt auch nur schlecht auf 3 Rädern.

Kitty Hello

Mach was mit dem EntitySystem, und dann - wenn Du ein Problem hast - komm her.
Die Kamera pack ich per Parent-Referenz an den Spieler. Siehe Demo dazu. Das ist genau das, was Du brauchst.

OK, Ich kann diese doofen Pivots schon einbauen. Das ist nur ein X_MULTMATRIX mehr.
Die Matrix erstellt man genauso wie die vom Objekt, nur halt mit anderen Vorzeichen. Aber das sind massen an neuen Befehlen, die eigentlich keiner braucht.

x-tra

das prinzip von den matrizen hab ich nun schon fast verstanden, könntest du den teil

Code (glbasic) Select
FUNCTION EntityUpdateMatrix: e AS T3DEntity, only_glob
LOCAL sa,sb,sc, ca,cb,cc
LOCAL sacb, cacb
IF only_glob = FALSE
    ca       = COS(-e.rx);
    sa       = SIN(-e.rx);
    sb       = COS(e.ry);
    cb       = SIN(e.ry);
    cc       = COS(-e.rz);
    sc       = SIN(-e.rz);

sacb=sa*cb
cacb=ca*cb

    e.M[0]  =   sb * cc
    e.M[1]  =  -sb * sc
    e.M[2]  =  -cb

    e.M[4]  = -sacb * cc + ca * sc
    e.M[5]  =  sacb * sc + ca * cc
    e.M[6]  =  -sa * sb

    e.M[8]  =  cacb * cc + sa * sc
    e.M[9]  = -cacb * sc + sa * cc
    e.M[10] =   ca * sb

e.M[12]= e.x
e.M[13]= e.y
e.M[14]= e.z
    e.M[15]= 1
    ENDIF

IF e.parent=-1
e.Mg[] = e.M[]
ELSE
EntMultMatrix4x4(e.Mg[], g3DObj[e.parent].Mg[], e.M[])
ENDIF

// If you have childs, update their global matrix, too
FOREACH c IN e.childs[]
EntityUpdateMatrix(g3DObj[c], TRUE)
NEXT
ENDFUNCTION


wenn du mal zeit hast, genauer erklären, wäre echt nett, aber die befehle, die ich dir geschickt habe, gehen natürlich vor.
aber so lern ich das wenigstens vollständig.