GLBasic forum

Codesnippets => 3D-snippets => Topic started by: Kitty Hello on 2007-Oct-10

Title: 3D Entity System [DE]
Post by: Kitty Hello on 2007-Oct-10
Die aktuellste Version gibt's immer hier:
http://www.glbasic.com/beta/EntitySystem.zip (http://www.glbasic.com/beta/EntitySystem.zip)
Title: 3D Entity System
Post by: Antidote on 2007-Oct-11
Quote
Entität (Informatik)
Als Entität (synonym Informationsobjekt; englisch Entity) wird in der Informatik ein eindeutig zu bestimmendes Objekt bezeichnet, dem Informationen zugeordnet werden. Die Objekte können materiell (z. B. der Berg  Kilimandscharo) oder immateriell (z. B. die Abteilung RK12 der Firma Beispiel GmbH) sein.
Kann man im obigen post vielleicht kurz zwei Sätze Schreiben, wofür das gut ist???
Etwas kann ich mir denken, aber.... so schlau werde ich jetzt nicht drauß :(

Edit:
Ahja, habe jetzt, den anderen Thread gelesen.... Vielleicht trotzdem 1-2 Sätze, damit man nicht im Forum suchen muss?! Thx
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-11
Ja, ich kapier's immer noch nicht wo da jetzt der Vorteil liegt.
Title: 3D Entity System
Post by: trucidare on 2007-Oct-11
Der vorteil liegt wohl an der einfacheit ;)
So wie Simyo das einfachheitsgen implementiert (in Simkarten - son schwachsinn) wollen die das auch in glb. also füge bild mit objekt zusammen und zeige es unter 20 zeilen code.

geht das wirklich so einfach? ich will ein 3d spiel machen ^^
Title: 3D Entity System
Post by: Sebe on 2007-Oct-11
@Gernot: das hat mit dazu beigetragen, warum Blitz überhaupt erst so erfolgreich geworden ist. Vielleicht entspricht es einfach der Denkweise der meisten Menschen, ich weiss es auch nicht. Aber es ist für mich de facto einfacher und wie ich jetzt zu meiner Erleichterung feststellen darf steh ich gar nicht alleine damit da ^^
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-11
Mir ist aufgefallen mit der Newton Physik Engine hat man ein Entitysystem!

Ich glaub langsam steig ich da durch... zumindestens bei den Basics :D
Title: 3D Entity System
Post by: WPShadow on 2007-Oct-11
Worum handelt es sich hier? Eine vereinfachte version von "Gesamtwelt mit allen Objekten" Laden und darstellen? Inetwa richtig???
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-11
hmm nee

im groben gesagt befehle wie Rotate, Move usw auf ein Object beziehen z.B Rotate(Box,phiX,phiY,phiZ,Absolut oder Relativ)
Title: 3D Entity System
Post by: bigsofty on 2007-Oct-12
Nice! :D
Title: 3D Entity System
Post by: WPShadow on 2007-Oct-12
Klingt interessant! :D
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-12
japp Sounds good :D
Title: 3D Entity System
Post by: x-tra on 2007-Oct-12
EntitySystem Update please.smile.

Nun Gernot postet die letzten 24-48 stunden garnet viel, entweder er hat keine Zeit oder er hat keine Zeit, weil er vielleicht nen Überraschungsupdate macht.

Ich würd ihm glatt um den Hals fallen.
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-12
Ich würge gerade mit den Netzwerk-Befehlen.
Wenn ich nicht zurückkomme, rächt meinen Tod ;)
Title: 3D Entity System
Post by: Quentin on 2007-Oct-12
lol
 
versprochen! Wir werden das www mit unnützen Port-Scans lahmlegen ;)
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-15
Quote from: Quentin
lol
 
versprochen! Wir werden das www mit unnützen Port-Scans lahmlegen ;)
Genau und dann hacken wir uns alle noch gegenseitig, damit M$ garnix mehr machen kann...

Ferna werden wir noch einen fiesen super ultrabösen Virus in GLB schreiben, der alle Platten abrauchen lässt!

Der letzte muss seinen PC vergraben, und darf ihn erst in 100 Jahren wieder rausholen :D
Title: 3D Entity System
Post by: x-tra on 2007-Oct-15
Lol ein Dornröschen-PC, und wer küßt den wach?


Aber mal im Ernst, gibts in Richtung Entity-System was neues?
Title: 3D Entity System
Post by: x-tra on 2007-Oct-19
sorry wegen doublepost, aber:  

"                                                  ???????                                         "
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-19
Ähm.... nein? Kann's nicht jemand weitermachen, der das haben will? Ich helf' ja gerne.
Title: 3D Entity System
Post by: x-tra on 2007-Oct-19
Ich würd ja gerne, aber das geht einfach über meine momentanen Kenntnisse hinaus.

Kann man das eigentlich irgendwie als update integrieren, sodass es dann eben noch paar entity befehle extra gibt?
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-19
Wie meinst Du?
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-19
Er will, das du die Entity Befehle in die Syntax aufnimmst.
Aber ich denke:

Ganz oder garnicht!....

Also wohl eher nicht   ?!
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-19
kann man doch einfach als Datei dazuupacken - ist doch kein Unterschied...
Title: 3D Entity System
Post by: x-tra on 2007-Oct-19
ja so wie Schranz0r das schon sagte, so meinte ich das.
Sodass es in die Syntax integriert ist.

Hab schon ein paar "Fremdcodern" von GLB erzählt, und wollen es sich mal anschauen, und so ein entitiy system was schon von haus aus mit drin ist, wäre EIN wichtiges Argument für viele.

Ich weiß, wir stellen viele Ansprüche Gernot, aber ist sowas möglich, so ein paar entity befehle zu implementieren?

so auf die schnelle?

würden sichso einige, wenn nicht gar der großteil hier drüber freuen.
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-19
Ja aber... Wenn Du einfach diese Datei reinnimmst in's Projekt, dann hast Du das ja quasi schon. Wozu dann direkt in GLBasic einbauen?
Title: 3D Entity System
Post by: BumbleBee on 2007-Oct-19
Seh ich auch so wie du, Gernot . Klar wäre es einfacher wenns dafür schon fertige Befehle gibt, aber man kann's ja eben selber schreiben und übernimmts dann ins Projekt. Man darf halt nur nicht so bequem sein. ;)


Cheers
Title: 3D Entity System
Post by: Sebe on 2007-Oct-19
Ja, das ist ja auch der Leitspruch von GLBasic oder? Damit Programmieren endlich wieder unbequem wird -.-
Sry BumbleBee aber warum bist du dann so "bequem" und programmierst nicht gleich C oder Assembler?
Title: 3D Entity System
Post by: x-tra on 2007-Oct-19
genau sebe: "Klar wäre es einfacher wenns dafür schon fertige Befehle gibt,"

ansonsten steigen wir alle auf assembler um, was haltet ihr davon?

Gröööööhl..............

Okay ich bekomms auch ohne Implemention in die GLB Syntax hin, aber mei, es wär´ soooo scheeeee gwesn.
Title: 3D Entity System
Post by: BumbleBee on 2007-Oct-19
Quote from: Sebe
programmierst nicht gleich C oder Assembler?
Hab ich ja. War mir aber zu einfach drum hab ich mich ja für GLBasic entschieden.;) Ich mein damit ja nur das man halt auch noch paar Sachen selber machen kann. Und in dem Entity Fall braucht mans ja nicht mal mehr machen, weil Gernot ja schon den Code dazu geschrieben hat. Also warum dann noch nen Befehl. Außerdem werden es immer mehr Befehle und das wollte Gernot, der Übersicht wegen, auch  vermeiden. Hat er selber mal gesagt. Wenn ich nämlich gar nix mehr schreiben will hol ich mir so'n Game Maker Teil wo ich mir alles zusammenklick.:D


Cheers
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-19
Ganz einfach Sebe, du bist doch der super C-Programmierer ;)
Gut ich sag mal so... ich hätte auch ein Entitysystem in GLB hin bekommen, aber nicht so schnell und so umfangreich wie Gernot!

Ich finde es OK das man nur eine gbas einbinden muss...

Was mich wieder auf was anderes bringt Gernot!
Ein Menüpunkt Add_file oder Add_gbas, der direkt in den Commonordner geht, um schneller und komfortabler die Datei dem Projekt bei zu fügen ?!

Was hällst du davon?
Title: 3D Entity System
Post by: D2O on 2007-Oct-19
Quote
Ein Menüpunkt Add_file oder Add_gbas, der direkt in den Commonordner geht, um schneller und komfortabler die Datei dem Projekt bei zu fügen ?!
Jepp, das wär nicht schlecht, ist ne gute Idee.
Title: 3D Entity System
Post by: Sebe on 2007-Oct-20
Ich bin nicht der super C Programmierer ^.- Ich kann C, aber um wirklich gut darin zu sein müsste ich mich schon voll reinhängen. Das wäre viel zu langweilig.
Ich muss auch sagen: ich hätte das Entitysystem nicht hinbekommen.
Was ich verhindern will ist Folgendes: man muss ins Forum gehen, den Entitycode kopieren, eine Datei anlegen, ins aktuelle Projekt übernehmen und sobald das System nach einem Update nicht mehr funktioniert sitzt man doof da.
Ich war von Anfang an nicht da um in GLBasic zu programmieren. Sondern um meine Erfahrung mit anderen (kommerziell erfolgreicheren) Sprachen einfliessen zu lassen damit GLBasic eine grössere Gruppe erreicht und ich DANN damit programmiere. Ich kann Vorschläge machen und hoffen, dass Gernot sie einbaut. Letzten Endes muss Gernot entscheiden, wohin sich GLBasic entwickelt. Ich stelle auch keine Forderungen, aber wenn ich von einem Vorschlag wirklich überzeugt bin, dann fang ich auch mal an zu nerven. Vor allem, weil keiner meiner Vorschläge so gut angekommen ist wie das Entity System. Eure Sympathien brauche ich nicht, aber ich will nicht dass ihr von mir denkt "was für ein Arsch" =) Ich werde damit so lange weitermachen, wie es mir erlaubt wird. Ein Wort von Gernot reicht und ich höre auf, für immer. Ich halte mich ganz raus, schaue vllt. ab und an mal lesenderweise rein und das wars.
Title: 3D Entity System
Post by: x-tra on 2007-Oct-20
Ich für meinen Teil hätte auch gern eine implementation des entity system gehabt, gerade auch weil es komfortabler ist, und um- und einsteiger das ganze etwas erleichert hätte.

Man ist halt verwöhnt.
Schön wärs gewesen, wenn nich ist es natürlich Gernots Entscheidung, wir sind ja nur seine "Jünger" grins.
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-22
Ja, macht halt das EntitySystem fertig, dann pack' ich's in den COMMON Ordner rein.
Das Prjekt hinzufügen gibt's ja schon: rechte Mautaste im "Datei-Tab" (rechts), dann "Datei hinzufügen..."
Title: 3D Entity System
Post by: galaga on 2007-Oct-22
Hallo erstmal an alle hier.
Beschäftige mich jetzt grad ein wenig mit 3D und versteh das entity system zumindest im grunde.

Welche entity befehle gibt es denn, denn das Beispiel da unten ist sicher nur ein Beispiel.

Kann jemand ne Befehlsreferenz und ein kleines Tutorial dazu schreiben.

Ihr würdet mir einem GLBasic Anfänger eine große Hilfe sein.
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-22
Willkommen Hier im Forum galage :)

Das hat Gernot geschrieben (Entity-System) um zu zeigen das es geht!
Nicht aber um damit jetzt Spiele zu machen....(imho)
Es ist ja noch nicht fertig, und solange es keiner fertig macht, würde ich dir abraten es zu benutzen!
Denke wenn Gernot mal wieder langeweile hat(was wohl ziemlich selten der fall ist ;) ) werden der ein oder andere Befehl dazu kommen!  

Ich muss zugeben, so richtig hab ichs auch noch nicht getestet :D
Wird aber die tage noch gemacht...

Dir weiterhin viel spass beim Programmieren, und wenn du hilfe brauchst, weisst ja jetzt wo du uns findest :D

grüße Schranz0r
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-25
Added some comments. OK, I'm willing to make this thing something, since noone wants to help :/.
What do you want next? A camera as an entity?
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-25
ach ne Cam als Entity...Jaoh wenn du hilfe brauchst(was ich nicht glaube) oder du willst das es einer macht/ich (was ich eher glaube) dann Bell 5x laut und ich machs :D
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-25
WAU-WAU-WAU-WAU-wau *krächtz*
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-25
^^ und ich dachte du schreibst das So:

Code: GLBasic [Select]
FOR i = 0 TO 4
    PRINT "Wau",i*40,0
NEXT
Nagut dann schau ma mal ;)
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-25
Code: GLBasic [Select]
FOREACH Atemzug IN Leben
    Wau(Atemzug)
WEND
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-25
Quote from: GernotFrisch
Code: GLBasic [Select]
FOREACH Atemzug IN Leben
    Wau(Atemzug)
WEND
Naja ^^ meinst wohl NEXT ;)
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-26
Doh!
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-26
Owned :D
Title: 3D Entity System
Post by: x-tra on 2007-Oct-26
News?
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-26
Ach ist das jetzt ein Spammthread geworden :D

Na ich bin noch dran....
Ne Idee mit den Koordinaten, die selber global in die Function bringen, oder die Kamera mit 4 selbst zu wählenden tasten steuern... ?
Title: 3D Entity System
Post by: x-tra on 2007-Oct-26
Mmmmm das mit den Tasten ist ja nicht schlecht, aber wenn man diese mit Maus bewegen will, oder automatisch!
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-26
gut mit maus steuern wär halt dann MOUSEAXIS(0) bzw. (1) ;)
Hab da noch kleine Probleme ^^
Aber ich bekomm das schon hin ;)
Title: 3D Entity System
Post by: x-tra on 2007-Oct-27
Mann kan doch dort parameter angeben am einfachsten.
Ob die nun für Tasten oder Werte stehen, bliebe jedem selbst überlassen.
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-27
hmm...wenn du einen Taste z.B nimmst dann wird ja nur geprüft ob TRUE, wenn ja, adde den Speed zur Position.....
Nimmst du jetzt einen Wert dazu, hast du das Problem das der immer größer/kleiner wird sprich dein Model/Cam/What ever sehr komisch drauf reagiert ...
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-27
Mal langsam - vielleicht versuchen wir einfach das Blitz-dingens nachzubauen? OK?
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-27
öhmm Ok, wird aber wohl nicht ganz so leicht :D
Title: 3D Entity System
Post by: x-tra on 2007-Oct-27
oder wie bei Cobra3D:   MoveEntity(object, x, y, z)     RotateEntity(obj, x, y, z, Bolean)  Bolean= global oder relativ
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-27
also ich habs jetzt so :

EntitySystem + Cam(KLICK MICH) (http://www.StyleAttax.de/EntitySystem.rar)
Title: 3D Entity System
Post by: tft on 2007-Oct-27
Hi ....

mir ist diese Diskusion nicht ganz klar. Aber fileicht bin ich wie einige hir ebenfals zu sehr verwöhnt. Aber klar ist doch das GLBasic mit einfachheit und nicht mit Simplizität wirbt. Für eine Simple Befehls Reference ist der Preis einfach zu hoch. Da muss schon einiges an Befehls reference dazu kommen. Aber die ansätze sind gut. Also immer schön nerven wenn ihr eine gute Idee habt. Dann entwickelt sich GLBasic auch mal zu einer Sprache die auch anfänger als einfach bezeichen. Meiner Tochter habe ich GLBasic gezeigt. Sie ist nicht besonders Helle, Aber im vergleich zu B3D hat sie in GLBasic überhauptnichts auf die reihe bekommen.

Coole Grüsse TFT
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-27
aha TFT :D


Also Update:

www.styleattax.de/EntitySystem1.2.rar

Kleine Demo mit dem neuen Entity System!!!

Updates sind:

Code: GLBasic [Select]
ScaleEntity(handle,sx,sy,sz)
SetEntityAlpha(handle, wert) // z.B wert -0.8
SetEntityTexture(handle,textur) // damit kann man z.B 2 Cubes erstellen aus einem Model und verschiede Texturen verpassen!
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-27
so leider Doppelpost :D

Download: www.styleattax.de/EntitySystem1.3.rar

Neu dabei:

CreateCube(size,color)
CreateSphere(radius,nodes,color)

Anwendung so:

Code: GLBasic [Select]
LOCAL Cube AS T3DEntity
LOCAL Textur AS T3DTex
LOCAL CubeModel AS T3DModel

Textur = LoadTexur("meine.png")
CubeModel = CreateCube(1,RGB(0xff, 0xff, 0xff))

Cube = CreateEntity(Textur,CubeModel)

...
// sonst alles wie gehabt( PlaceEntity usw)
...
Hier die EntitySystem.gbas:

Code: GLBasic [Select]
// A type for a texture
// just holds the lodaed index for LOADSPRITE
TYPE T3DTex
    id_tex
ENDTYPE


// a type for a model (a .ddd file)
// for now it only holds the index (X_LOADOBJ)
TYPE T3DModel
    id_ddd
ENDTYPE


// an entity - that's a .ddd, a texture
// with position, rotation and scaling
TYPE T3DEntity
    tex AS T3DTex     // holds a texture
    ddd AS T3DModel   // holds a model

    active            // is active (or will not be crawn)
    anim_from         // animation from frame
    anim_to           // animation to frame
    anim_speed        // animation speed (interpolation gets done internally, then)
    x;y;z             // global position
    rx;ry;rz          // rotation angles
    cam               // is it a Cam?
    spot_x;spot_y;spot_z // the coordinates for the camera looking for
    sx=1;sy=1;sz=1    // scale factors
    alpha             // alpha transparency value

    M[16]             // matrix - internal use only
ENDTYPE

// GLOBAL objects
GLOBAL g3DObj[] AS T3DEntity    // entities


// Get a LOADSPRITE index, that has no loaded image, yet
FUNCTION GetFreeSpriteID:
LOCAL sx, sy, i
    GETSPRITESIZE i, sx, sy
    WHILE sx>0 OR sy>0
        INC i, 1
        GETSPRITESIZE i, sx, sy
    WEND
    RETURN i
ENDFUNCTION

// Get a X_LOADOBJ index, that has no model, yet
FUNCTION GetFreeModelID:
LOCAL i, nc
    nc = X_NUMFACES(i)
    WHILE nc>0
        INC i, 1
        nc = X_NUMFACES(i)
    WEND
    RETURN i
ENDFUNCTION

// Load a texture as a T3DTex object
FUNCTION LoadTexture AS T3DTex: filename$
LOCAL t AS T3DTex
    t.id_tex = GetFreeSpriteID()
    LOADSPRITE filename$, t.id_tex
    RETURN t
ENDFUNCTION


// Make no texture as an T3DTex object
FUNCTION MakeNullTexture AS T3DTex:
LOCAL t AS T3DTex
    t.id_tex = -1
    RETURN t
ENDFUNCTION

// Load a .ddd file as a T3DModel
FUNCTION LoadModel AS T3DModel: filename$
LOCAL t AS T3DModel
    t.id_ddd = GetFreeModelID()
    X_LOADOBJ filename$, t.id_ddd
    RETURN t
ENDFUNCTION

FUNCTION CreateSphere AS T3DModel: r, n, col
LOCAL i,j, theta1, theta2, theta3, pi
LOCAL t AS T3DModel
        t.id_ddd = GetFreeModelID()

        pi = ACOS(0)*2
        IF r < 0 THEN r = -r
        IF n < 4 THEN n = 4

        X_AUTONORMALS 2 // smooth edges
        X_OBJSTART t.id_ddd
        FOR j=0 TO INTEGER(n/2) -1
                theta1 = j * 2*pi / n - pi/2;
                theta2 = (j + 1) * 2*pi / n - pi/2;
                FOR i=0 TO n
                        theta3 = i * 2*pi / n;
                        X_OBJADDVERTEX  r*COS(theta2) * COS(theta3), r*SIN(theta2), _
                                                        r*COS(theta2) * SIN(theta3), i/n, 2*(j+1)/n, col
                        X_OBJADDVERTEX  r*COS(theta1) * COS(theta3), r*SIN(theta1), _
                                                        r*COS(theta1) * SIN(theta3), i/n, 2*j/n, col
                NEXT
                X_OBJNEWGROUP
        NEXT
        X_OBJEND
        RETURN t
ENDFUNCTION

FUNCTION CreateCube AS T3DModel: sz, col
LOCAL t AS T3DModel
        t.id_ddd = GetFreeModelID()
        X_AUTONORMALS 1 // For a cube, hard edges
        sz=sz/2
        X_OBJSTART t.id_ddd
                // Front Face
                X_OBJADDVERTEX  sz, -sz,  sz, 1, 0, col
                X_OBJADDVERTEX -sz, -sz,  sz, 0, 0, col
                X_OBJADDVERTEX  sz,  sz,  sz, 1, 1, col
                X_OBJADDVERTEX -sz,  sz,  sz, 0, 1, col
                X_OBJNEWGROUP
                // Back Face
                X_OBJADDVERTEX -sz,  sz, -sz, 1, 1, col
                X_OBJADDVERTEX -sz, -sz, -sz, 1, 0, col
                X_OBJADDVERTEX  sz,  sz, -sz, 0, 1, col
                X_OBJADDVERTEX  sz, -sz, -sz, 0, 0, col
                X_OBJNEWGROUP
                // Top Face
                X_OBJADDVERTEX -sz,  sz,  sz, 0, 0, col
                X_OBJADDVERTEX -sz,  sz, -sz, 0, 1, col
                X_OBJADDVERTEX  sz,  sz,  sz, 1, 0, col
                X_OBJADDVERTEX  sz,  sz, -sz, 1, 1, col
                X_OBJNEWGROUP
                // Bottom Face
                X_OBJADDVERTEX  sz, -sz, -sz, 0, 1, col
                X_OBJADDVERTEX -sz, -sz, -sz, 1, 1, col
                X_OBJADDVERTEX  sz, -sz,  sz, 0, 0, col
                X_OBJADDVERTEX -sz, -sz,  sz, 1, 0, col
                X_OBJNEWGROUP
                // Right face
                X_OBJADDVERTEX  sz,  sz, -sz, 1, 1, col
                X_OBJADDVERTEX  sz, -sz, -sz, 1, 0, col
                X_OBJADDVERTEX  sz,  sz,  sz, 0, 1, col
                X_OBJADDVERTEX  sz, -sz,  sz, 0, 0, col
                X_OBJNEWGROUP
                // Left Face
                X_OBJADDVERTEX -sz, -sz,  sz, 1, 0, col
                X_OBJADDVERTEX -sz, -sz, -sz, 0, 0, col
                X_OBJADDVERTEX -sz,  sz,  sz, 1, 1, col
                X_OBJADDVERTEX -sz,  sz, -sz, 0, 1, col
                X_OBJNEWGROUP
        X_OBJEND
        RETURN t
ENDFUNCTION


// Release Memory for a T3DTex
FUNCTION FreeTexture: ext AS T3DTex
    LOADSPRITE "", ext.id_tex
    // try to find the texture and set it to '-1'
    FOREACH t IN g3DObj[]
        IF t.tex.id_tex = ext.id_tex
            t.tex.id_tex = -1
        ENDIF
    NEXT
ENDFUNCTION

// Release Memory for a T3DModel
FUNCTION FreeModel: ext AS T3DModel
    // find it in the list and just drop it
    FOREACH t IN g3DObj[]
        IF t.ddd.id_ddd = ext.id_ddd
            DELETE t
        ENDIF
    NEXT
    // make sure the memory is freed
    X_OBJSTART ext.id_ddd
    X_OBJEND
ENDFUNCTION

// Release a entity
FUNCTION FreeEntity: handle
    g3DObj[handle].active=FALSE
ENDFUNCTION



FUNCTION CreateEntity AS T3DEntity: tex AS T3DTex, m AS T3DModel
LOCAL t AS T3DEntity
        t.tex=tex
    t.ddd=m
    RETURN t
ENDFUNCTION

FUNCTION CreateCamera AS T3DEntity:
LOCAL t AS T3DEntity
        RETURN t
ENDFUNCTION

// Adds one to the visual list
// returns "handle" to that object
FUNCTION AddEntity: e AS T3DEntity
    e.active = TRUE
    UpdateMatrix(e)
LOCAL i
    FOREACH t IN g3DObj[]
        IF t.active=FALSE
            t = e
            RETURN i
        ENDIF
        INC i, 1
    NEXT

    DIMPUSH g3DObj[], e
    RETURN LEN(g3DObj[])-1
ENDFUNCTION

// remove an entity
FUNCTION RemoveEntity: handle
    DIMDEL g3DObj[], handle
ENDFUNCTION

FUNCTION ScaleEntity: handle, sx, sy, sz
        g3DObj[handle].sx = sx
        g3DObj[handle].sy = sy
        g3DObj[handle].sz = sz
ENDFUNCTION

FUNCTION SetEntityAlpha: handle, value
        g3DObj[handle].alpha = value
ENDFUNCTION

FUNCTION SetEntityTexture: handle, tex_id AS T3DTex
        g3DObj[handle].tex = tex_id
ENDFUNCTION


// Set global X,Y,Z position of an entity
FUNCTION PlaceEntity: handle, x,y,z
    g3DObj[handle].x=x
    g3DObj[handle].y=y
    g3DObj[handle].z=z
    // update the model matrix for showing, later
    UpdateMatrix(g3DObj[handle])
ENDFUNCTION

FUNCTION PlaceCam: handle, x,y,z, look_x, look_y, look_z
        g3DObj[handle].cam=TRUE
    g3DObj[handle].x=x
    g3DObj[handle].y=y
    g3DObj[handle].z=z
    g3DObj[handle].rx=-90
        g3DObj[handle].spot_x = look_x
        g3DObj[handle].spot_y = look_y
        g3DObj[handle].spot_z = look_z
        UpdateMatrix(g3DObj[handle])
ENDFUNCTION


// Move relative by dx,dy,dz
FUNCTION MoveEntity: handle, dx,dy,dz
    INC g3DObj[handle].x,dx
    INC g3DObj[handle].y,dy
    INC g3DObj[handle].z,dz
    UpdateMatrix(g3DObj[handle])
ENDFUNCTION

// Set global rotation angles
FUNCTION SetEntityRotation: handle, rx,ry,rz
    g3DObj[handle].rx=rx
    g3DObj[handle].ry=ry
    g3DObj[handle].rz=rz    
   
    g3DObj[handle].spot_x = rx
    g3DObj[handle].spot_y = ry
    g3DObj[handle].spot_z = rx

    UpdateMatrix(g3DObj[handle])
ENDFUNCTION

// rotate relative to current rotations
FUNCTION RotateEntity: handle, drx,dry,drz
    INC g3DObj[handle].rx,drx
    INC g3DObj[handle].ry,dry
    INC g3DObj[handle].rz,drz    
    UpdateMatrix(g3DObj[handle])
    IF g3DObj[handle].ry > 90 THEN g3DObj[handle].ry = 90
        IF g3DObj[handle].ry < -90 THEN g3DObj[handle].ry = -90
    g3DObj[handle].spot_x = g3DObj[handle].x+COS(g3DObj[handle].rx)
    g3DObj[handle].spot_y = g3DObj[handle].y-SIN(g3DObj[handle].ry)
    g3DObj[handle].spot_z = g3DObj[handle].z+SIN(g3DObj[handle].rx)
       
ENDFUNCTION

// Create Displacement and rotation matrix
// for faster drawing and getting rid of gimbal locking
// ... if you don't understand this, just believe me
// it works, OK?
// It just creates a matrix which you can use with
// X_MULTMATRIX instead of X_MOVEMENT, X_ROTATION, X_SCALING, ...
FUNCTION UpdateMatrix: e AS T3DEntity
LOCAL sa,sb,sc, ca,cb,cc
LOCAL sacb, cacb
    DIM M[16]
    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;
ENDFUNCTION

// Set the amination start and end value
// -> the model will then anmiate in between these values
//    forever
FUNCTION SetAnimation: handle, key_from, key_to, speed
    g3DObj[handle].anim_from=key_from
    g3DObj[handle].anim_to=key_to
    g3DObj[handle].anim_speed=speed
ENDFUNCTION

// This draws everything
FUNCTION DrawWorld:

    FOR transparent = 0 TO 1

        // look at each entity
        FOREACH t IN g3DObj[]
            // ignore disabled entities
            IF t.active=FALSE THEN CONTINUE
           
            // if Cam set Cam
                        IF t.cam = TRUE

                                X_CAMERA t.x, t.y, t.z, t.spot_x, t.spot_y, t.spot_z
                        ENDIF
            // first draw all opaque
            // then (2nd pass) draw all with alpha
            IF (t.alpha AND transparent=0) OR (t.alpha=0 AND transparent) THEN CONTINUE
                       
            // some transparency
            ALPHAMODE t.alpha

            // apply texture
            X_SETTEXTURE t.tex.id_tex, -1

            // do the matrix magic
            X_PUSHMATRIX
            X_SCALING t.sx,t.sy,t.sz
            X_MULTMATRIX t.M[]


            // Get the current animation
            LOCAL pos
            pos = MOD(GETTIMERALL() * t.anim_speed, 1000)/1000
            X_DRAWANIM t.ddd.id_ddd, t.anim_from, t.anim_to, pos, TRUE
            X_POPMATRIX
        NEXT
    NEXT
ENDFUNCTION

// ------------------------------------------ //
//! Return the x position of the entity
// ------------------------------------------ //
FUNCTION GetEntityX: entity
    RETURN g3DObj[entity].x
ENDFUNCTION

// ------------------------------------------ //
//! Return the y position of the entity
// ------------------------------------------ //
FUNCTION GetEntityY: entity
    RETURN g3DObj[entity].y
ENDFUNCTION

// ------------------------------------------ //
//! Return the z position of the entity
// ------------------------------------------ //
FUNCTION GetEntityZ: entity
    RETURN g3DObj[entity].z
ENDFUNCTION
Title: 3D Entity System
Post by: BumbleBee on 2007-Oct-27
@tft
Also im 2D Bereich ist ja wohl GLBasic nicht schwerer als Blitz. Der 3D Bereich mag am Anfang etwas verwirrend sein, aber später gehts doch dann (vielleicht). ;) Wer z.B. C++ kann der sagt auch das ist einfach. Also was ist jetzt einfach oder schwer?  Wenn man's kann ist es ja nicht schwer. Klar ist es eine Umstellung wenn man von 'ner anderen Sprache kommt aber man kann sich doch irgendwann daran gewöhnen. Im wahren Leben muß man sich doch auch öfters mal auf neue Sachen umstellen. Da hilft auch kein Jammern.:D Und Gernot hat's halt nun mal so gemacht. Und das es nicht für jeden Mist einen eigenen Befehl gibt find ich gut. Sonst herrscht bald das Chaos.

Sry, gehört ja eigentlich gar nicht hier rein.:D

Cheers
Title: 3D Entity System
Post by: tft on 2007-Oct-30
Hi ...

Ich wollte keine beurteilung abgeben. Sondern lediglich auf die Situation aufmerksam machen. Aber vileicht bin ich mit meinen 42 Jahren ja auch schon zu weit weg von Jungen Denkmustern. Auf jedenfall ist irgendwas an GLBasic Kompliziert. Sodas  die jenigen.... meist Schüler aus der Schule meiner Tochter (Ich erteile Programier Kurse) Ganz klar einfacher mit Blitz zurande kommen als mit GLBasic. Und alle sagen einhellig. Das sich GLBasic nicht gut Intuitiv erfassen läst. Einer vom Gymi meinte das liegt am Editor. Ich selber kann dazu nichts weiter sagen. Ich komme damit klar.

Gruss TFT
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-30
Na der Typ hat mal keine ahnung vom Gymi!
Die wirklich grausamste IDE(Editor) die ich kenne ist die von BB !!!!

In GLB hat man halt mehr möglichkeiten als in BB, da ist das Entitysystem schon fix, hier nicht, und man kann es noch ändern nach wunsch!
In BB ein neues schreiben wär auch "fast" unmöglich, da die Types Laarmarschig sind wie sau!

Kennt man sich ein wenig mit GLB und Functionen/Types aus, dann ist in GLB ALLES möglich!!! Selbst DX wenns sein muss!
Und wenns mal wirklich keine Lösung gibt, in der Normalen Syntax, dann ballert man Inline rein (c++)!
Title: 3D Entity System
Post by: x-tra on 2007-Oct-30
Ich muss jetzt auch mal meinen Senf dazu abgeben.

Bin ja selbst total begeisterter GLB Nutzer, aber es gibt halt auch nen Wermutstropfen.
Und sollts auch anders von mir kommen, das implementierte Entity System.

Ich probier grad selber mit Cobra3D rum und ohne GLB schlecht reden zu wollen, würde ich es (starres Entity System hin oder her) momentan sogar GLB vorziehen.

Ich würde aber lieber GLB gerade wegen seiner Multiplattformfähigkeit nutzen wollen.

Und die Intuitive Bedienbarkeit ist, nicht unbedingt Gui abhängig.

Also im Grunde, um GLB tatsächlich als die einfache Sprache darzustellen die es sein sollte, wäre doch ein (zusätzliches) Entitysystem dringend notwendig.

Und um den ganzen ein I-Tüpfelchen aufzusetzen, in der syntax drin, nicht erst irgendwie einbinden.

Denn objektiv betrachten machen all diese Kleinigkeiten GLB leider nicht so easy für den Einstieg.

In Corba hab ich für die paar Tage basteln mehr hinbekommen bzw. gerade für Einsteiger viel leichter zu verstehen.

Also und ich denke ich spreche so einigen aus dem Herzen, was ist das Problem solche ein System zu integrieren als zusätzliches Feature sozusagen.

Sei es Cobra3D oder auch Blitz, beide werben damit und warum sollte es nicht auch hier als zusätzliches Feature Verkaufsfördernd wirken und zum Wachsen der Community beitragen.

So, das lag mir jetzt einfach mal auf dem Herzen, weil eine Einbindung von so einem system von Hand eben nicht das gleich ist, als wenn all diese Befehle schon von Haus aus dabei sind.

Für uns vielleicht nicht, aber für Neulinge macht das einen Unterschied, aus deren Sicht gesehen.

Ich würde an Gernots Stelle die kompletten Entity Befehel aus Blitz, oder Cobra3D komplett so übernehmen, oder zumindest ähnliche Bezeichnung, Syntax, jedoch gleiche Wirkung.

Es führt wesentlich schneller zum Erfolg, und genau das wollen wir doch alle, oder?


So, jetzt könnt ihr mich steinigen und sagen, dass das von Schranz0r in Entwicklung stehende System ausreicht, und eingebunden werden kann, aber das ist dann kein Feature sondern eben eine Behelfslösung.

Ich habe ja schon dannach gefragt, und das wird auch mein letztes Statement dazu sein, da es wohl keine feste Einbindung in die systax geben wird.
Title: 3D Entity System
Post by: trucidare on 2007-Oct-30
Cobra ist von der syntax her eine DIV / Fenix Adaption. also nichts neues und tolles.
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-30
OK, jetzt mein Senf zum Entitysystem. Ich hab' damals keine Ahnung von 3D gehabt. Dann hab' ich mir überlegt, wie mach ich das in 2D, und hab' einfach 'Z' dazugenommen.
Dann waren die Befehle einfach zu lang. Also, hab ich Position, Drehung, Skalierung vorne als eigene Befehle vorweg genommen.
Statt:
Code: GLBasic [Select]
ROTOZOOMSPRITE id, x,y, fac, phi
Macht man:
Code: GLBasic [Select]
X_SCALING sx,sy,sz
X_MOVEMENT x,y,z
X_ROTATION phi, rx,ry,rz
...
X_SETTEXTURE id, -1
X_DRAWOBJ id, 0
Jetzt erkenne ich, dass das vielen nicht so passt. Es bleibt aber so drin. Dafür mach ich euch ein Entitysystem das eine 1:1 kopie von Blitz3D wird. Dannach verbesser' ich's wo ich mein.
Wär' doch gelacht.
Title: 3D Entity System
Post by: x-tra on 2007-Oct-30
Toll super bist ein Schatz, ich meinte ja auch ein zusätzliches E.-System.

Vielen Vielen Dank

Und wenn du dann dabei bist, bei den ganzen move rotate parent usw. geschichten überall einen optionalen parameter für globale oder relative entitybefehlausführung mit einplanen, wär nett.

So, jetzt hock ich in den startlöchern unf freu mich schon sehr.
Title: 3D Entity System
Post by: Sebe on 2007-Oct-31
Go Gernot Go!
Title: 3D Entity System
Post by: D2O on 2007-Oct-31
Armer Gernot, Du musst Dir wirklichlich den Ar**** aufreisen für unsere/Deine Community.
Aber auch schön das unsere Wünsche nicht ins leere laufen.

Solltest Du mal richtung Lindau/Bregenz unterwegs sein, dann Melde Dich, ich geb ne Runde aus :)
Title: 3D Entity System
Post by: Schranz0r on 2007-Oct-31
Hab ich das jetzt richtig verstanden?
Fest eingebautes Entitysystem ?!?!
Ich glaube damit erfüllst du hier einigen einen Traum!

Wenn du hilfe brauchst melde dich, ODER 5x Bellen ;)

Wie wärs den mal mit einer Art Stammtisch Treffen?

D²0 , BumbleBee und meine wenigkeit wohnen ja nur nen Katzensprung von dir weg ;)
Title: 3D Entity System
Post by: D2O on 2007-Oct-31
Jepp, Ihr seit nicht weit weg von mir.
Hätt mich auch schon lange mal gemeldet, was ein Treffen angeht.
Nur hab ich relative wenig zeit irgendwo hin zu gurken, musste erst vor kurzem
ein Treffen mit tft absagen :(
Zur zeit habe ich fast jedes wocheende durch gearbeitet und ab November geht bei mir der umzug los :)

Aber generel gesehen bin ich einen Treffen immer zugeneigt, bzw.
meine Tür steht für sowas immer offen.
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-31
So Feunde :D
http://www.glbasic.com/beta/entity.rar
Mit rechter MT -> Werkzeuge/Hilfe erstellen habt Ihr eine Hilfe.
Das Ding kann jetzt modelle, kamera(s), Lichter und parent-relations. Achtung:
Wenn A parent von B, und B parent von C, und C wieder parent von A ist, dann hamma hier eine Rekursion, die sich in einem schwarzen Bildschirm mit einem brüllenden Fön wiederspiegeln wird... ;)

So, was fehlt? Kollisionen, oder?
Mag bitte, bitte einer helfen!?

Zur Info: Die Objekte sind alle in einem Feld: g3DObj[]. Wenn man einen "handle" hat, bekommt man das TYPE so:
Code: GLBasic [Select]
LOCAL t AS T3DEntity
t = g3DObj[handle]
t.x = 100
Wichtig für euch: Jedes Objekt hat 2 Matritzen (Transformations-Matrix). M[], das ist die lokale, Mg[], das ist die globale - also falls man einen Parent hat.
Die Matrix ist ganz einfach 4 Spaltenvektoren aneinander, die die X-y-z Achse und die Verschiebung des Objekts darstellen.
Code: GLBasic [Select]
0 4  8 12
1 5  9 13
2 6 10 14
3 7 11 15
Also, ganz kurz, die X-Achse von einem Objekt ist:
t.Mg[0], t.Mg[1], t.Mg[2]
Y-Achse:
t.Mg[4], t.Mg[5], t.Mg[6] // die 2. Spalte

Die Postition (x,y,z) ist
t.Mg[12], t.Mg[13], t.Mg[14]

Damit sollte man Kollisionen machen können, oder? Hmm.. Woher den Kugelradius...
OK, ich mach's wieder mal alleine *heul*

Jedenfalls - bitte anbei testen (läuft komplett so weit ich sehe) und Feedback geben.
Title: 3D Entity System
Post by: x-tra on 2007-Oct-31
Cool, auf jeden, du hast sogar meinen Quellcode von Cobra3D übernommen, den kann ich ja noch bisschen verbessern.

Ist mit dem Start der .exe das Entity System gleich mit drin jetzt?

Wenn ich verbesserungsvorschläge haben sollte, werd ichs hier posten.

Ich werd erstmal das Beispiel von dir wegen der steuerung etwas ausbessern, okay.


[edit]  moveentity   bewegt das entity entlang der globalen koordinaten, sollte aber auch möglich sein dies relativ zu den eigenen koordinaten und abhängig von eigener Rotation sein, also wenn ich das schiff drehe, und dann nach vorn bewegen will, sollte auch vorn immer vorn sein.

P.S. Ich dachte erst vor und zurück seien vertauscht, aber das mit dem move haut nich hin, solltest du auf relativ  und global ändern.  aber das hat sich mal vor und zurück bewegt kam immer auf die vorhergehende richtung an.

Grübel grübel
Ich versuch dann bisschen auszubessern, und kann ja das beispiel posten, oder ich warte bis du haben fertig und mach dann gleich ein komplettes Bsp.

Würd dir ja gern helfen, aber so systemintern kenn ich mich in GLB noch nicht aus.
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-31
Kapiert. MoveEntity also in lokaler richtung. Check!

Nein, das EntitySystem ist eine .gbas Datei, die man derzeit einbinden müsste. Ist auch kein Stress, oder?
Evtl. Bau ich's später doch fest ein - muss man sehen.

[edit]
Neuer Upload - jetzt ist MoveEntity relativ to lokaler Achse. PositionEntity ist global, absolut.
Title: 3D Entity System
Post by: tft on 2007-Oct-31
Hi ......

:-)
Title: 3D Entity System
Post by: x-tra on 2007-Oct-31
super danke gernot, gleich mal testen

Funktioniert tadellos, okay die relativen drei x,y,z pfeile drehen sich nicht mit, aber das ist ja nur optisch.

Wäre toll, wenn das mal als update kommt, sodass man das nicht mit einbinden muss.

Eine Frage noch, bei C3D gibt es den Parameter "usedelta" welches wie diese Timing codeschnippsel hier irgendwo funktioniert. Also das Spiel läuft auf jedem PC gleich schnell, bzw. die bewegung, kannst du wenn du irgendwann mal Zeit hast, sowas auch machen?



Zitat aus der C3D Help: If you supply the "usedelta" parameter as True, then the movement distance will be affected by the in-built delta timer. This helps your game to play at the same speed on any computer.    ---  hängt z.B. an entitybefehlen mit dran, z.B. moveentity, x, y, z, True      bsp.
Title: 3D Entity System
Post by: Kitty Hello on 2007-Oct-31
Ich kapier' nicht, wie man die Kollisionen machen soll.
Hat schonmal jemand mit Blitz bzw. einer anderen Entity-Sprache gearbeitet und kann mir helfen?
Soll man jedem Entity einen "Typ" (Zahl) zuweisen lassen, und dann fragen, ob so ein Ding kollidiert hat?
Soll man eine Liste mit allen kollisionen machen? Oder alle mit einem bestimmten Typ?
Title: 3D Entity System
Post by: x-tra on 2007-Oct-31
CollisionInclude   definiert verschiedene Objekte(entities) als eine Zahl, oder auch Gruppen wären denkbar, also z.B. eine Gruppe Gegner/Welt usw.    mit der darauf folgenden Kollisionsart und Reaktion.  Wäre sozusagen wenn man mal alle Entities definiert hat, sozusagen nur noch jeweils ein Befehl notwendig welcher Art und Reaktion regelt.




http://blitzbase.de/menu/3h.htm    oder http://blitzbase.de/befehle3d/collisionentity.htm

vielleicht hilft das ja.


es gibt ja auf jeden Fall Kugel, und Box Kollisionen.

In dem Fall wird sozusagen wie ein parent um das objekt gestellt, und dann werden eben entweder einzeln die möglichen Kollisionen durchgeprüft, oder eben ob z.B. Objekt-Boden   oder Objekt Welt, also gruppenkollisionen.

Denkbar wären auch die daraufhin folgende Kollisionsart.

Also wenn z.B.   in C3D: CollisionInclude(cube,1,C3D_ADVAUTO+C3D_ADVSTATICOBJ,0,0,0,20)
 CollisionInclude(ball,2,C3D_ADVELLIPSE+C3D_ADVSLIDECOLL ,0.5,0.5,0.5)

Vom kollidierten Obj. wegsliden usw.



C3D_COLLPOINT   0;
C3D_COLLSPHERE   1;
C3D_COLLELLIPSE   2;
C3D_COLLCUBE   3;
C3D_COLLFACES   4;
C3D_ADVELLIPSE   10;
C3D_ADVCUBE   11;
C3D_ADVMESH   12;
C3D_ADVAUTO   16;

Da haben wirs ja fast, oder eher du.

Ganz tolle arbeit gernot, jetzt hab ich seit heut auch C3D Lizensiert da, progge ich also 2sprachig, warum nicht.
Title: 3D Entity System
Post by: Sebe on 2007-Oct-31
Die Blitz3D Kollisionen sind nicht besonders robust, evtl. wäre folgender Ansatz sinnvoll:

- eine Art linked list die ausschliesslich Entities aufnehmen kann
- eine Funktion, der man als Parameter ein Entity übergibt, z.B. CollisionListAdd(myCoolEntity) und die das Entity dann in die Liste aufnimmt
- eine Funktion, der man als Parameter ein Entity übergibt, z.B. CollisionHappen(myCoolEntity2) und die dann im Falle einer Kollision das Handle
des Entites zurückgibt, mit der kollidiert ist, z.B. in der main loop:

If(CollisionHappen(myCoolEntity2) = myCoolEntity) Then
  entity1Damage = entity1Damage + 10
  entity2Damage = entity2Damage + 10
EndIF

Das Kollisionssystem würde dann intern immer überprüfen, ob eine Kollision stattfindet. Entites wieder rauslöschen müsste man dann auch können
(wenn z.B. ein Fahrzeug kaputtgefahren worden ist CollisionListSubtract(myCoolCar) oder so).
Cool wäre es auch, wenn man das ganze mit Newton verknüpfen könnte.

P.S.: Ich wohn afaik auch nicht weit weg: Neuaubing in München, wobei ich jedes Wochenende zu meiner Freundin nach Neufahrn fahre (wenn nicht grade wieder Streiks sind und ich andere Lösungen suchen muss grmll)...
Title: 3D Entity System
Post by: x-tra on 2007-Oct-31
Ja Sebe der Ansatz ist am logischsten.
Ich für meinen Teil hab erstmal nur bisschen was zusammengesucht in der Eile.

Und du hast ja auch C3D wie ich in nem PB Forum las.
Title: 3D Entity System
Post by: Sebe on 2007-Oct-31
Ich bin f4ktor im offiziellen Forum und KiBaLabs in deinem. So klein ist die Welt =)
Cobra hab ich mir wg. dem Pascalansatz und dem Entitysystem besorgt. Hätte ich gewusst, dass Gernot das jetzt auch in GLBasic einbaut hätt ich es wahrscheinlich nicht gemacht. Naja, immerhin kann man sich aus anderen Sprachen auch gut Inspirationen holen nicht wahr? ^^
Title: 3D Entity System
Post by: x-tra on 2007-Oct-31
Grins ja is auch bissl auf meinem Mist gewachsen, das Beispiel aus der Entity.rar ist mein Code von C3D nur angepasst.

Ja ich habs wegen dem Entity System genommen.

Hier kann ich wenigstens für Linux kompilieren, so hat man mehreres zur Auswahl.



[hat wer noch ideen was man noch mit dem entitysystem anfangen könnte, d.h. welche zuweisungen sind noch sinnvoll?   wenn keine Vorschläge mehr kommen, hats gernot ja fast geschafft]


@gernot: sowas wie: TranslateEntity( entity:element,x:real,y:real,z:real,[useDelta:boolean])
  wäre noch sinnvoll, das gleiche wie moveentity, nur egal wie die rotation ist, das objekt orientiert sich an den globalen koordinaten bei der bewegung.

Turnentity lässt das objekt nicht rotieren, sondern dreht es in einem ruck auf den bestimmten winkel, wenn ich das richtig übersetzt habe(Turns an entity using the supplied pitch, yaw and roll values to increase/decrease the rotation.)

Und auf alle objektbezogenen Befehle müsste ja dann ein (entity:) folgen, wo es sich auf das jeweilige bezieht.


Achja was mir gerade einfällt, wenn ein entity ein parent hat, und dieses entity bewegt wird, egal ob rotation move, oder turn, oder sonstwas, immer zur eigenen achse, da es ein parent hat.

Rotation hingegen sollte es global und relativ geben.

hoffe ich hab mit meinen vorschlägen und bei den vorschlägen nicht zuviel durcheinander geworfen.



[edit] hab mal aus meinem cobra beispiel die 3ds dateien nehmen wollen, da stürzt die erstellte exe ab.daher umwandeln in .ddd und nun keine texurierung mehr, alles grau

hab grad gelesen, muss eine .ddd bei loadmesh sein, aber kannst du nicht .3ds mit einbauen?
Title: 3D Entity System
Post by: Kitty Hello on 2007-Nov-01
Ah! Mein "turnentity" heisst derzeit AlignEntity :/
Das mit dem Kollisionsansatz von SEBE mach' ich. Automatisches Abrutschen könnt ihr voll vergessen :D Dafür würde ich echt Newton empfehlen.
Sollte sich einfachst koppeln lassen. Ich werd's mal abchecken.

3DS muss man umwandeln. Wenn's nicht geht, bitte schicken.
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-01
Wie wärs mit so Light Attenuation usw?


und evtl das der nur die nächsten  8 Lichter rendert?
Und oder Fakelight ?!?!?
Hat glaub BB auch...

Code: GLBasic [Select]
INLINE
    }; //namespace zumachen
        // Funktion definieren
    extern "C" void __stdcall glLightf(int, int, float);
        // Globale Konstanten
    #define GL_LIGHT0 0x4000
    #define GL_CONSTANT_ATTENUATION 0x1207
    #define GL_LINEAR_ATTENUATION             0x1208
    #define GL_QUADRATIC_ATTENUATION          0x1209
        // Namespace aufmachen
    namespace __GLBASIC__ {
ENDINLINE



FUNCTION glLightAttenuation: iLight, constant, linear, quadratic
INLINE
    glLightf(GL_LIGHT0+iLight, GL_CONSTANT_ATTENUATION,  constant);
    glLightf(GL_LIGHT0+iLight, GL_LINEAR_ATTENUATION, linear);
    glLightf(GL_LIGHT0+iLight, GL_QUADRATIC_ATTENUATION, quadratic);
ENDINLINE
ENDFUNCTION
Edit: und evtl das Entity system unterscheidbar machen von der anderen Syntax so wie das X_... bei 3D, nur Mit E_.. oder so ?
Title: 3D Entity System
Post by: x-tra on 2007-Nov-01
Das würde ich auch sagen, weil man ja mit dem ganzen X_ Befehlen das nächste Objekt manipuliert, und bei dem E_ System entitybezogen, da könnte man a.) durcheinanderkommen b.) Fehler produzieren
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-01
So Lightrange ist nun drin ;)

Und bei CreateLight() muss man jetzt die Farbe mit angeben!

Download (http://www.styleattax.de/entity.rar)


Code: GLBasic [Select]
camera=CreateCamera()
EnableEntity(camera, TRUE) // this way you toggle cameras, too
light = CreateLight(RGB(0xff, 0xff, 0x00)) // Yellow Light!
SetLightRange(light,1, 0.001, 0.001)  // Set the range of the Light

ship = LoadMesh("ship.ddd")
terrain = LoadMesh("mario_level.ddd")
MoveEntity(terrain, 0, -3.5, 0)

shipx = 0
shipy = 5
shipz = 0
entx=EntityX(ship)
enty=EntityY(ship)
entz=EntityZ(ship)

PositionEntity(ship, shipx, shipy, shipz)
sc = 0.10
ScaleEntity(ship, sc,sc,sc)

EntityParent(camera, ship)           //entity camera // parent ship
PositionEntity(camera, 0, 5, 20)     // position camera relativ to ship
RotateEntity(camera, 0,90,0)
EntityParent(light, camera)


WHILE TRUE                          //controlling of ship
       
        // Steuerung
        IF KEY(203)
        RotateEntity(ship, 0, 5, 0)        //noch zu machen ship rotation um eigene achse bei bewegung
        ENDIF
        IF KEY(205)
        RotateEntity(ship, 0, -5, 0)
        ENDIF

        IF KEY(200) THEN MoveEntity(ship, 0, 0, -1)
        IF KEY(208) THEN MoveEntity(ship, 0, 0,  1)
        //Steuerung Ende
        //Kollision
        // IF EntityGroundCollide(ship) THEN MoveEntity(ship, 0, 1, 0)    //Kollision unterhalb Ship

        DrawEntitySystem()
        X_AMBIENT_LT 0, RGB(0xff, 0xff, 0xff)
        X_DRAWAXES 0,0,0
        X_MAKE2D
        PRINT "Lightcolor: Yellow !!!!",10,10
        SHOWSCREEN
WEND
Code: GLBasic [Select]
// an entity - that's a .ddd, a texture
// with position, rotation and scaling
TYPE T3DEntity

        what                    // what is it? 0=ddd, 1=camera, 2=light,3= Ambientlight
        active              // is active (or will not be drawn/used)
        M[16]           // local matrix - internal use only
        Mg[16]                  // global, final matrix (after child transformations)

        parent=-1               // my parent (-1 if none)
        childs[]                // child items that are liked to this one

        // DDD OBJECT
        tex                             // holds a texture
        ddd                             // holds a model

        anim_from       // animation from frame
        anim_to         // animation to frame
        anim_speed      // animation speed (interpolation gets done internally, then)
        x;y;z           // global position
        rx;ry;rz        // rotation angles
        sx=1;sy=1;sz=1  // scale factors
        alpha           // alpha transparency value
       
        // CAMERA
        znear = 1
        zfar  = 1000
        fov   = 45

        // LIGHT
        color=0xffffff // sorry...
        constant= -1;linear=-1;quadratic=-1 // for Lightrange

ENDTYPE

// GLOBAL objects
GLOBAL g3DObj[] AS T3DEntity    // entities

//! ------------------------------
//! CREATION / REMOVAL
//! ------------------------------


// ------------------------------------------ //
//! Load a texture and return the channel it is stored
// \param filename$ - the file to load. Must be a .bmp or .png file
// \return the index for the texture (used for GETSPRITESIZE e.g.)
// ------------------------------------------ //
FUNCTION LoadTexture: filename$
LOCAL t, sx,sy

        // find free sprite slot
        GETSPRITESIZE t, sx, sy
        WHILE sx>0 OR sy>0
                INC t, 1
                GETSPRITESIZE t, sx, sy
        WEND

        LOADSPRITE filename$, t
        GETSPRITESIZE t, sx, sy
        IF sx = 0 THEN DEBUG "failed to load: "+filename$+"\n"
        RETURN t
ENDFUNCTION

// ------------------------------------------ //
//! Make a non-texure.
// \return -1
// ------------------------------------------ //
FUNCTION MakeNullTexture:
        RETURN -1
ENDFUNCTION

// ------------------------------------------ //
//! Free the memory used for a texture and
//! apply no texture to all entities, that had this
//! texture assigned.
// \param ext - the texture index
// \return nothing
// ------------------------------------------ //
FUNCTION FreeTexture: ext
        LOADSPRITE "", ext
        // try to find the texture and set it to '-1'
        FOREACH t IN g3DObj[]
                IF t.tex = ext
                        t.tex = -1
                ENDIF
        NEXT
ENDFUNCTION



// ------------------------------------------ //
//! Loads a mesh object (.dda or .ddd) and creates an entity from it.
// \sa DuplicateEntity
// \param filename$ - the file to load. Must be .dda or .ddd file.
// \return the entity handle
// ------------------------------------------ //
FUNCTION LoadMesh: filename$
LOCAL t AS T3DEntity
LOCAL nc
        t.what = 0
        t.tex=-1
        t.ddd=0

        // Get free object slot
        nc = X_NUMFACES(t.ddd)
        WHILE nc>0
                INC t.ddd, 1
                nc = X_NUMFACES(t.ddd)
        WEND

        X_LOADOBJ filename$, t.ddd
        IF X_NUMFACES(t.ddd) = 0 THEN DEBUG "failed to load: "+filename$+"\n"

        RETURN AddEntity(t)
ENDFUNCTION

// ------------------------------------------ //
//! this function frees all resources for a loaded .ddd
//! object. All entities with this object get disabled.
// \param ext - the ddd index
// ------------------------------------------ //
FUNCTION FreeMesh: ext
        // find it in the list and just drop it
        FOREACH t IN g3DObj[]
                IF t.ddd = ext THEN t.active = FALSE
        NEXT
        // make sure the memory is freed
        X_OBJSTART ext
        X_OBJEND
ENDFUNCTION

// ------------------------------------------ //
//! This function removes an entity from the world
//! This is getting done by disabling the object.
//! You must never use the handle for this object again, though
//! since this might change in a next version.
// \param handle - an entity handle
// ------------------------------------------ //
FUNCTION FreeEntity: handle
        // must not delete it, since
        // the indices would change
        g3DObj[handle].active=FALSE
ENDFUNCTION

// ------------------------------------------ //
//! Creates an entity that represents a light.
//! The position is at 0,0,0 and the color is white.
//! The light is a 360 degree bulb light.
// \param color - set RGB color of the light
// \return the entity handle
// ------------------------------------------ //
FUNCTION CreateLight:color
LOCAL t AS T3DEntity
        t.what = 2
        t.color = color
        RETURN AddEntity(t)
ENDFUNCTION

// ------------------------------------------ //
//! Set the range of a light.
// \param handle - a handle to an entity
// \param constant - How constant are the shining
// \param linear - i dont know(ask Gernot)
// \param quadratic - i dont know(ask Gernot)
// ------------------------------------------ //
FUNCTION SetLightRange: handle, constant, linear, quadratic
        g3DObj[handle].constant = constant
        g3DObj[handle].linear   = linear
        g3DObj[handle].quadratic= quadratic
ENDFUNCTION

// ------------------------------------------ //
//! Creates an entity that represents a camera.
//! You can have several cameras, though the one used for
//! scene rendering is the one you enabled last. This function
//! enalbes the new camera, thus making it the default camera.
// \return the entity handle
// ------------------------------------------ //
FUNCTION CreateCamera:
LOCAL t AS T3DEntity
LOCAL e
        t.what = 1
        e = AddEntity(t)
        EnableEntity(e, TRUE)
        RETURN e
ENDFUNCTION

// ------------------------------------------ //
//! This creates a full copy of an entity as a new entity.
//! If the entity is a camera, the new entity is _not_ the
//! default camera.
// \param original - a handle to an entity
// \return the new entity handle
// ------------------------------------------ //
FUNCTION DuplicateEntity: original
        DIMPUSH g3DObj[], g3DObj[original]

        // camera - disable the new one
        IF g3DObj[LEN(g3DObj)-1].what = 1
                EnableEntity(LEN(g3DObj)-1, FALSE)
        ENDIF

        RETURN LEN(g3DObj)-1
ENDFUNCTION


// ------------------------------------------ //
//! Adds an entity one to the global list. This is for internal purposes, only.
// \param e - a T3DEtnity TYPE
// \return "handle" to that object
// ------------------------------------------ //
FUNCTION AddEntity: e AS T3DEntity
        e.active = TRUE
        UpdateMatrix(e, FALSE)
LOCAL i
        FOREACH t IN g3DObj[]
                IF t.active=FALSE
                        t = e
                        RETURN i
                ENDIF
                INC i, 1
        NEXT

        DIMPUSH g3DObj[], e
        RETURN LEN(g3DObj[])-1
ENDFUNCTION



//! ------------------------------
//! MOVE / ROTATE / SCALE / ENABLE
//! ------------------------------

// ------------------------------------------ //
//! With this function you can enable or disable an entity.
//! disabled entities will not be considered in the rendering
//! process. If you enable a camera, it get's the default
//! rendering camera. If you disable all cameras, nothing
//! get's rerndered. Thus, you should only enable the current
//! camera, but never disable one.
// \param handle - the handle to the entity
// \param onoff  - Enable (TRUE) or disable (FALSE) the entity
// ------------------------------------------ //
FUNCTION EnableEntity: handle, onoff
        // is it a camera? Disable all cameras, first
        IF g3DObj[handle].what = 1
                FOREACH o IN g3DObj[]
                        IF o.what=1 THEN o.active=FALSE
                NEXT
        ENDIF

        // enable/disable the entity
        g3DObj[handle].active=onoff
ENDFUNCTION



// ------------------------------------------ //
//! Sets X,Y,Z position of an entity.
// \param handle - handle to an entity
// \param x,y,z - new position
// ------------------------------------------ //
FUNCTION PositionEntity: handle, x,y,z
        g3DObj[handle].x=x
        g3DObj[handle].y=y
        g3DObj[handle].z=z
        // update the model matrix for showing, later
        UpdateMatrix(g3DObj[handle], FALSE)
ENDFUNCTION

//! Moves an entity relative by dx,dy,dz coordinates.
// \param handle - handle to an entity
// \param dx,dy,dz - offset to current position
FUNCTION MoveEntity: handle, dx,dy,dz
LOCAL x,y,z
        x = g3DObj[handle].Mg[0] * dx + g3DObj[handle].Mg[4] * dy + g3DObj[handle].Mg[ 8] * dz
        y = g3DObj[handle].Mg[1] * dx + g3DObj[handle].Mg[5] * dy + g3DObj[handle].Mg[ 9] * dz
        z = g3DObj[handle].Mg[2] * dx + g3DObj[handle].Mg[6] * dy + g3DObj[handle].Mg[10] * dz

        INC g3DObj[handle].x,x
        INC g3DObj[handle].y,y
        INC g3DObj[handle].z,z
        UpdateMatrix(g3DObj[handle], FALSE)
ENDFUNCTION

// ------------------------------------------ //
//! Set global rotation angles.
// \param handle - handle to an entity
// \param rx,ry,rz - euler rotation angles around global axes.
// ------------------------------------------ //
FUNCTION AlignEntity: handle, rx,ry,rz
        g3DObj[handle].rx=rx
        g3DObj[handle].ry=ry
        g3DObj[handle].rz=rz
        UpdateMatrix(g3DObj[handle], FALSE)
ENDFUNCTION

// ------------------------------------------ //
//! Rotate additional to the current rotation of an entity.
// \param handle - handle to an entity
// \param rx,ry,rz - euler rotation angles around global axes.
// ------------------------------------------ //
FUNCTION RotateEntity: handle, drx,dry,drz
        INC g3DObj[handle].rx,drx
        INC g3DObj[handle].ry,dry
        INC g3DObj[handle].rz,drz
        UpdateMatrix(g3DObj[handle], FALSE)
ENDFUNCTION

// ------------------------------------------ //
//! Scales an entity. The scaling is only applied to the final entity.
//! Parents and childs will not be affected at all.
// \param handle - handle to an entity
// \param sx,sy,sz - Scale factors for local axes
// ------------------------------------------ //
FUNCTION ScaleEntity: handle, sx,sy,sz
        g3DObj[handle].sx=sx
        g3DObj[handle].sy=sy
        g3DObj[handle].sz=sz
ENDFUNCTION

// ------------------------------------------ //
//! Set the amination start and end value
//! -> the model will then anmiate in between these values forever.
// \param handle - handle to the entity
// \param key_from - first animation keyframe
// \param key_to - last animation keyframe
// \param speed - number of seconds the animation from key_from to key_to will take
// ------------------------------------------ //
FUNCTION SetAnimation: handle, key_from, key_to, speed
        g3DObj[handle].anim_from=key_from
        g3DObj[handle].anim_to=key_to
        g3DObj[handle].anim_speed=speed
ENDFUNCTION


// ------------------------------------------ //
//! Return the x position of the entity
// \param entity - handle to the entity
// \return the X coordinate for that entity.
// ------------------------------------------ //
FUNCTION EntityX: entity
    RETURN g3DObj[entity].x
ENDFUNCTION

// ------------------------------------------ //
//! Return the y position of the entity
// \param entity - handle to the entity
// \return the Y coordinate for that entity.
// ------------------------------------------ //
FUNCTION EntityY: entity
    RETURN g3DObj[entity].y
ENDFUNCTION

// ------------------------------------------ //
//! Return the z position of the entity
// \param entity - handle to the entity
// \return the Z coordinate for that entity.
// ------------------------------------------ //
FUNCTION EntityZ: entity
    RETURN g3DObj[entity].z
ENDFUNCTION


//! ------------------------------
//! ADOPTION
//! ------------------------------


// ------------------------------------------ //
//! This function "pins" one entity to another. Thus, when you move the
//! parent object, the child moves/rotates correspondingly.
//! The position and rotation coordinates of the child object are
//! relative to the parent then.
// \param entity - handle to an entity
// \param parent - handle to the object that will be parent (-1 to release)
// ------------------------------------------ //
FUNCTION EntityParent: entity, parent

        // remove old parent relationship
        IF g3DObj[entity].parent>=0
                // remove from parent's list
                FOREACH c IN g3DObj[g3DObj[entity].parent].childs[]
                        IF c = entity THEN DELETE c
                NEXT
        ENDIF

        // Set the new parent
        g3DObj[entity].parent = parent

        // add new relation
        IF parent>=0
                // see if the entity already _is_ a child
                FOREACH c IN g3DObj[parent].childs[]
                        IF c = entity THEN RETURN
                NEXT
                // nopers, add it
                DIMPUSH g3DObj[parent].childs[], entity
        ENDIF
        UpdateMatrix(g3DObj[entity], TRUE)
ENDFUNCTION


//! ------------------------------
//! DRAWING
//! ------------------------------


// ------------------------------------------ //
//! This function is called to draw the whole 3D entity system for you.
// ------------------------------------------ //
FUNCTION DrawEntitySystem:
LOCAL camgood=FALSE
        // Set camera
        FOREACH o IN g3DObj[]
                IF o.what=1 AND o.active
                        camgood=TRUE
                        X_MAKE3D o.znear, o.zfar, o.fov
                        X_CAMERAUP o.Mg[4], o.Mg[5], o.Mg[6]
                        X_CAMERA o.Mg[12], o.Mg[13], o.Mg[14], _
                                         o.Mg[12]+o.Mg[0], o.Mg[13]+o.Mg[1], o.Mg[14]+o.Mg[2]
                        DEBUG "Cam:"+FORMAT$(0,1,o.Mg[12])+", "+FORMAT$(0,1, o.Mg[13]) _
                                                +", "+FORMAT$(0,1, o.Mg[14])+", "+FORMAT$(0,1, o.Mg[12]+o.Mg[0]) _
                                                +", "+FORMAT$(0,1, o.Mg[13]+o.Mg[1])+", "+FORMAT$(0,1, o.Mg[14]+o.Mg[2]) _
                                                +"\n"
                        BREAK
                ENDIF
        NEXT
        IF camgood=FALSE THEN RETURN

        // Lights
LOCAL iLight
        FOREACH o IN g3DObj[]
                IF o.what=2
                        X_SPOT_LT iLight, o.color, o.Mg[12], o.Mg[13], o.Mg[14], _
                                        o.Mg[12]+o.Mg[0], o.Mg[13]+o.Mg[1], o.Mg[14]+o.Mg[2], 360
                        IF o.constant > 0 OR o.linear > 0 OR o.quadratic > 0
                                glLightAttenuation(iLight, o.constant, o.linear, o.quadratic)
                        ENDIF
                        INC iLight, 1
                ENDIF
        NEXT

        FOR transparent = 0 TO 1
                // look at each entity
                FOREACH t IN g3DObj[]
                        // ignore disabled entities
                        IF t.active=FALSE OR t.what>0 THEN CONTINUE

                        // first draw all opaque
                        // then (2nd pass) draw all with alpha
                        IF (t.alpha AND transparent=0) OR (t.alpha=0 AND transparent) THEN CONTINUE

                        // some transparency
                        ALPHAMODE t.alpha

                        // apply texture
                        X_SETTEXTURE t.tex, -1

                        X_DRAWAXES t.Mg[12], t.Mg[13], t.Mg[14]
                        X_PRINT "OBJ"+t.parent+", c"+LEN(t.childs[]),  t.Mg[12], t.Mg[13], t.Mg[14], 0
                        // do the matrix magic
                        X_PUSHMATRIX
                                X_MULTMATRIX t.Mg[]

                                // Get the current animation
                                LOCAL pos
                                pos = MOD(GETTIMERALL() * t.anim_speed, 1000)/1000
                                X_PUSHMATRIX
                                        X_SCALING t.sx,t.sy,t.sz
                                        X_DRAWANIM t.ddd, t.anim_from, t.anim_to, pos, TRUE
                                X_POPMATRIX
                        X_POPMATRIX
                NEXT
        NEXT
ENDFUNCTION



//! ------------------------------
//! MATRIX OPERATIONS
//! ------------------------------

// ------------------------------------------ //
//! Multiply a 4x4 matrix. The product may be a[] or b[]
//! internal use, only.
// \param product[] - the result
// \param a[], b[] - input matrix factors
// ------------------------------------------ //
FUNCTION MultMatrix4x4: product[], a[], b[]
LOCAL i
        FOR i = 0 TO 3
                LOCAL ai0=a[0*4+i],  ai1=a[1*4+i],  ai2=a[2*4+i],  ai3=a[3*4+i]
                product[0*4+i] = ai0 * b[0*4+0] + ai1 * b[0*4+1] + ai2 * b[0*4+2] + ai3 * b[0*4+3]
                product[1*4+i] = ai0 * b[1*4+0] + ai1 * b[1*4+1] + ai2 * b[1*4+2] + ai3 * b[1*4+3]
                product[2*4+i] = ai0 * b[2*4+0] + ai1 * b[2*4+1] + ai2 * b[2*4+2] + ai3 * b[2*4+3]
                product[3*4+i] = ai0 * b[3*4+0] + ai1 * b[3*4+1] + ai2 * b[3*4+2] + ai3 * b[3*4+3]
        NEXT
ENDFUNCTION



//! Inverse of a matrix
//! B[] = A[]^-1
FUNCTION InverseMatrix: A[], invM[]
DIMDATA invM[], A[0], A[4], A[8], 0, _
                                A[1], A[5], A[9], 0, _
                                A[2], A[6], A[10],0, _
                                -(A[0]*A[12]+A[1]*A[13]+A[ 2]*A[14]), _
                                -(A[4]*A[12]+A[5]*A[13]+A[ 6]*A[14]), _
                                -(A[8]*A[12]+A[9]*A[13]+A[10]*A[14]), _
                                1
ENDFUNCTION


//! vertex[4] = vertex[4] * M[16]  - Multiply Vertex by Matrix
//? vertex[4] = vertex[4] * M[16]  - Multipliziert Vektor mit Matrix
// \sa NewtonMultMatrix
FUNCTION TransformVertex: vertex[], M[]
LOCAL out[]
        DIM out[4]
        out[0] = M[0] * vertex[0] + M[4] * vertex[1] + M[ 8] * vertex[2] + M[12]
        out[1] = M[1] * vertex[0] + M[5] * vertex[1] + M[ 9] * vertex[2] + M[13]
        out[2] = M[2] * vertex[0] + M[6] * vertex[1] + M[10] * vertex[2] + M[14]
        vertex[] = out[]
ENDFUNCTION



// ------------------------------------------ //
//! Create Displacement and rotation matrix
//! for faster drawing and getting rid of gimbal locking
//! ... if you don't understand this, just believe me
//! it works, OK?
//! It just creates a matrix which you can use with
//! X_MULTMATRIX instead of X_MOVEMENT, X_ROTATION, X_SCALING, ...
//!
//! This function also takes care, if an entity has a parent
//! and it calls itself for every attached child.
// \param e - a T3DEntity TYPE
// \param only_glob - Only update the global matrix (when parent changes)
// ------------------------------------------ //
FUNCTION UpdateMatrix: 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
                MultMatrix4x4(e.Mg[], g3DObj[e.parent].Mg[], e.M[])
        ENDIF

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



INLINE
    }; //namespace zumachen
        // Funktion definieren
    extern "C" void __stdcall glLightf(int, int, float);
        // Globale Konstanten
    #define GL_LIGHT0 0x4000
    #define GL_CONSTANT_ATTENUATION 0x1207
    #define GL_LINEAR_ATTENUATION             0x1208
    #define GL_QUADRATIC_ATTENUATION          0x1209
        // Namespace zumachen
    namespace __GLBASIC__ {
ENDINLINE



FUNCTION glLightAttenuation: iLight, constant, linear, quadratic
INLINE
    glLightf(GL_LIGHT0+iLight, GL_CONSTANT_ATTENUATION,  constant);
    glLightf(GL_LIGHT0+iLight, GL_LINEAR_ATTENUATION, linear);
    glLightf(GL_LIGHT0+iLight, GL_QUADRATIC_ATTENUATION, quadratic);
ENDINLINE
ENDFUNCTION
Da muss mir Gernot bei der Beschreibung helfen ^^

Code: GLBasic [Select]
// ------------------------------------------ //
//! Set the range of a light.
// \param handle - a handle to an entity
// \param constant - How constant are the shining
// \param linear - i dont know(ask Gernot)
// \param quadratic - i dont know(ask Gernot)
// ------------------------------------------ //
FUNCTION SetLightRange: handle, constant, linear, quadratic
        g3DObj[handle].constant = constant
        g3DObj[handle].linear   = linear
        g3DObj[handle].quadratic= quadratic
ENDFUNCTION
Title: 3D Entity System
Post by: Kitty Hello on 2007-Nov-01
ok, cool. Mit M_ ist evtl. ganz cool. Oder: immer mit Entity beginnen?
Title: 3D Entity System
Post by: x-tra on 2007-Nov-01
Entity is einfacher
Title: 3D Entity System
Post by: Kitty Hello on 2007-Nov-01
OK, dreh' ich also um - EntityMove statt MoveEntity
Title: 3D Entity System
Post by: x-tra on 2007-Nov-02
nochmal zum thema kollisionen.

bei bb3d ist das so

entitytype ship, 1
entitytype kugel, 2

usw.

und dann eben entitycollision 1,2,......    könnten art reaktion usw. folgen z.b. ob nur ein rückgabewert gegeben werden soll(intersection-kollision ohne reaktion aktiver art) oder bei kollision alle x,y,z einen schritt zurück bzw. alte position, sprung in anderen programmteil aufgrund zugeteilter reaktion usw. usw.
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-02
Ne Gernot !

Bei dem 3D ist doch jetz immer so :

X_ Movement
X_Rotation
...

Beim Entity solls so ein:

E_Move
E_Rotate
E_LoadMash
...

so denk ich mir das
Title: 3D Entity System
Post by: x-tra on 2007-Nov-02
stell dir vor es kommt jemand von BB3D hier rüber und muss sich kaum umgewöhnen.

Wäre einfacher oder.
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-02
stell dir vor, das hier ist aber kein BB !
Man sollte schon noch seinen eigen Stil weiterführen, sonnst kannst bald überall lesen GLBasic klaut die Befehlsyntax von BlitzBasic....

Wo wir wieder an dem Punkt sind, das Gernot nicht will, mit BB über einen Kamm geschoren zu werden!
Diese BB'ler sollen ruhig bei BB bleiben, da ist zu 80% eh nur schund dabei! Und zu 100% die Admins!
Title: 3D Entity System
Post by: x-tra on 2007-Nov-02
nun er wollte ja das entity system zu 100% übernehmen.
die die bb können hättens hier leichter, ich find das ist wichtig wenn man sich gleich daheim fühlt bei einer sprache.
Title: 3D Entity System
Post by: Antidote on 2007-Nov-02
mhh,
ich würde den "eigenen" Stil empfehlen!
Denn wenn ich in BB proggen will dann nehme ich die Sprache halt.
Finde E_.... gut.
Title: 3D Entity System
Post by: x-tra on 2007-Nov-02
na wie auch immer, eigentlich egal.

hauptsache es es funktioniert
Title: 3D Entity System
Post by: Kitty Hello on 2007-Nov-02
Ich kapier immer noch nicht, wie das mit den Kollision geht.
Title: 3D Entity System
Post by: x-tra on 2007-Nov-02
mmmm villeicht einfach nur koordinatenüberprüfung mit einer gewissen toleranz, sozusagen dem radius um ein objekt.

meinst du das?

wäre zumindest schonmal eine einfach art dessen
Title: 3D Entity System
Post by: Kitty Hello on 2007-Nov-02
Nein, ich kapier nicht, wie man das verwenden soll. Was für Befehle?
Hat jemand ein Beispile in B3D oder Cobra3D?
btw. bin im chat.

[edit]
http://www.glbasic.com/beta/entity.rar
Siehe erster Thread - hier immer die aktuellste Version.
Title: 3D Entity System
Post by: x-tra on 2007-Nov-02
hab grad kein irc drauf, aber schau hier:  http://blitzbase.de/befehle3d/collisions.htm    sollte alles erklären, und bei den befehlkst du schauen, was es zu kollisionen noch so gibt
Title: 3D Entity System
Post by: BumbleBee on 2007-Nov-04
Quote from: Schranz0r
stell dir vor, das hier ist aber kein BB !
 Man sollte schon noch seinen eigen Stil weiterführen, sonnst kannst bald überall lesen GLBasic klaut die Befehlsyntax von BlitzBasic....
Ja, voll zustimm. Sonst sollte man auch gleich GLBasic in GLBlitzBasic oder so umbenennen.:D

Cheers
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-04
COLLISIONS TypeQ, TypeZ, Methode, Reaktion

TypeQ = Quell-Objekttyp, das auf Kollision überprüft werden soll
TypeZ = Ziel-Objekttyp, mit dem es kollidieren soll
Methode = Methode der Erkennung:
1=Kugel-Kugel-Kollision
2=Kugel-Polygon-Kollision
3=Kugel-Würfel-Kollision
Reaktion = Was soll bei einer Kollision passieren:
1=stopen
2=sliden (normal)
3=sliden (nur raufsliden)

Hier wär das Sliden interessant!
Title: 3D Entity System
Post by: tft on 2007-Nov-04
Hi ...

ich denke keiner hir wird sich ernsthaft sorgen um das fortbestehen von GLBasic machen. Nur weil teile des Syntax BB gleichen. Die meisten die von BB Umsteigen machen das ja nicht weil die Spraceh schrott ist. Sondern weil BB nicht weiter vernünftig Supportet und erweitert wird. Da nicht damit zu rechnen ist das B3D jemals von hause aus DX9 oder DX10 fähig sein wird. Ist ein Umstig eigentlich mit der Zeit fast zwingend notwendig.
Was die behauptung angeht. Das man in BB nur schrott machen kann. Da habe ich nur ein müdes Lächeln für übrig. Noch kommt GLBasic nicht an die GEschwindigkeit von B3D ran. Womit das zusammenhängt weis ich nicht. Aber ich benutze ja beides. Zum teil auch für Performance Tests. Und im 3D Bereich oder 2D. Sind schon einige Spiele entstanden. Die sich echt sehen lassen können. Aber das gehört jetzt nicht hir her......

TFT

Edit:

Im übrigen gild auf der ganzen welt. Das sich ein eingespieltes System besser durchsetzt als ein neues. Egal wie toll es ist. Und der Syntax von BB ist nun mal Intuitiv gut gestalltet. Man muss nicht immer das Rad merfach erfinden.
Title: 3D Entity System
Post by: Aniel on 2007-Nov-04
Das mit der Geschwindigkeit kann ich so nicht bestätigen. GLBasic ist im 2D Bereich BB klar überlegen, haste da z.B. mal die Kollisionen getestet? 50-70 mal schneller als BlitzBasic und das ist keine Übertreibung! Auch bei der Anzahl an Objekten mit gleichzeitigen Abfragen zieht BB den kürzeren, GLBasic ist bei ca. 8000 Objekten abgestürzt, BB bei ca. 6000, wohlgemerkt ohne 3D Beschleunigung.

Beim 3D Bereich kann ich nur für mich sprechen, da da die Ergebnisse ziemlich weit auseinandergehen, aghängig von der Grafikkarte und dem aktuellen Treiber. Bei mir (X1950XT 512MB, 7.10 Treiber) läuft BB 50% langsamer als GLBasic, was aber vermutlich an der fehlenden DX7 Optimierung vom Treiber liegt. Bei nem Freund (Onboardchip) läuft mit GLBasic gar nichts xD Vermutlich wegen fehlendem OpenGL Support^^
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-04
GLBasic ist um WELTEN schneller als BB

Und TFT Bitte.. JA bitte ... Lese richtig!
Ich hab nie behauptet das man mit BB nur schrott machen kann!

Ich hab nur gesagt das 80%  der User einen an der Waffel haben!
Und das die Admins eingebildet sind wie die sau!( zu 100%)

Und nein Gernot, mach bitte nicht diesen Fehler das BB 1:1 zu kopieren!!!!
Ich seh schon die Forumeinträge hier von den BB'lern einfliegen!!!

Mach dein eigenes Ding, man kann sich dran orientieren, aber du bist bestimt besser als Mark Silby und Co. Sieht man schon an den Types die bestimmt 20x schneller sind als die von BB!!!
Title: 3D Entity System
Post by: Sebe on 2007-Nov-04
Ich stimme Schranz0r da zu.

Zur Geschwindigkeit: Blitz3D ist langsamer als GLBasic, was erstens daran liegt, dass Gernot GLBasic ständigt intern optimiert (zumindest war das früher so), zweitens weil OpenGL i.d.R. schneller ist als DirectX7/DirectX8 (vor allem wenn man sehr grosse Teile der 3D Geometrie auf einmal rendern lässt und die Treiber natürlich auch ordentlich sind) und drittens weil Blitz3D im Prinzip nichts anderes macht, als den Quesllcode zu kompilieren und das B3D Befehlsset als DLL in die fertige Exe reinzuschieben (mit anderen Worten: Blitz3D Programme sind immer von einer DLL abhängig, die man bloss nicht sieht, weil sie dynamisch aus dem Programmspeicher aufgerufen wird) während GLBasic wirklich 100% kompilierter Maschinencode ist.

Zur Syntax: eine 1:1 Abbildung des B3D Befehlsset ist 1. unsinnig und 2. unnötig. GLBasic hat viel mehr Features und das sollte sich auch im Entitysystem wiederspiegeln. Alle Befehle 1:1 zu übernehmen macht da keinen Sinn, aber man sollte auch nicht zwanghaft davon abweichen, nur weil ein Befehl in Blitz3D genauso heisst. Wichtig ist nur, dass GLBasic ein Entitysystem bekommt und das System einfach zu benutzen ist und Sinn macht. Eine 100%ige Kopie des B3D Befehlssatzes macht weder Sinn, noch wird es allen GLBasic Features gerecht. Und das sollte es doch oder?
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-04
WOW...
Ja da muss ich dir auch zustimmen!

Ich bin ja noch immer für den Prefix : E_.... !
Weil so kann man auch keine Befehle mit dem "alten System" ausversehen kombinieren, und so evtl. unerwünschte Ergebnisse und/oder bis hin zum Bluescreen(Win95) , verhindern!
Ok war dick aufgetragen :D aber der sinn sollte klar sein!
Nicht das BumbleBee von hocker fällt, und sich garnicht mehr auskennt... ^^
Und wieder mal ein Freund mehr .. *hust*
Title: 3D Entity System
Post by: Kitty Hello on 2007-Nov-05
Ich bastel' gerade an der Kollision. Sollte, jetzt wo ich's kapiert habe, kein Problem sein. Einziges Problem ist: Wie bekomm' ich das Sliden hin. Evtl. muss ich einen neuen Befehl einbauen, der Infos über die letzte Kollision gibt.
Title: 3D Entity System
Post by: BumbleBee on 2007-Nov-05
Quote from: Schranz0r
Nicht das BumbleBee von hocker fällt, und sich garnicht mehr auskennt... ^^
Ich fall höchstens mal vom Barhocker.;)

Cheers
Title: 3D Entity System
Post by: tft on 2007-Nov-05
Hi ....

Ok.... ich nehme das mal so hin. Ich habe jetzt einen Neuen Rechenr. Quad 2,4 Ghz. Und bei mir ist das verhältniss b3D/GlBAsic ebenfals zu gunsten  B3D. Ich möchte aber einreumen. Das das natürlich auch an meiner art zu Coden liegen kann.
Im übrigen bleibt es schlussendlich Gernot überlassen wie er alles macht. Und wenn die Hilfe in Deutsch gut ist. Macht derSyntax keinen unterschied.

TFT
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-05
Hmm Quentin, hast du schonmal den neusten Treiber geladen... der auch OpenGL unterstützt für die GraKa ....

War bei mir anfangs auch so, das GLB voll laggy war, bis zum neuen Treiber! Weil ja Vista kein GL mitliefert, wenn ich das so richtig gelesen hatte :D

@ Gernot:

Evtl hilft dir das weiter...
Diese Art mathe ist nicht mein Ding ;)

http://www.gamedev.net/reference/articles/article1026.asp

oder

http://www.peroxide.dk/download/tutorials/tut10/pxdtut10.html
Title: 3D Entity System
Post by: Kitty Hello on 2007-Nov-05
Ich hab' das alles programmiert. Ich müsst halt noch die Normalen der letzten Kolllision speichern und abfragen lassen. K.P.
Title: 3D Entity System
Post by: x-tra on 2007-Nov-07
Wenn das jetzt soweit ja schon sogut wie fertig ist, kannst du das Ganze auch integrieren in die Sprache?
Okay das Einbinden ist auch okay, wäre aber toll, auch wenn ich damit schon wieder nerve.

Und eventuell auch in der Hilfe .chm mit rein, sodass es vielleicht nämlich auch gleich in der Demo alles vorhanden ist.

Dann kannste auch gleich auf deiner Hauptseite damit prahlen.grins
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-07
naja noch ist es ja nix halbes und nix ganzes ^^
Also ich denke Gernot sieht es vor, erstmal alles als gbas in den Commonordner zu packen !?

weil wenn er das Entity-System einbindet, muss er es ja in C++ Schreiben ^^
Title: 3D Entity System
Post by: x-tra on 2007-Nov-07
stimmt, naja toll wärs trotzdem.
Title: 3D Entity System
Post by: Kitty Hello on 2007-Nov-07
Das Hauptproblem ist: Ich muss die Hilfe dazu schreiben - und das kostet immer ewig Nerven.
Title: 3D Entity System
Post by: x-tra on 2007-Nov-07
och na dann würde es ohne weiteres gehen das system zu integrieren?

und die hilfe ist das schlimmere übel?
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-08
@ Gernot:

Dann mach die Hilfedatei "Opensource" dann helfen wir dir halt beim eintragen ^^
Title: 3D Entity System
Post by: Kitty Hello on 2007-Nov-08
Jetzt macht' erstmal damit. Taugt das was?
Title: 3D Entity System
Post by: x-tra on 2007-Nov-11
Kannst du doch noch 3ds einbinden, ist einfacher für mich.

Bin ständig am werkeln und da wäre das praktischer.

Ausserdem fällt ja dann das .ddw weg.

Was mir eh nicht so recht war.



P.S. und um das hier zu umgehen:
Quote
2 Optionen: -entweder eine Textur pro .ddd (für Spieler usw.) oder mehrere Texturen, dann aber alle Objekte als .ddd speichern und eine .ddw ("World"-Datei) dazumachen.
Die ddw ist einfach nur eine .ini Datei, die sagt, welches Objekt welche Textur hat usw.
Ein komplettes Modell ohne ddw oder sonstwas wäre halt cool, auch wegen animationen usw.


Hab nämlich eine .3ds Datei in .ddd umgewandelt und ui welche wunder, keine texturierung mehr.Bei .3ds sollte das schon gehen, oder?

Einfach volle .3ds Funktionalität und wir wären glücklich.

Will  was mit dem Entity System basteln und is so einfacher.

(und vom Gefühl her schneller als Cobra3D ehrlich gesagt)



[edit]  bei deinem beispiel dreht sich die camera ja nicht um die eigene achse.Ichhabe mal das Ship neu positioniert, aber da positioniert sich die camer neu, sonst nichts.Und die camera dreht sich immer nur um die Pfeile(rot, grün, blau)
Title: 3D Entity System
Post by: Kitty Hello on 2007-Nov-12
OK, Collisionen sind jetzt mal drin - nur testhalber mit einer Umkugelung des Objektes.
Das ist sehr sehr einfach zu verwenden - schon klar - aber das kostet ganz schön Performance. Für Feld-Wald und Wiesen-Spiele aber allemal gut genug.
Title: 3D Entity System
Post by: trucidare on 2007-Nov-12
nun wär ich für ein shooter...
(wasserpistolen damit das hier nich inne 18er sektion rutscht)
Title: 3D Entity System
Post by: Kitty Hello on 2007-Nov-12
Ich hätte mal in 20 Zeilen ein ZAGA Mission gemacht. Mit echter 3D Grafik.
http://www.mobygames.com/game/c64/zaga-mission
Mit der Entity Engine ist das wirklich super einfach zu machen. Einfach: Bei Kollision: Bumm. Fertig.
Super, dass man die Kamera einfach an den Heli pappen kann.
Die Wände als 3 Objekte machen, je nach Höhe und dann aus einer Textdatei lesen.
Code: GLBasic [Select]
# - Volle Wand
= - Wand mit Loch in Mitte
_ - niedrige Wand
Title: 3D Entity System
Post by: x-tra on 2007-Nov-13
Wie meinst du das, dass es ganz schön Performance kostet?
Kannst du das näher definieren?

Also ab welcher Spielgröße/Dimension könnte es ganz schön an den Recourcen ziehen?
Bzw. welche Hardware brauch man dann noch?

Ich hab hier als Onlinerechner nen Sempron AM2 3000+  512MB und NVidia 6100 OnBoard Grafik.
Title: 3D Entity System
Post by: pebisoft on 2007-Nov-26
Code: GLBasic [Select]
iMac
...und dann windows emulator dauf...ha...ha
Title: 3D Entity System
Post by: pebisoft on 2007-Nov-26
warum habt ihr euch eigentlich glbasic gekauft he.....

mit opengl ist es ein leichtes das alles was hier erfragt wird zu proggen.
die ganzen opengl/glu-befehle kann man mit glbasic ansprechen.

irgendwie wisst ihr nicht mit was ihr hier proggt und kennt die leistung von glbasic nicht.
ihr solltet erstmal ein opengltool lesen bevor diese unsinnigen fragen kommen.
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-26
@ pebisoft:
Wenn man keine Ahnung hat..., den rest kennst du ja bestimmt!?

Von dir kam noch NICHTS, du erinnerst mich an einen anderen User der hier ab und an mal vorbei spechtet, um schlau daher zu reden....
Und eins sag ich dir:

Wenn dir was nicht passt, dann kaufs dir ne Nummer größer! :D

Aber lass uns mit deinen sinnfreien Kommentaren bitte inruhe!
Title: 3D Entity System
Post by: Sebe on 2007-Nov-26
@Schranz0r: das war jetzt fies, ein Paar Seiten vorher fand Gernot meinen Collision Ansatz z.B. toll!

@pebisoft: glBASIC. B A S I C. Sagt dir was oder? Man sollte nicht das Redbook lesen müssen um GLBasic zu programmieren. Es soll das ganze Lowlevel zeug vor uns verbergen. Und wie bitte soll man ein Tool lesen? Ein Tool ist ein Werkzeug und kann höchstens benutzt werden...
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-26
Ach Sebe, war doch ein Joke ;)
Wir Bayern müssen zusammen halten :D


Der pebisoft fängt sich schon wieder, hatte wohl nen schlechten Tag  ???
Title: 3D Entity System
Post by: trucidare on 2007-Nov-26
Pebisoft hat sich gerade ein Grab geschaufelt mit seiner MacVerspottung.... *grummel*

Los fressen wir ihn !!!

//EDIT: 210 Posts. Das sind 200 mehr als in den sonsigen Foren zusammen ;)
Title: 3D Entity System
Post by: Schranz0r on 2007-Nov-26
Ach gleich auffressen?
Ich würde heute mal nur ausbuhn ;)

/me Buuuuuuuhhhhhhh an pebisoft  :D

Und sei mal wieder gut gelaunt bitte ^^
Title: 3D Entity System
Post by: x-tra on 2007-Dec-21
ich hab jetzt garnicht geschaut, aber pivot-befehle hat das entity system nicht, oder?

ich stell grad bei nem anderen projekt fest, dass die ganz nützlich sein könnten.
Title: 3D Entity System
Post by: Schranz0r on 2007-Dec-21
doch unter den namen Parent ! :)
Title: 3D Entity System
Post by: sechsrad on 2008-Mar-03
Quote
Dafür mach ich euch ein Entitysystem das eine 1:1 kopie von Blitz3D wird. Dannach verbesser' ich's wo ich mein.
hallo gernot, ist das entity-system beendet/fertig?
ist am anfang von diesem thema immer die aktuelle version zum laden?

mfg
Title: 3D Entity System
Post by: Kitty Hello on 2008-Mar-04
Oben ist immer die aktuellste Version. Ist das Fertig? Äh... Ich glaub' dass noch was gefehlt hat, bin mir aber nicht sicher. Wenn was fehlt, schrei ;)
Title: 3D Entity System
Post by: Schranz0r on 2008-Mar-04
Slide-collision ;)

*BRÜLL*

Ach und Sechsrad, bevor du die Frage stellst gleich mal vorweg:

Nein, es geht nicht sehr gut/ bis garnicht, auf dem GP2X!
Title: 3D Entity System
Post by: sechsrad on 2008-Mar-06
Quote
Nein, es geht nicht sehr gut/ bis garnicht, auf dem GP2X!
macht nichts, werde trotzdem die schiene :gp2x/windows weiterfahren.
werde bei 2d dann nur sprites benutzen und deren eigenschaften , die mit dem gp2x realisierbar sind.

ich habe mich im gp2x festgebissen. ist eine sucht auf so einem kleenen ding selbstgeschriebene programme laufen zu lassen.

mfg
Title: Re: 3D Entity System
Post by: Moru on 2008-May-21
[edit]
Neuester Code immer hier:
http://www.glbasic.com/beta/entity.rar (http://www.glbasic.com/beta/entity.rar)

Sorry to intrude here but is there any english version of this code? Sounds interesting with some easier way of handling objects and textures than doing everything by hand...
Title: Re: 3D Entity System
Post by: Kitty Hello on 2008-May-21
The source code is commetned in English.
You can open a new thread in the English forum if you like to.
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-May-21
You can post youre questions on that Thread no problem!
It's now for both languages ;)
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-06
So jungens ich probier mich jetzt an dem ES.
Erster Level is schonmal designed.
Und ich biete mich gern an, wenn Gernot sagt wie, dass ich dann sogar die Hilfe CHM editiere um alle Befehle die dann übernommen werden zu erläutern.
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-06
Wie?
So : http://abeetech.com/chmmakerpro/ ! :)
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-07
mmmm gibts sowas wie nen create pivot auch im entity system?

also damit man eine unsichtbare entität im raum hat.

sowas bräuchte ich nämlich noch.

okay ich kanns auch als untexturiertes objekt machen, aber so ein pivot ist glaub ich praktischer.
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-07
schau mal das an :

EntityParent
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-07
ja aber das bindet ja nur zwei entities aneinander als child und parent.

setzt aber zwei objekte voraus.

pivot wäre ein unsichtbares imaginäres virtuelles objekt.

dreh und angelpunkt eines real sichtbaren meshes im raum sozusagen.
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-07
Musst ja "nur" den Nullpunkt vom Objekt verschieben ...  :booze:

Frag mich net wie, hab ich noch net versucht!
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-07
siehste, da wäre doch ein pivot jetzt klasse, oder? lol


du hattest doch auch mal so eine .gbas, oder mit anderen befehlen drin.finds grad net, aber ich denk schon, dass du da was eigenes gemacht hast.
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-07
ja, da war mal irgendwie was, stimmt :)
Hab das aber nimmer drauf :/

Ich guck mal was ich machen kann!
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-07
stell dir vor ich will zwei objekte um einen nicht sichtbaren mittelpunkt drehen lassen.

dazu ist ein pivot sinnvoll, oder aber eben ein extra objekt was nicht sichtbar ist.

noch dazu eine parent frage, kann man das auf ein entity(pivot/mesh) mehrfach anwenden, ich bin noch nicht soweit, daher schonmal vorher die frage.

spätestens wenn ichs brauch find ichs raus.

gernot ist ja seit drei tagen offline, da gibts sicher viel zu beantworten für ihn.
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-07
Keine Ahnung was mit Gernot grad los ist ....  :S

Mit der Verschiebung des Nullpunktes muss ich noch gucken  :good:
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-07
na kann man nicht auch ein entitypivot machen?

sozusagen ein objekt, was nicht geladen ist, und nur als virtuelle instanz vorhanden ist, aber davon hab ich keinen plan.

Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-07
Das ist ein verschobener Nullpunkt, du gibst den Objekt einen neuen Orientierungspunkt.
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-07
und wenn ich das objekt dann noch gleichzeitig um die eigene achse drehen will!

Ich hoffe ich verstehe das mit dem nullpunkt richtig.

Außerdem wenn zwei objekte um einen pivot kreisen sollen, also um einen verschobenen nullpunkt..........


(nullpunkt ist der mittelpunkt eines objektes, oder?)


BB3D CreatePivot
Quote
Der Befehl CreatePivot erstellt einen Drehpunkt und liefert danach die Identität des Objekts zurück.

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.
Title: Re: 3D Entity System
Post by: BumbleBee on 2008-Jun-07
Ansonsten nimm halt derweil das 3D Zeugs das bei GLBasic dabei ist. :) Ich komm damit prima zurecht. :P

Cheers
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-07
das ist mir schon klar, aber ich will das Entity System voranbringen, da bei BB M.Silby schon wieder am werkeln ist, und das ES langsam aber sicher in glb reingehört.
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-07
Ja der Marc Silby schiesst sich mal wieder ein Eigentor.... Noch eine Engine, noch weniger support, noch mehr Ärger in den Foren!
Deshalb bin ich auch gegen eine weitere Unterstüzung von GLB mit Handhelds...
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-07
jaja der mark, naja egal back2topic.

ich habe mal was probiert:
Code: GLBasic [Select]
// ------------------------------------------ //
//! Return the pitch(x) angle of the entity
// \param entity - handle to the entity
// \return the pitch angle for that entity.
// ------------------------------------------ //
FUNCTION EntityPitch: Entity
    RETURN g3DObj[Entity].rx
ENDFUNCTION

// ------------------------------------------ //
//! Return the yaw(y) angle of the entity
// \param entity - handle to the entity
// \return the yaw angle for that entity.
// ------------------------------------------ //
FUNCTION EntityYaw: Entity
    RETURN g3DObj[Entity].ry
ENDFUNCTION

// ------------------------------------------ //
//! Return the roll(z) angle of the entity
// \param entity - handle to the entity
// \return the roll angle for that entity.
// ------------------------------------------ //
FUNCTION EntityRoll: Entity
    RETURN g3DObj[Entity].rz
ENDFUNCTION
 

müsste doch richtig sein, oder?

vielleicht find ich noch raus wie das mit dem pivot funktioniert.


und vielleicht so?

Code: GLBasic [Select]
FUNCTION CreatePivot:
LOCAL t AS T3DEntity
        t.what = 0
        RETURN EntityAddInternal(t)
ENDFUNCTION

und hey das funktioniert mit diesem, wenn auch unschönen code sogar.

Code: GLBasic [Select]
// --------------------------------- //
// Project: game
// Start: Thursday, June 05, 2008
// IDE Version: 5.254
//SETSCREEN 600, 600, 0
//LIMITFPS 60


camera=EntityCreateCamera()
EntityEnable(camera, TRUE)


light = EntityCreateCelShadingLight()
boden = EntityLoadMesh ("boden.ddd")
figur = EntityLoadMesh ("figur.ddd")

terrain_texture = EntityLoadTexture("world01.bmp")
EntityApplyTexture(boden, terrain_texture, EntityMakeNullTexture() )

EntityPosition(boden, 0, 0, 0)
EntityMove(boden, 0, -3.5, 0)
EntityPosition(figur, 0, 0, 0)
sc = 10
EntityScale(boden, sc,sc,sc)
EntityParent(camera, figur)
EntityPosition(camera, 0, 5, 100)
EntityRotate(camera, 0,90,0)
EntityParent(light, camera)
pivot = CreatePivot()
EntityParent(figur, pivot)
WHILE TRUE
        // Ship Control
        IF KEY(203)
                EntityRotate(pivot, 0, 5, 0)
        ENDIF

        IF KEY(205)
                EntityRotate(pivot, 0, -5, 0)
        ENDIF

        IF KEY(200) THEN EntityMove(pivot, 0, 0, -1)
        IF KEY(208) THEN EntityMove(pivot, 0, 0,  1)

EntityDrawSystem()
        SHOWSCREEN

WEND

 
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-07
hehe ne

Das musst du mit Push- und Popmatrix machen :)
Oder Matrizen multiplizieren
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-07
wegen dem pivot?


funktioniert aber...

nicht einwandfrei, aber der code geht.

weiß nicht ob das beim verschieben des pivots immer noch geht, aber hey, immerhin ein anfang.....

@gernot: keine ahnung ob mein code richtig war, kannst du mal schauen und pivots mit einbauen?bitte

so zum beispiel kann man ein pivot nutzen......die box(spielfigur) kann man frei animieren, bewegen, wie auch immer, die kamera folgt trotzdem einfach weiter.
mein pivot in diesem fall ist einfach eine kugel....
Code: GLBasic [Select]
sc = 10
camera=EntityCreateCamera()
light = EntityCreateCelShadingLight()
boden = EntityLoadMesh ("boden.ddd")
pivot = EntityLoadMesh ("figur.ddd")
box = EntityLoadMesh ("box1.ddd")
terrain_texture = EntityLoadTexture("world01.bmp")

EntityEnable(camera, TRUE)
EntityApplyTexture(boden, terrain_texture, EntityMakeNullTexture() )
EntityPosition(boden, 0, 0, 0)

EntityScale(boden, sc,sc,sc)
EntityScale(pivot, 20, 20, 20)
EntityScale(box, 2, 2, 2)

EntityPosition(camera, 0, 5, 100)
EntityRotate(camera, 0,90,0)
EntityParent(light, camera)
EntityPosition(pivot, 0, 20, 50)

EntityPosition(box, 0, 0, 50)
EntityParent(box, pivot)
EntityParent(camera, pivot)

WHILE TRUE
        // Ship Control
        IF KEY(203)

                EntityRotate(pivot, 0, 1, 0)
        ENDIF

        IF KEY(205)

                EntityRotate(pivot, 0, -1, 0)
        ENDIF

        IF KEY(200) THEN EntityMove(pivot, 0, 0, -1)
        IF KEY(208) THEN EntityMove(pivot, 0, 0,  1)

EntityDrawSystem()
        SHOWSCREEN

WEND


 

Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-08
Pivot's!

Sollte auch mit dem Entity laufen, hoffe ich :D


Code: GLBasic [Select]
GLOBAL OrigiMat[]
DIM OrigiMat[16]
DIMDATA OrigiMat[],1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1

SYSTEMPOINTER TRUE

TYPE Pivot
        ID = -1
        Mat[16]
        RotOn
        rx; ry; rz
ENDTYPE

GLOBAL Piv[] AS Pivot


TYPE Object
        ID = -1
        Mesh
        PivID = -1
        Mat[16]
        RotOn
        rx; ry; rz
ENDTYPE

GLOBAL Obj[] AS Object


CreateCube(1, 5, RGB(255, 255, 255))

LOCAL Piv1 = CreatePivot()

LOCAL Obj1 = CreateObjectOnPosition(1,10,0,0,Piv1)
LOCAL Obj2 = CreateObjectOnPosition(1,0,10,0,Piv1)
LOCAL Obj3 = CreateObjectOnPosition(1,-10,0,0,Piv1)
LOCAL Obj4 = CreateObjectOnPosition(1,0,-10,0,Piv1)


WHILE TRUE
LOCAL mx,my,b1,b2
MOUSESTATE mx, my, b1, b2

        X_MAKE3D 1,1000,45
        X_CAMERA 0,0,-80,       0,0,0
       
        X_AMBIENT_LT 1, RGB(255,0,0)
               
        X_SCREEN2WORLD mx, my, 0, wx, wy, wz
       
       
        SetPivotRotation(Piv1,0,0,2)
        SetObjectRotation(Obj1,2,0,0)
        SetObjectRotation(Obj2,0,2,0)
        SetObjectRotation(Obj3,-2,0,0)
        SetObjectRotation(Obj4,0,-2,0)
       
        SetPivotPosition(Piv1,wx*80,wy*80,0)
       
        IF b1
                SetObjectPosition(Obj1,15,0,0)
        ENDIF
        IF b2
                SetObjectPosition(Obj1,10,0,0)
        ENDIF
       
        Update()
SHOWSCREEN
WEND
END


FUNCTION CreatePivot:
LOCAL p AS Pivot
STATIC ID
       
        p.ID = ID
        p.Mat[] = OrigiMat[]
       
        DIMPUSH Piv[],p
       
        INC ID,1
        RETURN p.ID
ENDFUNCTION
 
FUNCTION CreateObjectOnPosition: ObjectID, x, y, z, PivotID
LOCAL o AS Object
STATIC ID
        o.ID = ID
        o.Mesh = ObjectID
        o.PivID = PivotID
       
        o.Mat[] = OrigiMat[]
        o.Mat[12] = x
        o.Mat[13] = y
        o.Mat[14] = z
        INC ID,1
        DIMPUSH Obj[],o
        RETURN o.ID
ENDFUNCTION

FUNCTION SetObjectPosition: ObjectID, x, y, z

        Obj[ObjectID].Mat[12] = x
        Obj[ObjectID].Mat[13] = y
        Obj[ObjectID].Mat[14] = z
       
ENDFUNCTION

FUNCTION SetPivotPosition: PivID, x, y, z

        Piv[PivID].Mat[12] = x
        Piv[PivID].Mat[13] = y
        Piv[PivID].Mat[14] = z
       
ENDFUNCTION

FUNCTION SetObjectRotation: ObjectID, x, y, z
        FOREACH i IN Obj[]
                IF i.ID = ObjectID
                        i.RotOn = TRUE
                       
                        IF i.rx > 359 THEN i.rx = 0
                        IF i.ry > 359 THEN i.ry = 0
                        IF i.rz > 359 THEN i.rz = 0
                        IF i.rx < 0 THEN i.rx = 359
                        IF i.ry < 0 THEN i.ry = 359
                        IF i.rz < 0 THEN i.rz = 359
                       
                        INC i.rx, x
                        INC i.ry, y
                        INC i.rz, z
                       
                ENDIF
        NEXT
ENDFUNCTION

FUNCTION SetPivotRotation: PivID, x, y, z
        FOREACH i IN Piv[]
                IF i.ID = PivID
                        i.RotOn = TRUE
                       
                        IF i.rx > 359 THEN i.rx = 0
                        IF i.ry > 359 THEN i.ry = 0
                        IF i.rz > 359 THEN i.rz = 0
                        IF i.rx < 0 THEN i.rx = 359
                        IF i.ry < 0 THEN i.ry = 359
                        IF i.rz < 0 THEN i.rz = 359            
                       
                        INC i.rx, x
                        INC i.ry, y
                        INC i.rz, z
                ENDIF
        NEXT
ENDFUNCTION
       
FUNCTION Update:

        FOREACH i IN Obj[]

               
                               
                        X_MOVEMENT Piv[i.PivID].Mat[12], Piv[i.PivID].Mat[13], Piv[i.PivID].Mat[14]    
                       
                          IF Piv[i.PivID].RotOn = TRUE
                                  IF Piv[i.PivID].rx > 0
                                        X_ROTATION Piv[i.PivID].rx,1, 0, 0
                                  ENDIF
                                  IF Piv[i.PivID].ry > 0
                                        X_ROTATION Piv[i.PivID].ry,0, 1, 0
                                  ENDIF
                                  IF Piv[i.PivID].rz > 0
                                        X_ROTATION Piv[i.PivID].rz, 0, 0, 1
                                  ENDIF
                              ENDIF    
                                         
                        X_PUSHMATRIX
                          X_MOVEMENT i.Mat[12], i.Mat[13], i.Mat[14]
                          IF i.RotOn = TRUE
                                  IF i.rx > 0
                                        X_ROTATION i.rx,1, 0, 0
                                  ENDIF
                                  IF i.ry > 0
                                        X_ROTATION i.ry,0, 1, 0
                                  ENDIF
                                  IF i.rz > 0
                                        X_ROTATION i.rz, 0, 0, 1
                                  ENDIF
                              ENDIF
                          X_DRAWOBJ i.Mesh, 0
                    X_POPMATRIX
               
        NEXT
ENDFUNCTION

FUNCTION CreateCube: num, sz, col
        // Diese Variablen sind als LOCAL definiert:
        // num, sz,
        X_AUTONORMALS 1 // For a cube, hard edges
        sz=sz/2
        X_OBJSTART num
                // Front Face
                X_OBJADDVERTEX  sz, -sz,  sz, 1, 0, col
                X_OBJADDVERTEX -sz, -sz,  sz, 0, 0, col
                X_OBJADDVERTEX  sz,  sz,  sz, 1, 1, col
                X_OBJADDVERTEX -sz,  sz,  sz, 0, 1, col
                X_OBJNEWGROUP
                // Back Face
                X_OBJADDVERTEX -sz,  sz, -sz, 1, 1, col
                X_OBJADDVERTEX -sz, -sz, -sz, 1, 0, col
                X_OBJADDVERTEX  sz,  sz, -sz, 0, 1, col
                X_OBJADDVERTEX  sz, -sz, -sz, 0, 0, col
                X_OBJNEWGROUP
                // Top Face
                X_OBJADDVERTEX -sz,  sz,  sz, 0, 0, col
                X_OBJADDVERTEX -sz,  sz, -sz, 0, 1, col
                X_OBJADDVERTEX  sz,  sz,  sz, 1, 0, col
                X_OBJADDVERTEX  sz,  sz, -sz, 1, 1, col
                X_OBJNEWGROUP
                // Bottom Face
                X_OBJADDVERTEX  sz, -sz, -sz, 0, 1, col
                X_OBJADDVERTEX -sz, -sz, -sz, 1, 1, col
                X_OBJADDVERTEX  sz, -sz,  sz, 0, 0, col
                X_OBJADDVERTEX -sz, -sz,  sz, 1, 0, col
                X_OBJNEWGROUP
                // Right face
                X_OBJADDVERTEX  sz,  sz, -sz, 1, 1, col
                X_OBJADDVERTEX  sz, -sz, -sz, 1, 0, col
                X_OBJADDVERTEX  sz,  sz,  sz, 0, 1, col
                X_OBJADDVERTEX  sz, -sz,  sz, 0, 0, col
                X_OBJNEWGROUP
                // Left Face
                X_OBJADDVERTEX -sz, -sz,  sz, 1, 0, col
                X_OBJADDVERTEX -sz, -sz, -sz, 0, 0, col
                X_OBJADDVERTEX -sz,  sz,  sz, 1, 1, col
                X_OBJADDVERTEX -sz,  sz, -sz, 0, 1, col
                X_OBJNEWGROUP
        X_OBJEND

ENDFUNCTION // sz

 


Erklärung:

Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-08
damit kann ich grad nicht wirklich viel anfangen....

ich hab im letzten teil die funktionen mal an das ES angehangen, aber die pivots beziehen sich ja nicht auf das ES.

mmmm was kann ich tun, um es komplett in das aktuelle ES von der ersten threadseite einzubauen?

und es kollidiert glaube ich bei  CreateObjectOnPosition

achja, die einzelnen befehle bzw. funktionen, nicht alle sind mir klar, wozu die gut sind....

is schon spät heut.


[edit] ein createpivot, wo man in klammern bei bedarf dieses pivot gleich zuordnen kann(net so wichtig) wäre schon ausreichend.nur muss man es eben auch normal als entity ansprechen können.

Kannst du mir so eine createpivotfunktion für das ES machen, also ein createpivot, welches als entity angesprochen werden kann, wäre super.wäre dann eben keine ID, sondern das handle, oder?und würde mit entityaddinternal(oder so) hinzugefügt.

da könnt ich heut noch bisschen weitermachen.
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-08
Kannste doch jetzt schön umbauen, für das ES :)
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-08
Code: GLBasic [Select]
FUNCTION CreatePivot: x, y, z
LOCAL t AS T3DEntity
       
       
        p.Mat[] = OrigiMat[]
       
        DIMPUSH Piv[],p
       
       
        RETURN EntityAddInternal(t)
ENDFUNCTION
 

soweit hab ichs, aber ich kenn mich mit dem rest da nicht aus......

t.what = .ddd/camera/light   muss ja auch irgendwie rein.


ich bekomms net hin, ich hab es via

Code: GLBasic [Select]
FOREACH o IN g3DObj[]
                IF o.what=3
                 
                 
                  X_PUSHMATRIX
                                X_MULTMATRIX o.Mg[]
                                X_POPMATRIX
                ENDIF
                NEXT

und
Code: GLBasic [Select]
FUNCTION CreatePivot:
LOCAL t AS T3DEntity
     t.what = 3
        RETURN EntityAddInternal(t)
ENDFUNCTION
 

versucht, hab nen pivot erhalten, der sich nicht verschieben läßt und völlig falsche objekte bewegen läßt.
ich raffs net
Title: Re: 3D Entity System
Post by: Kitty Hello on 2008-Jun-08
Nein, die Hilfe mach ich anders. Eine Text-Datei reicht mir dazu.
Aber, bitte erstmal testen und damit arbeiten.
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-08
Kannst du das System um Pivots erweitern, ich bräuchte die dringend.
So mit positionierung einer jeden pivotentität auf 0,0,0 vielleicht mit objektzuweisung bei bedarf(oder später als parent, und so halt).

oder eben nur ein createpivot auf 0,0,0 und man kann dies dann normal als entity ansprechen.

wäre supercool...
Title: Re: 3D Entity System
Post by: BumbleBee on 2008-Jun-08
Wenn ich mal was damit machen sollte, dann weiß ich ja wen ich dann fragen kann. :)
 :offtopic:
Was machst du denn eigentlich für ein Spiel wenn du dich schon so fleißig damit befasst? Bin neugierig. :)

Cheers
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-08
ein knuffiges Jump´n Run solls werden, a´la Rayman oder so.

 :offtopic: wenn ich auch mal helfen kann, natürlich gern, sonst frage ich ja nur. :rolleyes:

Pivot: Pivot, ist ein Punkt(Vektor?!?) im 3D Raum.
        Sein körper hat keine ausweitung,
        Aber eine Position und eine Ausrichtung.
        Ein Pivot, ist ein Hilfspunkt.
Title: Re: 3D Entity System
Post by: Kitty Hello on 2008-Jun-08
In diesem Fall ist der Pivot ein "Referenzpunkt", also ein relativer Drehpunkt des Objekts.
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-08
Genau das Gernot

In der Matrix kann man den Origin ja nicht verschieben oder, dass der Drehpunkt ausserhalb der Mitte liegt, wenn man das Model so gebastelt hat, dass der Origin im mittelpunkt liegt?
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-08
ich weiß nicht, ob ich da was falsch verstehe, aber wenn ich den origin verschiebe, kann ich ja das objekt nicht mehr um die eigene achse drehen.

createpivot()   oder createentity()   oder wie auch immer, ein pivot.ddd kugelmodell mit 1,1,1 größe standard laden, und eben durchsichtig müsste es sein.

ich hab das mit einer blauen kugel gemacht, funktionierte.

im prinzip ist es ja nur ein weiteres objekt nur eben unsichtbar.

ansonsten wie jedes andere entity zu handhaben......

müsste doch funktionieren, oder?
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-08
du wiederholst dich immer Heiko :)
Sag ja warte ab ich/Gernot mach das dann schon.
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-08
ich weiß, bin ungeduldig....... ;/

is halt sonntag heut, is langweilig..........sry




[edit] wie kann man im ES eigentlich den alphamode für ein entity setzen, hab doch da was von t.alpha gelesen gestern.

        eine idee hab ich noch, man kann doch eine funktion entitycreatepivot erstellen mit x_dot und irgendwie muss man das doch unsichtbar hinkriegen, da      würde ja schonmal helfen, oder?
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-08
Wie bist du den drauf.... :noggin:

Jetzt haste es schon zum 5 Mal gesagt  :S
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-08
einfach zuviel kaffee.................................... 3. Kanne heut.

hab mit ac3d nen poly aus zwei punkten gemacht, gespeichert, und nutz das als pivot, mal schauen, besser als nix.


ich werd den ersten level heut nacht mit cobra3d coden und später dann die syntax umschreiben, wenn ich meinen pivot hier hab.lol

da kann ich wenigstens schon testen....
Title: Re: 3D Entity System
Post by: Schranz0r on 2008-Jun-08
Tip von mir:

Lass den Kaffee weg... wenn ich ehrlich bin, ich hab auf besoffen getippt  ;/ :booze:
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-08
Nöööö, aber schau mal an meinen posts wieviel ich letzte nacht geschlafen hab.....

Ich probier schon die ganze Zeit und dann der Kaffee dazu, da wäre mir besoffen lieber.
Title: Re: 3D Entity System
Post by: BumbleBee on 2008-Jun-08
Quote from: Heiko
  ein knuffiges Jump´n Run solls werden, a´la Rayman oder so.

Das klingt schon mal super. :good:

Quote from: Heiko
und dann der Kaffee dazu, da wäre mir besoffen lieber.

Tu halt was hochprozentiges in den Kaffee rein sonst hast du mich bald eingeholt mit posts.  :booze:  Also ich persönlich trink lieber nix alkoholisches mehr vorm PC. Einmal reicht.  =D

Cheers
Title: Re: 3D Entity System
Post by: Kitty Hello on 2008-Jun-10
Update: EntityCreatePivot als neuer Befehl.
Title: Re: 3D Entity System
Post by: Moru on 2008-Jun-10
Is this the final version of the entity system or is anyone working to expand this? I'm not totaly sure I understood all the german text about entity systems :-)
Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-12
Ich hab einen neuen Befehl erstellt

EntityPointTo(startentity, targetentity)

Die Anweisung EntityPointTo dreht ein Quell-Objekt so, dass es danach direkt auf ein Ziel-Objekt zeigt. Bei der Drehung werden nur die Pitch- und Yaw-Winkel geändert. Roll-Winkel wird nicht geändert.wäre aber optional sicher denkbar.

Funktioniert glaube ich noch nicht richtig, lasse mir da aber gern helfen.

Ja, dreht sich irgendwie immer um Z-Achse, so wie ich es sehe.

Dreht sich und dreht sich und dreht sich.

Naja Gernot oder Schranz0r sind ja die Genies hier.

Also ich versteh das jetzt nicht, das klappt nicht mit der rotation.
daher hier mal gepackt für euch, is aber nix dolles nur zum probieren.
ich seh nicht, wo der fehler liegt, hab schon alles probiert.

Es hat definitiv etwas mit
Code: GLBasic [Select]
EntityUpdateMatrix(g3DObj[handle], FALSE)

zu tun, denn bei diesem aufruf kommt der fehler.

Hab mir die winkel noch mit print anzeigen lassen, die können auch nicht stimmen, ist irgendwie der wurm drin.

Gernot, wenn du ein paar minuten zeit hast......büdde

weil so langsam steig ich dahinter, so langsam.

http://www.zshare.net/download/134760628b87db91/

Könnt ihr mir helfen, ich weiß wie matrizen wärs sicher besser und schneller, aber dafür reicht es "noch" nicht aus.

Code: GLBasic [Select]
FUNCTION EntityPointTo: handle, target
LOCAL hx,hy,hz,tx,ty,tz,xangle,yangle

    hx = g3DObj[handle].x    //
    hy = g3DObj[handle].y    // Koordinaten Start Entity
    hz = g3DObj[handle].z    //

    tx = g3DObj[target].x    //
    ty = g3DObj[target].y    // Koordinaten Ziel Entity
    tz = g3DObj[target].z    //

    xangle = MOD((ATAN( (ty-hy),  SQR((tx-hx)*(tx-hx) + (tz-hz)*(tz-hz) ) )+360),360)
    yangle = MOD((ATAN(tz-hz, tx-hx)+360),360)  
   
    EntityRotate(handle, xangle, yangle, 0 )
ENDFUNCTION

 

oder so

Code: GLBasic [Select]
FUNCTION EntityPointTo: handle, target
LOCAL hx,hy,hz,tx,ty,tz,xangle,yangle

    hx = g3DObj[handle].x    //
    hy = g3DObj[handle].y    // Koordinaten Start Entity
    hz = g3DObj[handle].z    //

    tx = g3DObj[target].x    //
    ty = g3DObj[target].y    // Koordinaten Ziel Entity
    tz = g3DObj[target].z    //

    xangle = MOD((ATAN( (ty-hy),  SQR((tx-hx)*(tx-hx) + (tz-hz)*(tz-hz) ) )+360),360)
    yangle = MOD((ATAN(tz-hz, tx-hx)+360),360)

    INC g3DObj[handle].rx,xangle
    INC g3DObj[handle].ry,yangle
    //INC g3DObj[handle].rz,0
   
   
    EntityUpdateMatrix(g3DObj[handle], FALSE)
ENDFUNCTION

Man kann das ganze natürlich ohne den ganzen variablen schreiben, aber der Übersicht halber....


[edit] ich konnte nicht schlafen, daher nochmal neuer code, diesmal ganz simpel, müsste eigentlich zeigen, dass die funktion richtig ist, aber geht trotzdem nicht, was mach ich bloss falsch?

Code: GLBasic [Select]
FUNCTION EntityPointTo: handle, target
LOCAL x,y,z,xdiff,ydiff,zdiff,xangle,yangle,dist

    x = EntityGetX(target)    //
    y = EntityGetY(target)    // Koordinaten target Entity
    z = EntityGetZ(target)   //

    xdiff = EntityGetX(handle)-x //
    ydiff = EntityGetY(handle)-y // Entfernungen
    zdiff = EntityGetZ(handle)-z //
   
    dist=SQR((xdiff*xdiff)+(zdiff*zdiff))
    xangle=MOD((ATAN(ydiff,dist)+360),360)
    yangle=MOD((ATAN(xdiff,-zdiff)+360),360)
   
    EntityRotate(handle, xangle, yangle, 0)
   
ENDFUNCTION


EntityRotate() bzw. deren unterbau ist glaub ich dafür verantwortlich.Ich hab den eindruck, da haut was nicht hin.Bitte schau mal, wollte es nicht extra unter Fehlermelder posten, da ich nicht weiß, obs das auch ist, aber Schranz0r hatte ja damit auch schon seine Probleme.

Ich hab den fehler glaub ich gefunden, ich überleg mir was, denn es liegt an EntityRotate, dieser Befehl muss abgeändert werden, ich lass mir was einfallen.

weil es von winkelrotationen mehrere varianten gibt, d.h. rotation wie es jetzt ist, winkel um xyz erhöhen, dann entity absolut auf einen winkel setzen(wichtig) und beides noch entweder parentabhänig, falls parent vorhanden, sowie global, also winkel zur 3D Welt.


Wichtig

Ich habe mir jetzt Gedanken gemacht zu dem Befehl, und würde mich freuen, wenn Du ihn abändern könntest.

EntityAlign(entity, x, y, z, [0 or 1])      zur Erklärung.     Dieser Befehl soll die Winkel xyz einfach setzen, egal wie der Winkel vorher war.
                                                                              Keine Abhängigkeit zum vorherigen Winkel mehr.
                                                                               Und entweder optional oder fest, ob bei vorhandenem parent, es sich entity um parent
                                                                              drehen soll.

EntityRotate(entity, x, y, z  [0 or 1])                    zur Erklärung      das gleiche wie rotate, nur relativ zum wert des vorherigen winkels

so langsam seh ich ja selber nicht mehr durch.

da ich das nicht wirklich gut erklären kann, verzeih, wenn ich hier zwei links poste, du kannst sie ja hinterher entfernen.

http://www.blitzforum.de/help/RotateEntity
http://www.blitzforum.de/help/TurnEntity


So, ich mach erstmal Pause hier, ich bekomm schon graue Haare.

Gewünschte Befehle wären noch:

EntityGetYaw  Winkel einer Entity
EntityGetPitch  Winkel einer Entity
EntityGetRoll   Winkel einer Entity

Befehle für Winkel 2 Entities zueinander.

Rotate sowie Turn eventuell schauen ob alles geht, und die camera scheint nicht richtig gedreht zu sein bei erstellung.
Fehler bei Winkelberechnung.

Ein EntityPointTo würde ich noch brauchen, was die frontseite einer Entity zu der Position eines anderen Entity ausrichtet.

Wenn das alles möglich ist, mach ich mein Spiel vom Code her weiter, im Moment macht das keinen Spass, leider.

Title: Re: 3D Entity System
Post by: x-tra on 2008-Jun-16
@gernot, hab Dir eine PN geschickt, hoffe sie stößt auf Anklang bei Dir.
Title: Re: 3D Entity System
Post by: Kitty Hello on 2008-Jun-17
Update V0.8.0
- EntiyGetYaw/Roll/pitch gibt's jetzt. Interne Mathematik ist neu, dadurch schneller und sauberererererer Code.

- Ich habe ein Blitz3D Beispiel 1:1 umgeschrieben, zum Zeigen dass es geht.. Tut's. Aber penGL hat ein Rechte-Hand-System und DriectX/Blitz3D ein Linke-Hand-System. Darum wird alles evtl spiegelverkehrt sein.

2 Sache fehlen noch: Bessere Kollisionsprüfung und EntityPointTo Befehl (der ziemlich biestig ist, wenn man Parents hat) fehlen.


Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-17
Great, but one question.

EntityGetPitch/Yaw/Roll  angeles relative to a parent(if any).

If no parent for the entity the return is the own local angels? right?

To the problem with EntityPointTo my idea is if a parent connection exists open this connection set angles and then connect parent and child together.

but is only an idea.

[edit]  EntitySetCameraRange
         EntitySetAlpha(entity, alpha)   set alpha range of transparence


some vertex commands like "VertexNX# ( surface,index )" like bb3d.  usual for my loader.

okay perhaps you look on it and some commands from bb3d.
thats all at this time.

big big thanks


Noch etwas eine andere Frage.
Wie schaut es bei dem Texturieren aus.
Eine normaltextur ist klar, aber man kann ja multitexturing machen.
Wie verhält es sich dabei?
Is die zweite Textur nur eine Bump, oder kann ich da auch mehr mit machen, also auch eine detailmap oder lightmap einfügen.
Sind ja soweit ich weiß, unterschiedliche Texturen, oder muss ich dann einfach das entityapplytexture mehrmals ausführen um die verschiedenen texturen übereinander zu legen.
Und werden die unterschiedlichen texturen auch als solche erkannt.
Achja, und der Zusammenhang mit
entitycreatebumplight ist mir noch etwas schleierhaft, ich denke also wenn ich überall als multitextur eine bumpmap oder sonstwas nehme, wird durch das licht alles gebumped sozusagen.seperate geschichten sind da wohl eher wenig möglich, oder?

wie hat man das am besten zu handhaben?
ein kleines beispiel wäre nett.

Fragen über Fragen.....
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-18
Hmm... Da müsste man angeben, das ein Entity den Bump-Effekt hat, oder? K.A. Wie machen die anderen das?
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-18
Naja, wie funktioniert es denn zur Zeit?
Also was machen die entitycreatebumplight cel usw. befehle?
Und was für eine textur nimmt man denn als 2. multitextur?

wie das woanders gehandhabt wird, schau ich dann gleich mal.siehe hier: http://www.blitzforum.de/help/TextureBlend (http://www.blitzforum.de/help/TextureBlend) und hier http://www.blitzforum.de/help/LoadAnimTexture (http://www.blitzforum.de/help/LoadAnimTexture) und hier zum licht http://www.blitzforum.de/help/?subcat=69 (http://www.blitzforum.de/help/?subcat=69)

ich hab da mal die links gesetzt, weil ich nicht weiß, wie du was kombinieren willst. Hoffe das ist okay so, ansonsten schick ich sowas per PN.

Gernot, ich hab dir mal ein pdf geschickt, das sollte doch ein wenig helfen.

Zum Thema "EntityPointTo"  einfach ein entitysetrotation, dann wäre blickrichtung vom parent aus gesehen.aber da das entity das child wäre, dürfte es ja kein problem sein.p.s. wenn ein entity child von etwas ist, kann es sich ja drehen wohin es will.nur wenn parent rotiert, dann gibts ein entityrotation fürs child.
wenn ich entitysetrotation jetzt richtig verstanden habe...? setzt den drehwinkel eines entities auf einen bestimmten winkel.richtig, oder hab ich das falsch verstanden?

p.p.s.s. bei deinem beispiel test2 hab ich mir die winkel angeschaut, da gibts zwei, die nur entweder 0 oder 180 grad sind, ist das korrekt so?kam mir komisch vor, habs aber nicht weiter angeschaut.

achja, bei deinem entitysetrotate wird doch ein winkel bzw. eine rotation festgelegt, die immer um den nullpunkt des globalen koordinatensystem hat, oder?  eulerscher winkel! wenn ja, dann fehlt noch die rotation auf einen festen expliziten winkel lokal, also wie entityrotate, nur eben winkel unabhängig vom vorherigen.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-18
EntitySetRotation setzt die winkel relativ zum Parent. Ganz global hab ich's noch nicht drin.
Da müsste man die Rotation des Parents invers multiplizieren vorher.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-19
Ich hab jetzt mal bei verschiedenen enginen geschaut, ausser bei bb3d und cobra auch noch bei diversen entity systemen anderer engines.

so langsam verliere ich den überblick.

vielleicht wäre es tatsächlich am einfachsten, entweder a)  diese befehle mit dem optionalen global oder relativ paramter zu versehen und dieser muss ja nicht optional sein, kann man ja als 0 oder 1 festlegen, oder false und true
                                                                oder b) seperate befehle für global und relativ

auf jeden fall leistet die hilfe von bb3d auf deren deutscher seite eine gute hilfe, hoffe du bekommst das irgendwie hin, ich kanns leider nicht

fehlen ja nicht mehr viel sachen, freu mich schon tierisch drauf.

wenn ich ein child, obwohl es vom parent abhängig ist, um die eigene achse drehen will.

meinst du das?

oder was meinst du mit globaler rotation. ansonsten pivot bei 0,0,0 und alles drumherum drehen.


Ganz wichtig: such mal in der pdf die ich dir eben geschickt hatte, nach
Code: GLBasic [Select]
RotateEntity
und
Code: GLBasic [Select]
EntityPit
,
Code: GLBasic [Select]
EntityYaw
,
Code: GLBasic [Select]
EntityRoll
.

Du kannst da sicher mehr damit anfangen, weils glaub ich schon wieder um matrizen geht bei der globalen geschichte.

schaus dir mal an, ich werd da nicht so richtig schlau draus.Naja beschäftige mich mit matrizen auch erst seit kurzem.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-19
Nundenn gernot, hab bisschen gebastelt, und ich weiß nicht, mit dem licht gibts wohl probleme, aber sieh selbst.

okay die steuerung ist M und N links rechts, und linke cursortaste ist vorwärst, frag nicht warum, egal.

jedenfalls createbumplight, sher eigenartiger effekt auf dem gelben ring, aber bei dem normalen licht, wird der level total grobpixelig.

seht selbst, nicht über code wundern, hab nur schnell zusammengebastelt, zum zeigen.

http://www.zshare.net/download/1387598705adcdf0/

eine normale ausleuchtung hätt ich gern, oder mach was falsch?

und nicht grobpixelig....

[edit] achso, hab einfach alle lichter weggelassen. aber wozu sind die lichter dann da? weil sie verändern ja die ganze szene, und welcher zusammenhang besteht da nun zwischen multitexturing?


[wichtig] @gernot: ich hab dir ja jetzt ungefähr geschildert, was noch für befehle fehlen, aber ich benötige nun noch effekte, die mit glb im moment nicht möglich sind, und mir das wissen fehlt, um diese eigenschaften selbst anzufügen.Ich bin ja nun für meine Hartnäckigkeit hier bekannt, aber ich weiß auch, dass das ganze Entity System nicht ganz so leicht zu programmieren ist.
Man müsste die komplette Funktionalität von BB3D wenn auch mit anderen Befehlsnamen in GLB haben.
Warum das Rad neu erfinden?
Es zieht sich ja nun schon eine Weile hin, und ich will auch nicht weiter drängeln, daher lege ich es nun in Deine Hand, ob du das Entity System einführst.Und in welcher Form.
Ich werde zur Stelle sein, wenn alle Befehle, die die gleiche Funktionalität wie in BB3D gewährleisten, vorhanden sind.
Es muss nicht gleich implementiert sein, so eine .gbas reicht erstmal völlig.
Bis dahin werde ich mich ein wenig zurückhalten und mein Spiel in C3D weitercoden, da dies wesentlich einfacher zu handhaben ist, was diese meine Problematik anbelangt.Ich weiß, ich hab jetzt so genervt, aber wenn ich der Einzige bin, der hier das Ganze vertritt, hat so wenig Sinn.Ich habe ja schon den Vorschlag gemacht, die kompletten Befehle zu übernehmen, da diese funktionieren.der minib3d mod quelltext für BM, sollte dir eine Hilfe sein.Vielleicht schaffst Du es ja doch noch das ES zu etablieren, dann werde ich da sein, und testen.
Bis dahin verabschiede ich mich von hier erstmal auf unbestimmte Zeit.Vielen Dank trotzdem für Deine Mühen bisher.(p.s. c3d basiert ebenso auf opengl, und die features dort, sind, entschuldige, eine klasse für sich.auch wenns konkurrenz ist, so hätte man es als motivation und hilfe sehen können.ich weiß, du hast mir geschrieben, du willst cobra3d nicht nachprogrammieren, aber letztendlich führt die erstellung einer so komplexen programmiersprache doch immer in eine richtung.und glb ist ohne ES einfach nicht anfängerfreundlich, für die die es können, mag es gehen, aber alle anderen suchen sich was leichteres, gerade in 3D)
Haltet mich auf dem laufenden, ich schau trotzdem ab und zu rein, ob es hier in diesem thread in ein paar wochen, monaten, oder jahren soweit sein wird, dass das ES steht)Ich will später zu linux entgültig wechseln, und da steht meine wahl zwischen BM und GLB, ich würde allein wegen der community hier schon GLB bevorzugen, aber BM mit mods bietet einfach im moment viel mehr)Ich hoffe ihr bekommt das ES hin, bin ja nicht nur ich, dem es gefallen würde, nur leider programmieren zu wenige in 3D wie es aussieht)
Ich sitz hier auf nen haufen leveln, und will die auch einsetzen...sorry gernot.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-20
Du machst ein Bump-Light. Dann musst Du auch eine Bump-Textur für alle Objekte angeben.

Ich schau mal wie die anderen das machen, dass man bump mapping nur für bestimmte Objekte hat.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-20
genau das ist es ja.ALLE Objekte, das ist ja nirgends erwünscht.

Kann ich dir nicht einfach eine Liste mit allen Befehlen geben, die das ES haben soll, mit Erläuterung dazu, und du baust es einfach?

Dann mach ich hier weiter......

(wie gesagt, ich würd sogar was dafür zahlen, nur will ich an diesem WE ein Stück fertig werden mit meinem Spiel)

also wenn du dir mal die cobra referenz angesehen hättest, wüßtest du das es bei den lights sowas garnicht gibt, dafür andere effekte.
schaus dir dochmal an.....
ich mein du kannst immer noch sagen, du willst es so nicht machen, aber ideen kannst du dir dort holen, auf jeden fall.
achja, ich weiß nicht, ob das am ES liegt, aber ich muss bei c3d die geschwindigkeit mittels deltatimer begrenzen, weil allein moveentity rast dort um ein vielfaches schneller, aber das nur am rande.es basiert ebenso auf opengl, also müsste all das auch hier möglich sein.

wie gesagt, macht das ES fertig, ich hab gesagt, was ich gern hätte, übersetz doch die Tentity.bm die ich dir geschickt habe, und ich und so einige andere wären glücklich. effekte kann man auch noch beifügen, entsprechend eine komplette liste würde ich machen, die sollte aber dann auch umgesetzt werden.
ich habe keine lust immer ein stückchen zu programmieren, und dann paar tage zu warten, ob nun was kommt oder nicht.

die befehle müssen komplett dasein, man kann da ja nix mischen, das ES muss vollständig sein, am besten noch mit effekten, infos und so.

ich biete dir, gernot, hier nochmal an, eine befehlsliste mit erläuterung zu schreiben, die dann so nachgebaut werden sollte.

dann kanns weitergehen...

[ed] ich will mal nicht so sein, ein auszug aus der c3d hilfe.damit sollte das klar sein, dass bumpmapping IMMER objektbezogen ist, unabhängig von irgendeinem licht.Weil bumpmapping besagt, dass eine extra graue(verschiedene grautöne ähnlich heighmap) textur diesen bum effekt erzeugt.Wenn ich eine apfelsine habe, ist die oberfläche so bumpig halt, der tisch auf dem sie liegt jedoch nicht.
daraus schlußfolgern wir, dass bumpmapping ein effekt, das ein objekt mit einer bumpmap überzogen sein muss, und unabhängig der lichtquelle diesen Effekt erzeugt.Weißt wie ichs mein.Ich helf gern weiter, aber ich muss nicht jeden befehl erklären.wenn du die befehle, samt beispiele siehst, ist es selbsterklärend.was sagst du gernot.

CreateBumpMap(( filename:string):entity)

Code: GLBasic [Select]
 MAT = CreateBumpMap(&#39;media\bumptest2.png&#39;)
  mat2 = CreateTextureMaterial(&#39;cols&#39;,&#39;media\marbletiles.jpg&#39;)
 
  shader =CreateShader(c3d_shaderBasicBump)
  MatSetTexture2(mat,mat2)
  MatUseShader(mat,shader)
 
  mesh = CreateCube()
  ScaleEntity (mesh,3,3,3)
  EntityUseMaterial(mesh,mat)
  SetCameraTarget(camera,mesh)
 

Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-20
Ich mach dir ein angebot, damit wir hier mal vorankommen.
Was müsste ich zahlen, damit du dir den gesamten 3d teil von bb3d oder besser noch c3d vornimmst, und komplett, aber wirklich komplett übersetzt für glb?

Das meine ich Ernst, wenn es natürlich am anfang noch bugs hat, kein thema, aber ich denke alle befehle lassen sich testen.
Du kannst natürlich sagen, dass du das nicht nachmachen willst, oder so, aber jeden Befehl einzeln zu wünschen, wenn er gerade benötigt wird, ist keine Option längerfristig, man kann da nix planen im quellcode.

Überlegs dir, ich bin bereit gern Geld dafür auszugeben, aber nur wenn du willst natürlich.
Was sagst Du dazu.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-20
Ah! Die machen's über material. Auch net dumm.
Ich hab jetzt mal bump/cel usw. pro Objekt eingebaut. Schatten auch optional.
Mein Problem ist die EntityAlign funktion. Muss ich noch grübeln.

OK,
(http://img76.imageshack.us/img76/9941/unbenanntpaint244ip2.th.png) (http://img76.imageshack.us/my.php?image=unbenanntpaint244ip2.png)
update online.

PS: bin im chat.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-20
zum thema blickrichtung.

Code: GLBasic [Select]
Lokale Blickachse ist immer Z, X ist nach rechts, Y nach oben.

Lokal heisst aus sicht des objektes in seinem eigenen koordinaten system.
Im globalen Koordinaten system ist es auch einfach rauszufinden. Einfach mit TFormVector die Vektoren 1,0,0 und 0,0,1 von Camera nach 0 transformieren und du weisst anhand von TFormedX - TFormedZ in welche richtung du schaust.

Also die TForm sachen wären also auch noch eine idee.

In welche Richtung schauen wir?lokal gesehen?

Ist doch auch Z.

Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-20
EntityPickLine  Rückgabewert "index"

ist ja eine zahl, oder?

aber ich brauch ja eine entität, und keine durchnummerierung.

probiere grad mit entitypick rum, aber ich muss den rückgabewert ja irgendwie mit den entities abgleichen können.

hab einfach mal entitypick mit print versucht ausgeben zu lassen, geht irgendwie nicht.

und nimm mal das hier als test
Code: GLBasic [Select]
// --------------------------------- //
// Project: ent1
// Start: Friday, June 20, 2008
// IDE Version: 5.299


// --------------------------------- //
// Project: entpick1
// Start: Friday, June 20, 2008
// IDE Version: 5.299

camera=EntityCreateCamera()
EntityEnable(camera, TRUE)
cube = EntityCreateCube (10)
haupt = EntityCreateCube (20)
piv = EntityCreatePivot()
EntitySetPosition(piv, 0, 0, 0)
EntitySetPosition(camera, 0, 0, -100)
EntitySetPosition(haupt, 0, 0, 0)
EntityParent(cube, piv)
EntityMove(cube, 40, 0, 0)
EntitySetPickable(cube, TRUE)



WHILE TRUE
EntityRotate(piv, 0, 1, 0)
EntityAlignTowards(cube, camera)
EntityDrawSystem()


SHOWSCREEN
WEND
 

tausche mal bei entityaligntowards die beiden entities aus, da siehst du nämlich nix mehr.

eigentlich müsste doch dann die camera der bewegung des cube folgen, oder?


ich machs dir jetzt ganz leicht, du hast eine pn.


Gernot hier nochmal, kannst du dir das mal laden, entweder texturiert es plötzlich auf der falschen seite, oder ich weiß auch nicht.
bei dem vorherigen es gings.jo, oben gibts automatisch kein licht, nur unten.

war vorher anders.

vielleicht liegt es auch der .ddd datei.

probier mal selbst....

http://www.zshare.net/download/1394520160806581/
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-21
@gernot: das is ziemlich frickelei im moment.schau mal wegen dem entitypick, oder auch linepick, wie ich das handhaben muss.

dann bau ich die zwei beispiele, oder wenn mir nochwas einfällt.achja, schau unbedingt mal nach, warum mein terrain verkehrt texturiert wird.obs die .ddd ist kann ich nicht schauen, da die .3ds datei in ordnung ist.und nen .ddd viewer kenn ich keinen. .3ds wäre mal doch wichtig, immer das hin und her konvertieren.mmmmm

sooooo, dann schreib ich dir dieses wochenende eine komplette befehlsliste, die noch rein sollten, zusammen mit den jetzigen, ich mach das am besten gleich mal als chm datei.

und du kannst dann ja anfangen alle diese befehle umzusetzen.und als quelle nehm ich erstmal bb, weil da sind die wichtigsten drin.spezielleres erkläre ich genauer, aber auf jeden fall wirds eine 3d chm.

so, nun schau wegen meiner .ddd und den entity- und linepick, k.a. obs nich funktioniert, oder ib ich das bin, habe letzte nacht alles mögliche probiert.


[edit] das ist mir jetzt doch etwas zu frickelig, wenn hier soooo viele bb´ler sind, warum mach ich dann alleine mit dir nur was am ES.
         ich hab dir die demo von c3d geschickt, dort gibt es eine komplette hilfe datei.
         und massig examples, die sämtliche funktionsweisen erklären.

        entschuldige, ich wollte zwar das entitysystem, aber das wird mir selber jetzt zu viel.
        wenn du das entity system fertig machst, wärs super, aber ich bin nicht mehr traurig, wenn nicht.
       
        auf blitzforum.de gibt oben die hilfe, dort werden auch alle befehle erklärt.

       ich setz mich jetzt an blitzmax, dort gibts das minib3d was im prinzip das gleiche ich, wie unser entity system.
         wenn glb die gleiche unkomplizierte funktionalität hat wie bb3d oder cobra3d, dann mach ich wieder was.

        aber diese bastelei ist mir etwas zuviel geworden.

        welche befehle, mit welcher funktion rein sollen, weißt du, am besten und einfachsten eine 1zu1 kopie von einem der beiden
        sprachen, auch wenn das vielen hier gegen den strich geht.

        aber warum das rad neu erfinden, wenn es doch so wie es ist gut rollt.

ich mach jetzt glb urlaub, mach nen neuen thread, oder bereich hier im forum auf, und poste wenn alle befehle final drin sind.
und eben alle befehle und wenn möglich syntaxähnlich und funktionsgleich.

ich schau ab und an hier rein, und stell mich gern als tester zur verfügung, ich hab eigentlich momentan noch genug zeit mich drum zu kümmern, aber das wird so nix, befehl für befehl durchzukauen.

ich mach gern für jeden befehl ein beispiel, aber erst wenn alles steht.

sorry, hoffe du bekommst es noch hin, sonst scheint es ja niemanden zu interessieren, ausser uns beiden.

aber selbst du hast ja gesehen, wie das ES einiges vereinfacht.

Bis dann, melde mich zu wort, wenn ich die commands final sehe.....


p.s. 1. post hier am 10.oktober 2007 das sind jetzt mehr als 8 monate!!!

ich würde wetten, dass du eine 1zu1 kopie von der kompletten 3d syntax schaffen könntest in 2-3 tagen.liege ich da richtig gernot?

tip: nimm die minib3d von mir und ich wette man kann das da drin alles passend umschreiben.ich schick dir nochmal das komplette paket(TEntity ist am interessantesten)
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-22
So, ich hab dir jetzt mal eine etwas angepasstere version des EntitySystem gebastelt.
Alle Befehle von Dir sind drin, aber neu sortiert, hoffe du findest dich zurecht damit.

Desweiteren habe ich ein paar blanko funktionen erstellt, die zukünftige befehle sein sollen.

Hier die TEntity mit blanko funktionen

http://www.zshare.net/download/13995339e7bfcfa3/

Und hier die Befehle die alle noch rein sollen

http://www.blitzforum.de/help/?subcat=75
http://www.blitzforum.de/help/?subcat=56
http://www.blitzforum.de/help/?subcat=77

alle diese befehle sollen auch noch rein.

ach und eine verbesserung hätte ich noch.schau mal bei dem Befehl EntityFX, unsere bumpmappinggeschichte/multitexturierung usw, müsste sich doch etwas einfacher lösen lassen, oder?

mach ein entityfx blablabla, wenn das nicht gesetzt wird für ein objekt, besitzt es nur EINE normale textur.

Achja, und der teil mit den animationen ist bei den links oben sicher auch interessant, da wir da bis auf einen befehl nix weiter haben.

wenn du die drei links oben hinbekommst, und meine blanko befehle, dann mach ich weiter, brauch nämlich einiges davon, wäre supernett.

mal schauen, wie flink du bist....grins

ähm, wenn das alles funzt, werden die normalen X_ befehle sicher aus der mode kommen.is auch einfacher so, und meiner meinung nach sinn und zweck des ganzen.

glb wäre dann soweit ich weiß, die einzige sprache mit entitysystem was auch funktioniert und multiplattform binaries erzeugen kann.
ausser pb mal mit dem ogre schund, was dort wohl nicht wirklich laufen soll.

die befehle wenn sie stehen, werd ich mir nochmal zur brust nehmen, da ich erst nach tagelangem coden sagen kann, ob eine (kürzere)umbenennung sinnvoll wäre, usw.

so, nu warte ich auf deine comments und work, gernot.

vielleicht haste ja den sonntag über zeit, oder eben in den nächsten tagen mal.
eine bitte, nicht häppchenweise, einfach alle befehle rein, und ich teste dann....

p.s. ich hab nen richtig hübschen level gebastelt grad, richtig knuffig, der wartet auf seinen einsatz...
Title: Re: 3D Entity System [DE]
Post by: BumbleBee on 2008-Jun-22
Überfordere den armen Mann nicht. ;)

Quote from: Heiko
ähm, wenn das alles funzt, werden die normalen X_ befehle sicher aus der mode kommen.is auch einfacher so, und meiner meinung nach sinn und zweck des ganzen.

Das wäre schlecht. Hab die doch extra auswendig gelernt. :)

Quote from: Heiko
ich hab nen richtig hübschen level gebastelt grad, richtig knuffig,

Lass uns teilhaben und knips mal den Bildschirm ab. :)

Cheers
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-22
sind noch feinarbeiten beim texturieren, dann mach ich mal nen screenshot.

ich will ja nur helfen, grins.

okay bin ungeduldig.
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jun-22
Ich will sofort nen Screenshot :D
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-22
kommt hoffentlich heut noch, ich muss alles auseinanderpfimmeln, is alles zu ähm überladen geworden, d.h. eine riesige textur, und details sind da nich so dolle.naja ich hoff ich bekomm heut noch was vorzeigbares hin.

aber denke schon, da poste ich ihn hier.

Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-23
Ich bau _nicht_ 1000 Befehle rein, nur damit _alles_ ganau so ist wie bei Blitz! Könnt ihr total vergessen.

Die AddVertex und AddTriangle Sachen kommen zu 100.0% _nicht_!
Was soll das? Das geht mit GLBasic viel einfacher. Wenn man keine neue Sprache lernen will, muss man halt bei dem alten Trödel bleiben. Der EntityAlign ist verdreht. Da muss ich mal schauen.
Bitte, bitte keine so langen Aufsätze schreiben. Ich brauch ja ne Stunde um das alles zu lesen.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-23
was meinst du mit align, für was machst du das rein?
hab ich da jetzt was verpasst?

nun, die von bb kommen, wollen nen leichten umstieg, bzw. einstieg.

hab beide beispiele schon fast fertig, fehlt nur das pick, von dem ich noch nicht richitg weiß, wie das gehandhabt wird.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-23
Hab EntityAlign überarbeitet und EntityPick in's Beipsiel gepackt.
Der EntityPick gibt Dir einen "Handle" zurück. Das ist eine Zahl, aber das muss Dir egal sein.
Im Beispiel: EntityGetName$( pick ) z.B.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-23
da hab ich noch drei fragen an dich, dann lass ich dich erstmal in ruhe.

1. kann ich ein mesh auch teilweise transparent machen, also bei sprites gibt es ja auch dieses rosa, was nicht mit gezeichnet wird.will paar effekte machen, aber sind ja sonst im komplette objekte.ich weiß, kann auch entsprechende meshes machen.aus ermangelung an partikeln.

2. kannst du bei den animationen helfen? also soweit ich jetzt flüchtig geschaut hab, gibt ja nur eine endlosschleife sozusagen von key zu key.wie kann ich die animation stoppen, oder das animierte überhaupt noch beeinflußen.und ist es egal, ob ich ein animiertes oder statisches mesh lade?


3. die wohl schwierigste frage.schau mal bei den bb befehlen auf deren seite.
    wie würdest du diesen code in glb mit ES soweit wie möglich umsetzen???

Code: GLBasic [Select]
; SuperCam!
;
; by PsychicParrot 2003
;
;
; Usage : SuperCam(cam,ent,cspeed#,dist#,hite#,xrot#,tilt#)
;
;

Graphics3D 640,480,16,3
SetBuffer=BackBuffer()

Global campivot=CreateCube() ; create pivot for camera
Global camera=CreateCamera()  ; create camera (!!!)

; ---------------------- THIS IS ALL JUST TO POPULATE THE WORLD WITH SOME RUBBISH ---------------

Global light=CreateLight()
Global player=CreateCube()    ; create simple player
Global plane=CreatePlane()   ; create simple floor
MoveEntity player,0,1,0
; Create texture of size 256x256
tex=CreateTexture(256,256)

; Set buffer - texture buffer
SetBuffer TextureBuffer(tex)

; Clear texture buffer with background white color
For i=1 To 10
Color Rnd(0,255),Rnd(0,255),Rnd(0,255)
Rect Rnd(0,256),Rnd(0,256),Rnd(0,256),Rnd(0,256)
Next

; Texture cube with texture
EntityTexture plane,tex
EntityTexture player,tex

; Set buffer - backbuffer
SetBuffer BackBuffer()

; ----------------------------------------------------------------------------------------------

While Not KeyHit(1)

If KeyDown(200) Then
        MoveEntity player,0,0,.2
End If

If KeyDown(203) TurnEntity player,0,1,0
If KeyDown(205) TurnEntity player,0,-1,0

SuperCam(camera,player,.02,8,3,0,2)

RenderWorld
Flip

Wend

End

Function SuperCam(cam,ent,cspeed#,dist#,hite#,xrot#,tilt#)

TFormPoint 0,hite#,-dist#,ent,0

cx#=(TFormedX()-EntityX(cam))*cspeed#
cy#=(TFormedY()-EntityY(cam))*cspeed#
cz#=(TFormedZ()-EntityZ(cam))*cspeed#

TranslateEntity cam,cx,cy,cz
PointEntity cam,ent
RotateEntity cam,xrot#,EntityYaw(cam),tilt#

End Function


also der teil hier:

Code: GLBasic [Select]
Function SuperCam(cam,ent,cspeed#,dist#,hite#,xrot#,tilt#)

TFormPoint 0,hite#,-dist#,ent,0

cx#=(TFormedX()-EntityX(cam))*cspeed#
cy#=(TFormedY()-EntityY(cam))*cspeed#
cz#=(TFormedZ()-EntityZ(cam))*cspeed#

TranslateEntity cam,cx,cy,cz
PointEntity cam,ent
RotateEntity cam,xrot#,EntityYaw(cam),tilt#

End Function
so, mehr brauch ich erstmal nicht, bei dem rest frage ich wenn ich noch was brauche.

glaubst nicht, wieviel zeit das modelling benötigt.......

[edit] so nase voll vom modeln, hab nen einfachen level gemacht, nix grafisch besonderes, hab bewegung sowie bodenkollision fertig, sowie sonstige kollisionen.ein paar sich bewegende meshes drin.und sitz grad an einer passenden sprungroutine, gefällt mir aber noch nicht so, muss aber rein, gehört dazu.kamerasteuerung ist momentan gaaanz simple, die hängt nämlich nur hinten dran.aufgabe, man muss durch den level kommen ohne von fiesen gegnern entdeckt zu werden, und sich bestimmte items einsammeln.mach noch sprung fertig, gegner rein, und dann dürfte es fast fertig sein.mmm aber erstmal schlafen.....

ach gernot, wäre ein einfaches EntityCollide(entity, entity2) welches TRUE oder FALSE zurückliefert möglich, ohne vorher irgendetwas zu machen?also einfach die kollision zweier entities prüfen, ohne denn ganzen anderen drumherum befehlen, welche sicher auch ihren sinn haben, aber bei paar einfachen dingen, wäre das sicher komfortabel.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-24
@gernot: ach, kannst noch ein entitytranslate(entity, x, y, z)

             dazu machen.

             also sozusagen ein entitysetposition(entity, entitygetx(entity)+-  x, entitygety(entity)+-  y, entitygetz(entity)+-  z)

             versetzt entity ausgehend der momentanen position um werte x, y, z aber eben nicht wie entitymove(bei dem der relative drehwinkel beachtet wird)
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jun-24
Boxcoll bitte Gernot, ganz wichtig :)
Brauch ich für mein Breakout-Game  :noggin:  :good:
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-25
EntityTranslate? Es gibt EntityMove und EntitySetPosition.

Schranz0r: Wie willst Du das haben? Bzw. schreib mal alle Befehle exakt auf, wie die sein sollen.
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jun-25
So stell ich mir das vor :)

Code: GLBasic [Select]
EntityCollisionBox: Entity, Size_X, Size_Y
EntityCreateQuad: Size_X, Size_Y, Size_Z
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-25
mmmm okay gernot, da muss ich das mit entitysetposition etwas komplizierter machen.

und falls es jemanden interessiert.....

Code: GLBasic [Select]
FUNCTION EntityTranslate: handle, xx, yy, zz

EntitySetPosition(handle, EntityGetX(handle)+(xx), EntityGetY(handle)+(yy), EntityGetZ(handle)+(zz))

ENDFUNCTION

geht sicher auch auf unterer ebene im ES, aber da müsste ich erst schauen.
Title: Re: 3D Entity System [DE]
Post by: BumbleBee on 2008-Jun-25
Na, so langsam bekommt ihr euer Blitz3D ja wieder zusammen. =D  :booze:

Cheers
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2008-Jun-25
Also ich muss schon sagen. Auch als Noob in Sachen 3D ist das wirklich sch... einfach zu handhaben. Vor allem die Bewegung der Kamera im Raum funktioniert jetzt genauso, wie ich es mir vorgestellt habe. Damit hätte man ein 3D Asteroids schnell zusammengeschustert. Macht richtig Spaß, damit zu arbeiten.

Großes Kompliment an Gernot, Schranzor und natürlich auch Heiko, der mit seiner "Penetranz" (durchaus positiv gemeint) sicherlich dazu beigetragen hat, daß dieses Thema weiterhin im Gespräch bleibt.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-26
Da bedanke ich mich jetzt einfach mal, und verkneif mir ein, "habichsnichgesagt".... :nana:

Klar isses toll, und macht eben spass damit zu arbeiten, eben gerade für neulinge.


@gernot: hab da ein Kollisionsproblem.

Code: GLBasic [Select]
FUNCTION jumping:
   
       
    IF KEY(57) 
                updown=0.1
        ELSE
                updown=updown-0.1
                IF coll <> 0 THEN updown = 0.1  //coll = EntityCollisionCount(pyra)
        ENDIF
    EntityMove(pyra,0,updown,0)

ENDFUNCTION

okay ich hab das jetzt mit meinem eigenen translatebefehl gemacht,aber das spielt jetzt mal keine rolle.

und zwar gehts um den kollisionsradius, denn wenn ich mittels dieser funktion springe, dann fällt mein spieler ab und an durch.
je größer der wert von updown wird, desto ungenauer ist die kollisionsabfrage, können wir den wert des kollisionsradius ein wenig ändern?

mittels befehl zum beispiel.

wie wäre das?

http://www.blitzforum.de/help/Collisions       

und hier für schranzors kollisionsproblem, aber unter den kollisionsbefehlen bei bb gibt es noch mehr arten, schaus dir an, und entscheide du was sinnvoll wäre.

http://www.blitzforum.de/help/EntityBox

aber zwischen radius, box und polygon bei kollisionen zu unterscheiden, wäre toll, weil jeweils für den zweck auswählbar.

könnte man als extra parameter bei den kollisionen anfügen, bzw. dann bei box und radius müsste man eben dann noch werte definieren.

so long, meine kollisionfunktioniert so lala, fällt eben ab und zu durch, aber solang kann ich ja trotzdem weiter machen, nun sind die gegner dran, lol.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-26
Ihr Ratzenköpf'!! ;)

Kugel-Box kollision hab ich noch net drin.
Da muss ich mir mal das Hirn zerbrechen drüber.

Versteh ich das schon richtig, dass die Box dann schon auch mitgedreht wird, so wie meine AABB, oder?

Das mit dem Sliden muss ich mir mal ansehen.

@Heiko: EntityTranslate ist doch EntityMove, oder!?

Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-26
Bei EntityMove wird ja die relative drehung berücksichtigt, d.h. wohin man schaut ist Z.

Bei EntityTranslate, wird das Entity ähnlich wie bei EntitySetPosition verschoben, nur eben um Wert xyz relativ zur momentanen Position.

Aus meinem Stück Code ersichtlich.

Code: GLBasic [Select]
FUNCTION EntityTranslate: handle, xx, yy, zz

EntitySetPosition(handle, EntityGetX(handle)+(xx), EntityGetY(handle)+(yy), EntityGetZ(handle)+(zz))

ENDFUNCTION

P.S. Was für eine Kollsion hast denn im Moment drin, d.h. wie wird was geprüft?
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-26
Update:
// PHOO: - New parameter: EntityAddCollision: group_src, group_dest, COLLISION_MODE
//       - New commands: EntityCollisionSetRadius, EntityCollisionSetBox
//                       EntityCreateCuboid

Alles wie bei Blitz, wobei der Wert "1" u.U. falsch sein könnte.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-26
ich hab jetzt noch nicht geschaut, aber was meinst du mit wert "1"

hab das grad mit dem radius probiert.

kommt eine fehlermeldung.

Code: GLBasic [Select]
call to undefined function : X_COLLISIONSPHEREBOX
 

da fehlt wohl was....lol
Title: Re: 3D Entity System [DE]
Post by: BumbleBee on 2008-Jun-26
Wie kann man sich eigentlich bei Gernot dafür bedanken, dass er immer soviel für uns macht und auch immer gleich macht, obwohl er ja wenig Zeit hat? Vielleicht mit paar tollen Spielen die mit oder ohne ES gemacht wurden? Beim GLBasic Treffen kriegt er eh alles spendiert. Das steht schon mal fest.  :booze:
Ich denke, so langsam sollte oder müßte ich wohl auch mal einen Blick auf das ES werfen. =D

Cheers
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jun-26
Total geil das Teil, ich finds subba jut dat dingendskirchen...ähhhh ... EntitySystem ;)
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-26
Bis auf
Code: GLBasic [Select]
X_COLLISIONSPHEREBOX
, was noch nichts existiert, funktioniert es suuuper, also sphere-mesh (0) hab ich getestet, läuft bisher, muss noch bissl mitm radius testen, aber feine sache, ganz toll gernot.

kann ich weiter machen, hab derweil

Code: GLBasic [Select]
                                                        CASE 2
                                        //sphere[1]->box[2]
                                        LOCAL r = object1.col_radius * MIN(object1.sx, MIN(object1.sy, object1.sz) )
                                        col = X_COLLISIONSPHEREBOX(     object1.Mg[12], object1.Mg[13], object1.Mg[14],object1.col_radius, _
                                                                                                object2.col_bx*object2.sx, _
                                                                                                object2.col_by*object2.sy, _
 

auskommentiert.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-27
Oh ich Depp! Ja, das wird ein größeres Update. Muss man bis dahin auskommentieren.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-27
lol oben steht schon version 5.307, aber online ist sie noch nicht.

hab noch 5.304 und update wird mit meldung "aktuell" beendet.

Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-27
ganz großer Fehler in der aktuellen, darum hab ich sie vom Netz genommen.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-27
achso, nadann kein thema.

achja, kannst du die neuen kollisionsbefehle für alle die nicht von bb kommen erklären, ist sicher einfacher zu verstehen als

Code: GLBasic [Select]
0=sphere-mesh, 1=box-mesh, 2=sphere-box

ich mein ich weiß wie es funktioniert, aber für die meisten hier....
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jun-28
Bei EntityCollisionSetBox sollte sich die Collisionbox auch mit dem Objekt mitdrehen oder?
So wie ich das seh, wird das nicht gemacht.
Und was optisches(Drahtgitter) wenn Debug an ist, wär auch super!

Sonnst soweit echt gut!

Hab bei Cuboid die Texturen richtig rum gesetzt, da hat irgendwie kein Face gepasst  :noggin:  :good:

Code: GLBasic [Select]
//! This function creates a cuboid with the dimensions:
//! sx x sy x sz
// \param sx,sy,sz - width, height and depth of the cuboid
// \return the entity entity
FUNCTION EntityCreateCuboid: sx, sy, sz
LOCAL col=RGB(0xff,0xff,0xff)

LOCAL t AS T3DEntity
LOCAL nc
        t.what = 0
        t.tex=-1
        t.ddd=0

        // Get free object slot
        nc = X_NUMFACES(t.ddd)
        WHILE nc>0
                INC t.ddd, 1
                nc = X_NUMFACES(t.ddd)
        WEND
        X_AUTONORMALS 1 // For a cube, hard edges
        sx=sx/2
        sy=sy/2
        sz=sz/2
        X_OBJSTART t.ddd
                // Front Face
                X_OBJADDVERTEX  sx, -sy,  sz, 1, 1, col // ul
                X_OBJADDVERTEX -sx, -sy,  sz, 0, 1, col // ur
                X_OBJADDVERTEX  sx,  sy,  sz, 1, 0, col // ol
                X_OBJADDVERTEX -sx,  sy,  sz, 0, 0, col // or
                X_OBJNEWGROUP
                // Back Face
                X_OBJADDVERTEX -sx,  sy, -sz, 1, 0, col // or
                X_OBJADDVERTEX -sx, -sy, -sz, 1, 1, col // ur
                X_OBJADDVERTEX  sx,  sy, -sz, 0, 0, col // ol
                X_OBJADDVERTEX  sx, -sy, -sz, 0, 1, col // ul
                X_OBJNEWGROUP
                // Top Face
                X_OBJADDVERTEX -sx,  sy,  sz, 1, 0, col // or
                X_OBJADDVERTEX -sx,  sy, -sz, 1, 1, col // ur
                X_OBJADDVERTEX  sx,  sy,  sz, 0, 0, col // ol
                X_OBJADDVERTEX  sx,  sy, -sz, 0, 1, col // ul
                X_OBJNEWGROUP
                // Bottom Face
                X_OBJADDVERTEX  sx, -sy, -sz, 0, 0, col // ol
                X_OBJADDVERTEX -sx, -sy, -sz, 1, 0, col // or
                X_OBJADDVERTEX  sx, -sy,  sz, 0, 1, col // ul
                X_OBJADDVERTEX -sx, -sy,  sz, 1, 1, col // ur
                X_OBJNEWGROUP
                // Right face
                X_OBJADDVERTEX  sx,  sy, -sz, 1, 0, col // or
                X_OBJADDVERTEX  sx, -sy, -sz, 1, 1, col // ur
                X_OBJADDVERTEX  sx,  sy,  sz, 0, 0, col // ol
                X_OBJADDVERTEX  sx, -sy,  sz, 0, 1, col // ul
                X_OBJNEWGROUP
                // Left Face
                X_OBJADDVERTEX -sx, -sy,  sz, 1, 1, col // ur
                X_OBJADDVERTEX -sx, -sy, -sz, 0, 1, col // or
                X_OBJADDVERTEX -sx,  sy,  sz, 1, 0, col // ul
                X_OBJADDVERTEX -sx,  sy, -sz, 0, 0, col // ol
                X_OBJNEWGROUP
        X_OBJEND
        IF sx=sy AND sx=sz
                t.name$="cube, s="+FORMAT$(0,1,sz*2)
        ELSE
                t.name$="cuboid, "+FORMAT$(0,1,sx*2)+"x"+FORMAT$(0,1,sy*2)+"x"+FORMAT$(0,1,sz*2)
        ENDIF
        RETURN EntityAddInternal(t)

ENDFUNCTION // sz
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-30
Bei EntityCollisionSetBox sollte sich die Collisionbox auch mit dem Objekt mitdrehen oder?

Bei box->mesh Kollision sollte das so sein. Bei box->sphere nicht. Das ist etwas doof.
Ich bau nuch sphere->sphere ein, das kann man wirklich gut brauchen, und ist schnell.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-30
hast du dir unseren vorschlag wegen den kollisionen durch den kopf gehen lassen?

also standard mesh-mesh kollision, und wenn radius oder box o.ä. gesetzt, wird eben einfach auf diese kollisions"aura" gesetzt, und einfach nur bei kollisionprüfung ein true oder false ausgegeben.

hatte mich ja mit schranz0r zusammen gesetzt, und hielten das für eine gute idee, und einfacher zu handhaben, statt, einzeln festzulegen auf was für kollisionen es prüfen soll.

hier so als beispiel sozusagen

Code: GLBasic [Select]
EntitySetPosition(bla, 0, 0, 0)
EntityCollisionSetRadius(bla, 1)

EntitySetPosition(blu, 100, 100, 100)
EntityCollisionSetBox(blu, x,y,z,bx,by,bz)

EntityCollision(bla, blu, [reaktion])    reaktion=  0 nichts
                                                             1 stop
                                                             2 sliden

wobei reaktion jetzt kein muss ist, sondern nur eine idee von schranz0r, wichtig wäre sozusagen nur EntityCollision(bla, blu)     return TRUE/FALSE

es werden vorher nur kollisionsaussenhüllen festgelegt, und hinterher einfach geprüft ob diese, egal wie sie definiert sind geprüft.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-30
u.U. will man aber das gleiche Objekt auf verschiedene Weisen testen. z.B. box->mesh für die Welt-spieler Kollision, und sphere->sphere für gegner->spieler Kollision.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-30
ja aber das ist doch eigentlich irrelevant.


bei EntityCollision(a,b) werden zwei entities auf collision geprüft, nur abhängig vom jeweiligen radius box etc.  wenn man spieler eine radius zugewiesen hat, ist dieser eben kollisionshülle, oder eben eine box, etc.  man gibt einfach nur sozusagen eine neue kollisionsform an.

und man prüft dann intern alles durch.

das praktisch gesehen für den anwender nur noch eine abfrage zwischen zwei entities notwendig wird.

weil man doch eh zwei entities prüft, also z.b. EntityCollision(welt, spieler)  damit wäre das ergebis true oder false, und dann kann man ja entscheiden, was nach einer kollision geschehen soll.

welt wäre eben ein mesh und spieler hätte einen radius, aber dies wäre nur intern wichtig.

jede entity bekommt den standard mesh zugewiesen, oder eben etwas was man selbst festlegt(radius/box/etc.)  und es wird einfach nur entity gegen entiy geprüft, da man ja eh unterschiedlich reagieren muss.

denn wir hatten mit schranz0r auch noch eine andere überlegung, wenn mann diese kollisionen wie bisher festlegt, dann mann man unterschiedliche parameter(box radius) etc. nicht in einen topf stecken, z.b. in eine gruppe  metallische objekte, um dann einen klang abzuspielen, aber das geht ja nicht, wenn dort durcheinander box/radius etc. ist.

frag schranz0r notfalls nochmal, wir hatten uns das eigentlich ziemlich lange überlegt, bzw. es für einfacher befunden.

[edit] alternativ könnte man ja auch bei dem befehl ja noch einen parameter für die unterschiedlichen kollisionsarten angeben, aber erst bei der abfrage der kollision http://www.blitzforum.de/help/Collisions  als beispiel.
ist da insgesamt etwas einfach zu handhaben, aber ich denke die idee die schranzi und ich hatten, wäre schon vorteilhaft.


was ich meine ist...
Code: GLBasic [Select]
// ------------------------------------------ //
//! Add collision request for the next EntityUpdateCollisions
//! calls.
// \param group_src      - source group to test collisions against
// \param group_dest     - destination group to test aginst
// \param collision_mode - 0=sphere-mesh, 1=box-mesh, 2=sphere-box
// \sa EntityUpdateCollisions, EntityClearCollisions, EntitySetGroup

es wird mit 0,1,2 EINE Kollisionsart festgelegt.

oder denk ich da jetzt zu umständlich?

wenn du das so, wie es jetzt ist für einfacher und vollständiger hältst, mach mal ein beispiel, was aussagekräftiger ist.
so müsste man ja immer gleiche objekte in eine gruppe packen, man könnte ja gegner mit radius und auch welche mit box haben, dann würde das so nicht funktionieren.

Kann man das nicht doch einfacher machen?


[editedit]
Code: GLBasic [Select]
LOCAL ncol = EntityCollisionCount(juru)
FOR i = 1 TO ncol
IF EntityCollisionEntity(juru, EntityGetName$(i)) = level THEN collevel = 1
NEXT      
       IF collevel = 1
          updown = 0.01
          IF KEY(57) THEN updown=0.5
       ELSE
        updown=updown-0.02
       ENDIF
colllevel=0

ziemlich kompliziert, oder?Ich mein, man muss ja eh hinterher noch festlegen was passieren soll.

nunja, vielleicht fällt dir ja noch was einfacheres ein...

oder red ma mit schranz0r, der hat auch gute ideen...
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-30
Äh... Aber ich hab das doch analog zu Collisions wie bei Blitz gemacht. Nein?
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-30
ich hab mich jetzt mal hingesetzt, und versuch mal selber bisschen durchzublicken.
und zwar ist mir aufgefallen, dass man die gruppennamen eventuell garnicht brauch, eine durchnummerierung würde reichen.

günstig wäre einfach ein EntitySetGroup(entity, beliebiger Integer), was man gleich bei entityerstellung zuweisen kann.

damit würde man sich diese gruppennamenerstellung sparen, man hat ja keine zig gruppen in einem spiel, normalerweise.

als nächstes ist mir aufgefallen, dass das Äquivalent zu EntityAddCollision bei BB3D(Collisions) in der While True Schleife auf Kollisionen zwischen Gruppe a und Gruppe b prüft.(Und das EntityUpdateCollisions() .ist dort das Updateworld und animiert alle objekte und prüft auf kollisionen, EntityDrawSystem zeichnet wohl dort nur alles.aber das nur am rande)abhängig von der prüfmethode.dabei dürfen in einer gruppe nur objekte mit gleicher eigenschaft drin sein, also alle die einen radius haben oder eine box, oder so, jeweils in eine eigene gruppe.also es gibt nicht eine gr_gegner, sondern im extremfall gr_gegner_sphere, gr_gegner_box usw. (achja, bei BB3D ist die standardprüfmethode mit radius, also sphere, weil das am schnellsten ist.polygon wohl am langsamsten)

es soll nur diese drei prüfmethoden geben
Kugel - Box
Kugel - Kugel
Kugel - Polygon

ich denke, das dürfte einigermaßen gut beschrieben sein, hab jetzt seit langem mich mal in die kollisionen von bb3d reingearbeitet, und die praktischste Funktionsweise abgeleitet.


hier mal zur erläuterung zu dem obigen mit EntityAddCollisions und EntityUpdateCollision() bei BB3D, so wie ich das meine.
einfach mal auf die befehle klicken wegen erklärung.

http://www.blitzforum.de/help/Collisions

wichtig ist eigentlich nur Collisions, da dies das Äquivalent zu EntityAddCollisions ist. Unten im Text steht dann noch "Alle Reaktionen werden nur dann ausgeführt, wenn UpdateWorld ausgeführt wird. " Daher meine Idee das Kollisionsupdate irgendwie mit woanders zu integrieren, da wo eben animationen ausgeführt werden, oder bewegungen etc. aber da hast du sicher mehr ahnung.


achja, ein befehl, wo gleich das handle ausgegeben wird bei kollisionen, wäre toll.(also den umweg über EntityGetName$(i) umgehen)


http://www.blitzforum.de/help/EntityCollided   vielleicht interessant
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-30
EntityGetName$ ist ja nur, damit den Den Namen bekommst. Was Du an EntityGetName$ fütterst, das ist der Entity Handle bereits.
Ich hab mir diese B3D Geschichte lange angesehen und es _genau_ so gemacht. Nur halt andere, sinnvollere Namen vergeben.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-30
Also was ich an EntityGetName$ füttere ist doch der index, also eine Zahl.man müsste gleich den namen direkt bekommen, das würde bei
Kollisionsprüfungen etwas einfacher machen, ist aber net tragisch, ist ja nur ein befehl mehr.


ich weiß, ich weiß, ich fand nur das mit den gruppennamen zum beispiel etwas verwirrend, weil es doch ziemlich viel extra code ist, ich denke zahlen sind da praktischer, da muss man nichts extra deklarieren, oder meinst nicht?

und warum ist dort das collisions in der while true schleife, wäre es nicht sinnvoller unsere überprüfung als einziger befehl ebenso in die schleife einzubauen?

also ein entityaddcollision(a,b,type)
           entityaddcollision(a,d,type)
usw.

ich werd bei mir später mal eher aus EntityAddCollisions  ein EntityCollisions machen, denke ist praktischer.

und am ende mit einem befehl alles updaten und dann eben ein entitydrawsystem().

mir raucht schon der kopf.

achja, wir müssen unbedingt dazuschreiben, dass in einer gruppe nur objekte drin sein dürfen die zu der prüfmethode passen, ich weiß ja nicht, ob das sonst einen fehler provozieren würde.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jun-30
Alle Methoden funktionieren beim Erstellen/Laden schon. Ich parse die Modelle durch und mach eine Kugel und eine Box drum rum. Sollte man evtl. vermerken.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-30
das hab ich jetzt nicht wirklich verstanden?!?


achja, mach doch noch nen paramter rein, dass wenn EntityAddCollision(a,b,typ,reaction) ...

also wenn player in gruppe a ist, und mit irgendeinem entity aus gruppe b unter beachtung des kollisionstyps(typ) kollidiert, dann erfolgt reaction.

reaction:  0 = nichts
              1 = stop

sliden und raufsliden wären noch möglich, aber allein so ein stop, wäre schon sehr hilfreich.
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jun-30
AAAAAAAAALLLLLLLLLLLLSSSSSSSSOOOOOOOOOOOOO :D


Die Kollisionen sollten im Prinzip einzeln oder auf die Masse geprüft werden können, sprich:


EntityGetCollision( Mesh1, Mesh2) // sollte auch Mesh->Box,  Box->Kugel, Kugel->Mesh, Box->Box, Kugel->Kugel können ( jetzt nicht hauen Gernot  ^^ )

Und

EntityGetGroupeCollision( Groupe1, Groupe2) // Gibts ja glaub schon, evtl als byref die returns der jeweiligen Meshes was sich berühren ?
z.B so   EntityGetGroupeCollision( Groupe1, Groupe2, BYREF Coll_Mash1, BYREF Coll_Mash2)


Desweiteren sollte eine Entity -> World Kollision da sein, World ist dabei von mir aus auch eine Gruppe.
Diese sollte jedoch die Slidecollision beinhalten ( Programmiertechnischer aufwand bestimmt sehr hoch, aber extrem sinnvoll!)

Gernot wird mich jetzt bestimmt verfluchen, aber sonnst ist das ES echt eine Augenweide !
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-30
[edit] achso, der extra parameter, wenn gruppe a mit gruppe b, dann bspw. stopp, oder sliding.und hinterher kann man ja noch einzeln entscheiden, was das entity machen soll.


nein, die bisherigen Gruppenkollisionen sind nur da um rechenleistung zu sparen, sonst würde immer alles gegen alles geprüft werden, und so kann man das auf gruppen und deren prüfmethoden begrenzen.

und deine entity-entity methode ist toll, aber eben trotzdem gruppenabhängig.

hier mal stück code, so hab ich das gemacht.

Code: GLBasic [Select]
LOCAL gplayer = 101
LOCAL ground = 102

light = EntityCreateLight(RGB(255,255,255) )
camera=EntityCreateCamera()
          EntitySetCameraRange(camera,1,1000)

level = EntityLoadMesh("level.ddd")
     leveltex=EntityLoadTexture("level.bmp")
          EntityApplyTexture(level, leveltex, -1 )
                   EntitySetGroup(level, ground)

juru = EntityLoadMesh("juru.ddd")
     jurutex=EntityLoadTexture("juru.bmp")
          EntityApplyTexture(juru, jurutex, -1 )
               EntityCollisionSetRadius(juru, 0.4)
                    EntitySetGroup(juru, gplayer)

stumpf = EntityLoadMesh("stumpf.ddd")
     stumpftex = EntityLoadTexture("stumpf.bmp")
          EntityApplyTexture(stumpf, stumpftex, -1)
               EntityScale(stumpf, 20, 20, 20)

stamm = EntityLoadMesh("stamm.ddd")
     stammtex = EntityLoadTexture("stamm.bmp")
          EntityApplyTexture(stamm, stammtex, -1)


EntitySetPosition(level, 0, 0, 0)
EntitySetPosition(stumpf, -2, 10, -2)
EntitySetPosition(stamm, 10, 19, 0)
EntitySetPosition(camera, 0, 7, -15)
EntitySetRotation(stamm, 0, 70, 0)
EntitySetPosition(juru, 0, 10, 5)
EntitySetRotation(camera, 15, 0, 0)

EntityParent(light, juru)
EntityParent(camera, juru)
EntityTranslate(light, 0, 2, -2)

EntityEnable(camera, TRUE)

//Kollisionsgruppen initialisieren
EntityAddCollision(gplayer, ground, 0)
//

WHILE TRUE
GOSUB Kollisionen
GOSUB Movement
GOSUB UpdateMovement
EntityDrawSystem()
EntityUpdateCollisions()
X_MAKE2D
PRINT updown, 10, 10
PRINT EntityGetY(juru), 10, 20
SHOWSCREEN
WEND

SUB Kollisionen:
             LOCAL ncol = EntityCollisionCount(juru)
              FOR i = 1 TO ncol
                 IF EntityCollisionEntity(juru, EntityGetName$(i)) = level THEN collevel = 1
              NEXT
ENDSUB
 
SUB Movement:
//Sprung
            IF collevel = 1
               updown = 0.01
               collevel=0
             IF KEY(57) THEN updown=0.5
            ELSE
               updown=updown-0.02

            ENDIF

// drehen und bewegen
            IF KEY(203) THEN jy = 1
            IF KEY(205) THEN jy = -1
            IF KEY(200) THEN jz = 0.5
            IF KEY(208) THEN jz = -0.5

ENDSUB


SUB UpdateMovement:

EntityRotate(juru, 0, jy, 0)
EntityMove(juru, 0, 0, jz)
EntityMove(juru,0,updown,0)
EntityRotate(stamm, 0, 0, 1)
jy=0;jz=0

ENDSUB
 

aber ich denk, auch, dass es einfacher gehen müsste.

naja, so wie es momentan ist, kommen wa och klar.

achja, mesh is polygonkollision, oder?

und kann man um EntityDebug mode auch die kollisionsradien und boxen sichtbar machen, wäre vielleicht hilfreich.

um bspw. eine box an ein objekt anzupassen.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jun-30
oh ja, wenn man sliden könnte nach kollision, da hat schranz0r recht, das wäre hammer.

weil, man prüft bspw. gruppe player gegen level, und wenn es da zwischen den gruppen zu einer kollision kommt, dann hintendran eben stop, sliden, oder raufsliden wie bei bb3d.

also so hier: EntityAddCollision(gruppe_player, gruppe_level, kollisionstyp, reaction)
reaction wäre dann stop, sliden oder raufsliden.

Deswegen ist der Befehl Collisions bei BB3D auch in der While True Wend schleife.

im weiteren verlauf kann man ja dann einzelne abfragen der entities gegenüber machen, aber so für den grund wäre das super, und so meinte es schranz0r auch. denk ich.p.s. so ist es bei bb3d.

man könnte dann wie in meinem codebeispiel eine einfache player-welt kollisionsprüfung machen, wo, wenn player mit irgendwas aus der welt gruppe zusammenstößt, gestoppt, oder auch geslidet wird(ich denke mal es werden minimal die werte beim sliden verändert.)jedenfalls, benötigt man keine einzelnen abfragen, so wie ich das momentan tun muss, ich musste mit pivots arbeiten, da boden kollision anders ist als wandkollision, ein einfaches stop hintendran, und das problem wäre gelöst, beim kollidieren mit allem was im in der level gruppe drin ist.dann nur noch den sprung mit rein, es könnte so richtig einfach sein.

so muss ich mir erstmal mit pivots helfen, um einzeln auf boden oder wandkolli zu prüfen.

ach und gaaaanz wichtig, könntest du bitte ein kleines update des ES machen, weil pivots nicht kollisionsfähig sind, ich brauch das aber uunbedingt.

danke dir, bist ein schatz.

bzw. kannst du hier auch schreiben, was du geändert hast, hab selber an meinem ES bisschen rumgefrickelt, und würd das gern austauschen wollen.

dankeschön


achja, kann man auch onthefly kollisionen verändern.stell dir vor eine spielerfigur.ich mach da zwei versetzte pivots ran.eins bekammt nen radius für die bodenkollision, ein ne box z.b. für wand kollisionen.so, was aber mach ich wenn ich springe, und da mal ich irgendwie durch hüpfe, oder so, kann ja passieren, man weiß nie.man könnte dann noch eine kollision mit einem extra pivot machen, was einen kompletten radius um alles bekommt, oder eben einfach um den ganzen spieler, und somit gegen kollisionen jeglicher art prüfen.

das müsste man jedoch ab und anschalten können.

puh sicher kompliziert erklärt.

also 1. diesen parameter hinter entityaddcollision damit bei kolli der gruppen eine reaction in form von stop, sliden etc. ausgeführt wird
       2. pivots kollisionsfähig machen
      3. animationen etwas verbessern, also vielleicht mehr als nur ein befehl, oder so.
      4. vielen dank

Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-01
Die Kollisionen sollten im Prinzip einzeln oder auf die Masse geprüft werden können, sprich:
Verstehe. Das ist relativ easy zu machen. Werd ich einbauen. Aber: Wird's dann nicht ein riesen Wirrwarr an Befehlen?

Quote
...
Diese sollte jedoch die Slidecollision beinhalten ( Programmiertechnischer aufwand bestimmt sehr hoch, aber extrem sinnvoll!)
Ja, schon klar. Wenn Du's sagst, mach ich's rein.

Pivots können Kollidieren!? Brrr....
"Mia thun whaf mir khönhen!"

Bitte ein Beispiel: Was macht B3D, wenn man Sliding oder Vertikal Sliding macht, wenn man 3 oder 4 Körper von aussen gleichzeitig in der Mitte zusammenschiebt?
So:
Code: GLBasic [Select]
   2
   |
   v
1-> <-3
   ^
   |
   4
 

Bleiben alle stehen? Überschneiden die sich und klemmen für immer?



Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jul-01
Ähm pivots können kollidieren?!?

und wie?

ich hab sphere-mesh kollision gemacht. geht nicht.wenn ich statt nen pivot ne sphere erstelle, gehts.
hab auch nen kollradius drum gemacht.

gernot, ich weiß, ich schreib viel, aber manchmal ist es sinnvoll meins auch zu lesen.

du hast die befürchtung, dass es ein riesen wirrwarr wird wegen der einzelnen und massemässigen kollisionsprüfung.

es könnte im idealfall nur ein einziger befehl mehr werden.(vielleicht auch nur ein parameter extra)

Das was bei dir EntityAddCollision macht, macht bei BB3D Collisions.

Nur, mit zwei Unterschieden.
1. wird es bei BB3D immer in der While True schleife ausgeführt.
2. extra parameter, wenn (ein Entity aus)gruppe a mit (einem Entity aus) gruppe b unter prüfmethode c kollidiert, dann d (stop, sliding) ausführen.

einfach genug?

achja, für den anfang würde es doch reichen, dass sich intern immer irgendwo die positionen gespeichert werden, und bei collisionen wenn stop gewählt wird, einfach die alte posi und drehung und was auch immer, wieder hergestellt wird.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-01
Ähm pivots können kollidieren?!?
Ja, ich wusste nicht, dass B3D das kann. Ich bau's mal ein.


Quote
2. extra parameter, wenn (ein Entity aus)gruppe a mit (einem Entity aus) gruppe b unter prüfmethode c kollidiert, dann d (stop, sliding) ausführen.

OK, das bau ich noch ein. Siehe meine Frage weiter oben dazu!

Quote
achja, für den anfang würde es doch reichen, dass sich intern immer irgendwo die positionen gespeichert werden, und bei collisionen wenn stop gewählt wird, einfach die alte posi und drehung und was auch immer, wieder hergestellt wird.

Jo, dass ist easy. Aber! Werden "beide" bei der Kollision zurückgesetzt? Oder nur einer der Beiden? Und wass passiert, wenn beide "Sliden" dürfen?

Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jul-01
zu 1. vielen dank, super.

zu 2. ich mach mich gleich schlau.

zu 3. siehe 2.

ich editiere dann hier.

aber ich denke mal, dadurch, dass der befehl in der while true schleife steht, wird ja immer wieder geprüft obs kollidiert, und wenn man etwas bewegt, ändert sich ja der zustand der kollision.

hab mal geschaut: http://www.blitzforum.de/help/Collisions

ich denk mal, dass sich sliden, stop auf das objekt in der ersten gruppe bezieht.

da bin ich mir soagr ziemlich sicher, denn bei collision zwischen  player und welt, darf doch nicht die welt sliden, das wäre ja quatsch, weil dann bewegt sich ja der level immer ein stück.

demzufolge reaktionsparameter nur für erste gruppe.

für alles andere kann man ja seperat die reaktion zusätzlich für jedes entity steuern.

schau mal bei dem link oben, vielleicht wirst du ja auch sonst noch etwas schlauer draus.

habe ausserdem mal unter einem alten acc im forum dort gefragt, mal sehen, was die so von sich geben.

gerade, wenn mehrere aufeinandertreffen, wäre schon interessant.


hier schonmal eine antwort aus dem bb forum:

Code: GLBasic [Select]
Wenn du Gruppe 1 gegen Gruppe 2 Fliegen lässt dann bleibt die erste stehen.

Ein Tipp zu Collisions: Bei blitz3D sind Kollisionen mit 2 bewegenden Objekten fast unmöglich. Normalerweise funktioniert das nur bei Kugeln die beide einer gruppe angehören:

zB: Collisions 1,1,1,2

Das würde die Kugeln(mir EntityRadius) der ersten Gruppe gegen andere Kugeln der ersten Gruppe prallen lassen.

Bei Box Kolli funktioniert das nurnoch bedingt und bei Poly kannst du&#39;s eigentlich vergessen.

haben wir also schonmal gelernt, dass kollisionen auch innerhalb einer gruppe möglich sind, bzw. sein sollten.

was logisch ist, aber vlt. etwas komplizierter für dich wird, weil dann nichtmehr gilt, dass alle aus der ersten gruppe gegen die 2. geprüft werden, sondern notfalls, alle aus einer gruppe mit allen aus derselben gruppe, ohne dass sich jeweils eins aus einer gruppe mit sich selbst prüft, weil dann gäbe es ja immer eine kollision. ist wie als wen ich mit mir selbst zusammen rennen würde, was ja nicht möglich ist....
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-01
Gruppe 1 mit Grupp1 geht schon. Hab ich alles gemacht. Und den EntityUpdateCollisions mussts Du freilich in die WHILE Schleife packen.
Der Befehl ist (bis auf "reaction") komplett identisch mit B3D's "Collision".
OK, also diese Resonanz macht kaum Sinn, dachte ich mir schon. Ich bau's ein, aber ich meine auch, dass es gescheiter sein wird Newton "einfach" einzubinden.
Dann wird's allerdings wieder ziemlich cool.
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jul-01
achja, der Befehl EntityUpdateCollisions ist ja nicht identisch, weil der kollisionstyp ja bei glb schon vorher ausserhalb der schleife mit EntityAddCollision gesetzt wird.
praktisch wohl das gleiche, nur was ist wenn ich während des spiels kollisionen ändern will?
das würde dann ja nicht gehen.
oder?

Was meinst du mit Resonanz? Auf was?

danke dass du es mit einbaust, und ich hab mich mit newton überhaupt noch nicht befasst.

ohne einen einfachen tut, tu ich mich da grad bisschen schwer, is grad auch ne zeitfrage.

nun, wenn du die pivotkollision und das mit der reaction auf massen bzw. gruppenprüfungen drin hast, kannst du da noch wegen dem animationskrams schauen.

vielleicht irgendwas, was du da noch für notwendig erachten würdest.

damit ich eben meinen player anständig animieren kann.(der wird eh an ein pivot gepappt, daher auch pivotkollisionen...)


[edit] wenn du noch paar anregungen haben willst, hier mal die collisionen von c3d, anklicken und mit dem IE öffnen, also der IE7 kann es öffnen.
         http://www.glbase.de/help.xps
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jul-01
...Ich bau's ein, aber ich meine auch, dass es gescheiter sein wird Newton "einfach" einzubinden.
Dann wird's allerdings wieder ziemlich cool.

Sagte ich ja schonmal irgendwann vor 2-3 Seiten ^^
Gut Newton einbinden ist so ne Sache oder( Winonly? )?

Was machen die Würfel wenn sie aufeinanderprallen.... Hmm gute frage!

Ich würde sagen die verschieben sich in eine Richtung in die sie können.
Aber rein thoretisch stoßen da ja die Ecken exakt aufeinander wenn die alle die gleiche Entferrung, Speed und die exakten Winkel haben.
Also müssten sie stehen bleiben!
Da die Slidingcollision ja so ist, das wenn du im rechten Winkel auf die Wand zuläufts mitn Kopf an die wand rennst, und wenn du nun weiter läufts bleibst du stehen !
Wenn du jetzt im 45° Winkel ankommst berührst du mit der Schulter die Wand und wenn du nun so weiter läufst geht es zwar vorran , aber nur ca. halb so schnell, wie wenn du mit einen kleineren winkel wie 2° dagegen läufst.(Sliding)

@ Heiko:

Sicher kannst du im laufenden Spiel die Collisiongroupe wechseln für ein Objekt!
Title: Re: 3D Entity System [DE]
Post by: x-tra on 2008-Jul-02
mmmm ja sicher könnte ich ein neues entitysetgroup machen, aber dann ist es ja immer noch in der alten gruppe.müsste man da entfernen.

ich habs noch nicht probiert, is nur grad so ein gedanke.


[edit]  entityscale is lustig.
         habs mal zum test auf meinen level angewandt.
         habs verkleinert und mal vergrößert.
         war cool, level war viel kleiner, aber die kollisionen sprachen noch auf die ursprüngliche größe und position an, als wenn nix wär.
         d.h. scale extruiert nur grafisch, nicht jedoch die tatsächliche position und das mesh.
         achja, scale werte im negativen bereich scalen auch negativ, d.h. mein level hat sich nach unten gedreht, kicher.
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2008-Jul-02
allmählich komm ich mit dem 3D-Asteroids voran, feine Sache, dieses ES. Allerdings möchte ich hier noch mal die Skybox ansprechen, die bis jetzt nicht dem Entity-System nicht darstellen kann, sondern mit "normalen" GL-Basic-Befehlen. Ich liege doch richtig, wenn ich sage, daß die Skybox VOR dem Aufruf von EntityDrawSystem() zeichnen muss? Folglich muss ich doch auch die Kamera VOR dem Zeichnen der Skybox zeichnen.

Habe das jetzt so gelöst (Ausschnitt)
Code: GLBasic [Select]
  EntityInternSetCamera()
  X_CLEAR_Z
  X_SETTEXTURE 0, -1
  X_MOVEMENT EntityGetX(camera.obj), EntityGetY(camera.obj), EntityGetZ(camera.obj)
  X_DRAWOBJ 0, 0

  EntityDrawSystem()
 

Also vor dem Zeichnen der Skybox muss man wohl EntityInternSetCamera() aufrufen. Das funktioniert zwar ganz prächtig, widerstrebt mir aber etwas, weil diese Funktion eigentlich nur zur internen Nutzung dienen sollte. Stilvoller wäre es meiner Meinung nach Skybox, Skysphere oder wie auch immer ins ES einzubinden (z.B. als T3DEntity.what = 9).
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jul-02
Gute Idee!
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-02
Ja, aber wie ist die Definition für die Textur dann? Mach einen guten Vorschlag, dann kommt die Skybox rein.
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2008-Jul-02
häh? Versteh deine Frage nicht ganz Gernot. EntityApplyTexture() auch für die Skybox. Skybox als Child der Camera für die Position.

Definition der Skybox evtl so?
Code: GLBasic [Select]
FUNCTION EntityCreateSkybox: sz
  LOCAL num
  num = EntityCreateCube(sz)
  g3DObj[num].what = 9
  RETURN num
ENDFUNCTION
 

bliebe dann nur noch die Frage, wo das X_CLEAR_Z hinkommt, da steige ich im Moment noch nicht so recht durch
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-03
Aber: Wie sieht die Skybox-Textur aus? Wo ist oben, links usw....
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2008-Jul-03
ahhh erwischt. Jetzt tritt meine beschränkte Kenntnis wieder offen zutage.

Da ich mich noch immer im Space-Shooter-Stadium befinde, hab ich mir ja auch nur dafür eine Skybox gezimmert. Denke diese Frage stellt sich dort nicht, die Textur ist i.d.R. ein einfaches Sternenfeld und die Ausrichtung wurscht, weil man die Blickrichtung eh in alle Richtungen drehen kann.

Somit kann ich also leider keinen Vorschlag machen, weil ich andere Sachen noch nicht probiert habe. Ist aber auch nicht so wichtig, weil man ja auch ohne ES einfache Skyboxen zimmern kann.
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-12
okay mädels, ich mach zwar momentan in C++ und darksdk, aber ich misch hier doch wieder mit.
Gernot, wie schauts mit pivotkollisionen aus?
und ner newton anbindung?
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jul-12
Leichte Probleme in C++ und GDK ?
Schon gemerkt, dass es garnicht mal so leicht ist, Text anzuzeigen ;)

zb. wie in GLB : Test$+Text2$ :P
 
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-12
also ich musste bisher noch keinen text darstellen.
bin grad an etwas anderem dran, okay fürs debugging dann.
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jul-13
Dann schau dir schonmal das an :

Code: GLBasic [Select]
// FPS anzeigen in GDK
char TXT[265] = "";
strcpy(TXT,"FPS: ");
strcat(TXT,dbStr( dbScreenFPS() );

dbText(0,0,TXT);
 

Viel spass :D

Da bleib ich lieber bei GLB, da kann man mit Strings jonglieren wie man will :D
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-13
naja, ich hab ja hier im ES gepostet.nicht ohne grund....grins  :booze:
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jul-13
also doch gemerkt das die anderen Sprachen net so sind ;)
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-13
ähm nöö, dachte nur hier geht nix weiter im ES seid ich weg bin, das ist eigentlich der einzige grund.
Title: Re: 3D Entity System [DE]
Post by: BumbleBee on 2008-Jul-13
Welcome back.  Hast du uns schon vermisst? ;)
Gernot will mal sehen das die Leute was mit dem ES machen. Es ist ja eigentlich auch alles möglich. Deswegen geht's auch nicht weiter. =D

Cheers
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-13
naja, ich brauche wie gesagt pivotkollisionsfähigkeit.
und das problem mit der .ddd datei, was gernot ja schon kennt.
kann nämlich sein, dass ich dann keine animationsframes nutzen kann.
naja, die pivotkollisionen brauch ich auf jeden fall, sonst kann ich nix machen.
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jul-13
Ich brauch nen Porsche, sonnst kann ich nicht autofahren! Denk mal rüber nach!
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-14
ähm es gibt keine alternative dazu, höchstens schildbürgerhafte sinnlosspherenerstellerei.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-14
Gehen Pivot Kollisionen? Ich meine ja.
-> Zumindest steht's so in der Logdatei.
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-14
wo steht das?
also ich hatte das ja zuletzt noch gepostet, und da ging es nicht, bin voll durchs terrain gefallen, wenn ich stattdessen aber ein entitycreatesphere genommen hab, ging es, also gingen pivotkollisionen nicht, es sei denn, du hast es in den letzten 1-2 wochen korrigiert.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-14
Poste mal ein Beispiel.
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-14
bitteschön, is noch ein code, wo ich rumprobiert hab, der aber die kollisionen beinhaltet, wenn auch in einfacher form.

Code: GLBasic [Select]

LOCAL gplayer = 101
LOCAL ground = 102


light = EntityCreateLight(RGB(255,255,255) )
camera=EntityCreateCamera()
          EntitySetCameraRange(camera,1,1000)

level = EntityLoadMesh("level.ddd")
     leveltex=EntityLoadTexture("level.bmp")
          EntityApplyTexture(level, leveltex, -1 )
                   EntitySetGroup(level, ground)

juru = EntityLoadMesh("juru.ddd")
     jurutex=EntityLoadTexture("juru.bmp")
          EntityApplyTexture(juru, jurutex, -1 )


stumpf = EntityLoadMesh("stumpf.ddd")
     stumpftex = EntityLoadTexture("stumpf.bmp")
          EntityApplyTexture(stumpf, stumpftex, -1)
               EntityScale(stumpf, 20, 20, 20)


stamm = EntityLoadMesh("stamm.ddd")
     stammtex = EntityLoadTexture("stamm.bmp")
          EntityApplyTexture(stamm, stammtex, -1)

pivotfuss = EntityCreatePivot()
              EntityCollisionSetRadius(pivotfuss, 1)
                 EntitySetGroup(pivotfuss, gplayer)



EntitySetPosition(pivotfuss, 0, 1, 0)
EntitySetPosition(level, 0, 0, 0)
EntitySetPosition(stumpf, -2, 10, -2)
EntitySetPosition(stamm, 10, 19, 0)
EntitySetPosition(camera, 0, 7, -15)
EntitySetRotation(stamm, 0, 70, 0)
EntitySetPosition(juru, 0, 10, 5)
EntitySetRotation(camera, 15, 0, 0)

EntityParent(pivotfuss, juru)
EntityParent(light, juru)
EntityParent(camera, juru)
EntityTranslate(light, 0, 2, -2)

EntityEnable(camera, TRUE)

//Kollisionsgruppen initialisieren
EntityAddCollision(gplayer, ground, 0)

//
EntityDebug(TRUE)
WHILE TRUE
GOSUB Kollisionen
GOSUB Movement
GOSUB UpdateMovement
EntityDrawSystem()
EntityUpdateCollisions()
X_MAKE2D
PRINT updown, 10, 10
PRINT EntityGetY(juru), 10, 20
SHOWSCREEN
WEND

SUB Kollisionen:
             LOCAL ncol = EntityCollisionCount(pivotfuss)
              FOR i = 1 TO ncol
                 IF EntityCollisionEntity(pivotfuss, EntityGetName$(i)) = level THEN collevel = 1
              NEXT
ENDSUB

SUB Movement:
//Sprung
            IF collevel = 1
               updown = 0.01
               collevel=0
             IF KEY(57) THEN updown=0.5
            ELSE
               updown=updown-0.02

            ENDIF

// drehen und bewegen
            IF KEY(203) THEN jy = 1
            IF KEY(205) THEN jy = -1
            IF KEY(200) THEN jz = 0.5
            IF KEY(208) THEN jz = -0.5

ENDSUB


SUB UpdateMovement:

EntityRotate(juru, 0, jy, 0)
EntityMove(juru, 0, 0, jz)
EntityMove(juru,0,updown,0)
EntityRotate(stamm, 0, 0, 1)
jy=0;jz=0

ENDSUB
 

mach aus dem
Code: GLBasic [Select]
pivotfuss = EntityCreatePivot()
mal eine sphere, da funktioniert es.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-14
Wirf mal die Objekte raus und mach "cubes", damit ich ohne Modelle testen kann.
Bitte zunächst auch statt EntityScale das Objekt korrekt skaliert erstellen.
Du verwendest EntityTranslate, also ist Deine Datei nicht aktuell.

Ich lad' nochmal alles neu hoch, damit wir gleiche Quellen haben. Der Würfel ist bei mir auf dem "Level" stehen geblieben.
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-14
okay ich mach mal cubes, bzw. ich schieb hier mal das projekt hoch.

mach aus dem pivot ein sphere, und das entitytranslate hab ich selber in das ES gemacht, also ein eigener befehl, aber nicht so tragisch.

bei sphere funktioniert es, bei pivot nicht.

p.s. du kannst die t3dentity.gbas, auch einfach hier in einen post einfügen, bzw. nen link dazu posten.die beispiele haben sich ja nicht weiter verändert, denk ich mal.

so, hier das projekt.
http://www.zshare.net/download/153015562a5035ab/


p.s. weil du geschrieben hast, statt zu skalieren, das modell richtig skaliert erstellen, das ist immer so eine sache, diese umständliche umwandlung in .ddd ist schon etwas nervig, das wird wohl niemand hier abstreiten.bin immer noch für eine .3ds unterstützung.
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-16
keine reaktion?!?
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-16
Hoppla, hab' ich übersehen!
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-16
und gernot, machst du es?

wie schauts mit dem newton zeugs aus, erstmal auf eis gelegt, oder kann man demnächst damit rechnen?
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-16
bist online? Geh in Chat, wenn Du Zeit hast...
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-17
okay bis auf das ddd problem hab ich erstmal alles.
aber ich animier den sonic erstmal nicht, weil das vergebene liebesmüh ist, wenn es dann eh nicht geht.

achja, man kann ja auch nur eine textur für so ein ddd nehmen, richtig?
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jul-17
Auf was willste den sonnst ne Textur machen?
Title: Re: 3D Entity System [DE]
Post by: Sebastian on 2008-Jul-17
Ich glaube er meinte eher:

"achja, man kann ja auch nur eine (1!!!!!) textur für so ein ddd nehmen, richtig?"

Sprich: "Was ist mit Multitexturing?"

Antwort: Ohne Multitextur Shader (siehe Gernots Thread hier bei den 3D Snippets) nur eine Textur, ja.
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2008-Jul-17
War übrigends mein Shader was da Gernot benutzt hat :D
Ja ihr hört richtig!
Selbst abgeschrieben :D
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-18
ich hab da jetzt grad mit meinen kollisionen zu tun, die sind nämlich noch nicht fertig, hatte keine so richtige muße wegen dem animationsdesaster.
egal, schaut es euch mal an, hoffe ist nicht zu komplex.
und zwar war mein code zwar erst mit einem extra pivot, hab aber jetzt direkt die spielfigur(juru) zum kollidieren mit einer box genommen.
die box is auch nur derweil da, als beispiel halt.
ich speicher zwischendurch die koordinaten des spielers, und bei kollision mit der besagten box, soll die position auf die vorhergehenden werte gesetzt werden.
ich weiß, is nur ein kleiner fehler meinerseits wahrscheinlich, aber dat funktioniert nicht so ganz.
kollisionstyp hab ich sphere-mesh gelassen, müsste ja funktionieren, denk ich mal.
tuts aber nicht, ich kann in die box laufen, aaaber wenn ich in der box springe, kommt es erst zu einer kollision, die dann extrem ausartet, aber schaut selbst.
hier der code, und nebendran das beispiel.
Code: GLBasic [Select]
LOCAL gplayer = 101
LOCAL ground = 102


light = EntityCreateLight(RGB(255,255,255) )
camera=EntityCreateCamera()
          EntitySetCameraRange(camera,1,1000)

level = EntityLoadMesh("level.ddd")
     leveltex=EntityLoadTexture("level.bmp")
          EntityApplyTexture(level, leveltex, -1 )
                   EntitySetGroup(level, ground)

juru = EntityLoadMesh("juru.ddd")
     jurutex=EntityLoadTexture("juru.bmp")
          EntityApplyTexture(juru, jurutex, -1 )
           EntitySetGroup(juru, gplayer)

box = EntityCreateCube(5)
           EntitySetGroup(box, ground)

stamm = EntityLoadMesh("stamm.ddd")
     stammtex = EntityLoadTexture("stamm.bmp")
          EntityApplyTexture(stamm, stammtex, -1)

pivotfuss = EntityCreatePivot()
              EntityCollisionSetRadius(pivotfuss, 1)
                 EntitySetGroup(pivotfuss, gplayer)

                 

EntitySetPosition(pivotfuss, 0, 1, 0)
EntitySetPosition(level, 0, 0, 0)
EntitySetPosition(box, -2, 10, -2)
EntitySetPosition(stamm, 10, 19, 0)
EntitySetPosition(camera, 0, 7, -15)
EntitySetRotation(stamm, 0, 70, 0)
EntitySetPosition(juru, 0, 10, 5)
EntitySetRotation(camera, 15, 0, 0)


EntityParent(pivotfuss, juru)
EntityParent(light, juru)
EntityParent(camera, juru)
EntityTranslate(light, 0, 2, -2)

EntityEnable(camera, TRUE)

//Kollisionsgruppen initialisieren
EntityAddCollision(gplayer, ground, 0)

//
EntityDebug(TRUE)
WHILE TRUE
GOSUB Kollisionen
GOSUB Movement
GOSUB UpdateMovement
EntityDrawSystem()
EntityUpdateCollisions()
X_MAKE2D
PRINT updown, 10, 10
PRINT EntityGetY(juru), 10, 20
SHOWSCREEN
WEND

SUB Kollisionen:
     
             
             LOCAL ncol = EntityCollisionCount(pivotfuss)
              FOR i = 1 TO ncol
                 IF EntityCollisionEntity(pivotfuss, EntityGetName$(i)) = level THEN collevel = 1
               NEXT
              LOCAL ncol = EntityCollisionCount(juru)
              FOR i = 1 TO ncol
                 IF EntityCollisionEntity(juru, EntityGetName$(i)) = box THEN boxcolli = 1
                         
              NEXT
ENDSUB

SUB Movement:
//Sprung
            IF collevel = 1
               updown = 0.01
               collevel=0
             IF KEY(57) THEN updown=0.5
            ELSE
               updown=updown-0.02

            ENDIF



// drehen und bewegen
            IF KEY(203) THEN jy = 1
            IF KEY(205) THEN jy = -1
            IF KEY(200) THEN jz = 0.5
            IF KEY(208) THEN jz = -0.5

ENDSUB


SUB UpdateMovement:
//sidecoll
IF boxcolli = 1
   EntityMove(juru, tempx, 0, tempz)
   side = 0
   ENDIF    

tempx=EntityGetX(juru)
tempz=EntityGetZ(juru)

EntityRotate(juru, 0, jy, 0)
EntityMove(juru, 0, 0, jz)
EntityMove(juru,0,updown,0)
EntityRotate(stamm, 0, 0, 1)
jy=0;jz=0

ENDSUB

 

und nicht wundern, is bissi spät, wollte meinen ordentlicheren code nicht verwurschteln, deswegen probier ich immer noch an diesem salatcode.
hier einfach runterladen und schauen.
http://www.glbase.de/test.rar
Title: Re: 3D Entity System [DE]
Post by: Sebastian on 2008-Jul-18
Ok,

1. bitte benutz TABs
2. du musst schon boxcolli wieder auf 0 setzen, wenn du auf eine Kollision reagiert hast  =D
3. der Code funktioniert immer noch nicht astrein, Kollision funktioniert auch nur beim Springen. Ich hasse das Entity System  :whistle:

Code: GLBasic [Select]
GLOBAL boxcolli,collevel,camera,level,leveltex,juru,jurutex
GLOBAL box,stamm,stammtex,pivotfuss,updown,jy,jz,tempx,tempz
GLOBAL side,light,shader,glob,only_shadow,tempy

LOCAL gplayer = 101
LOCAL ground = 102

light           = EntityCreateLight(RGB(255,255,255) )
camera          = EntityCreateCamera()
                        EntitySetCameraRange(camera,1,1000)

level           = EntityLoadMesh("level.ddd")
leveltex        = EntityLoadTexture("level.bmp")
                        EntityApplyTexture(level, leveltex, -1 )
                        EntitySetGroup(level, ground)

juru            = EntityLoadMesh("juru.ddd")
jurutex         = EntityLoadTexture("juru.bmp")
                        EntityApplyTexture(juru, jurutex, -1 )
                        EntitySetGroup(juru, gplayer)

box                     = EntityCreateCube(5)
                        EntitySetGroup(box, ground)

stamm           = EntityLoadMesh("stamm.ddd")
stammtex        = EntityLoadTexture("stamm.bmp")
                        EntityApplyTexture(stamm, stammtex, -1)

pivotfuss       = EntityCreatePivot()
                        EntityCollisionSetRadius(pivotfuss, 1)
                        EntitySetGroup(pivotfuss, gplayer)

EntitySetPosition(pivotfuss, 0, 1, 0)
EntitySetPosition(level, 0, 0, 0)
EntitySetPosition(box, -2, 10, -2)
EntitySetPosition(stamm, 10, 19, 0)
EntitySetPosition(camera, 0, 7, -15)
EntitySetRotation(stamm, 0, 70, 0)
EntitySetPosition(juru, 0, 10, 5)
EntitySetRotation(camera, 15, 0, 0)
EntityParent(pivotfuss, juru)
EntityParent(light, juru)
EntityParent(camera, juru)
EntityTranslate(light, 0, 2, -2)
EntityEnable(camera, TRUE)
EntityAddCollision(gplayer, ground, 0)
EntityDebug(TRUE)
LOADFONT "smallfont.png",0
WHILE TRUE
        Movement()
        Kollisionen()
        UpdateMovement()
        EntityDrawSystem()
        EntityUpdateCollisions()
        X_MAKE2D
        SETFONT 0
        PRINT updown, 10, 10
        PRINT EntityGetY(juru), 10, 20
        SHOWSCREEN
WEND

FUNCTION Kollisionen:
        LOCAL ncol,i
       
        ncol = EntityCollisionCount(pivotfuss)
        FOR i = 0 TO ncol
                IF EntityCollisionEntity(pivotfuss, EntityGetName$(i)) = level THEN collevel = 1
        NEXT
       
        ncol = EntityCollisionCount(juru)
    FOR i = 0 TO ncol
        IF EntityCollisionEntity(juru, EntityGetName$(i)) = box THEN boxcolli = 1
    NEXT
ENDFUNCTION

FUNCTION Movement:
        IF collevel = 1
                updown = 0.01
                collevel=0
                IF KEY(57) THEN updown=0.5
        ELSE
                updown=updown-0.02
        ENDIF

        IF KEY(203) THEN jy = 1
        IF KEY(205) THEN jy = -1
        IF KEY(200) THEN jz = 0.5
        IF KEY(208) THEN jz = -0.5
ENDFUNCTION

FUNCTION UpdateMovement:
        IF boxcolli = 1
                EntityMove(juru, tempx, 0, tempz)
                boxcolli = 0
                side = 0
        ELSE
                tempx = EntityGetX(juru)
                tempy = EntityGetY(juru)
                tempz = EntityGetZ(juru)
                EntityRotate(juru, 0, jy, 0)
                EntityMove(juru, 0, 0, jz)
                EntityMove(juru,0,updown,0)
                EntityRotate(stamm, 0, 0, 1)
                jy=0;jz=0
        ENDIF
ENDFUNCTION
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-18
[edit] zum thema 1 textur.beispiel, ein level aus verschiedenen modellen, mit mehreren texturen/materialien als eine .3ds datei.wird nich nach .ddd gehen, oder?

ja boxcolli hatte ich auf null gesetzt, hatte nur vorhin das ganze umbenannt, und das vergessen
und du musst zuerst kollisionen ausführen und dann den rest.
dann flackert es nicht so stark.

da flackern bekomm ich immer noch nicht völlig weg, vielleicht findet jemand anderes eine lösung um die kollisionen mit dem sprung und der restlichen bewegung zu verknüpfen, ohne das es flackert.

naja und bei den kollisionen, das muss sich dann wohl mal gernot ansehen, is sicher nen klacks für ihn

@gernot: mein lieber lieber gernot, kannst du eventuell bei den kollisionen noch irgendwie eine reaktion auf eine kollision einbauen?
             so einen stop oder sliding parameter bei kollision.
             wäre sehr hilfreich, da hätte man das problem mit dem ruckeln bei kollisionen mit dem boden und der schwerkraft, sowie der
             noch dranhängenden sprungroutine nicht.
             also "stop" wäre cool für den anfang

vielleicht gleich bei addcollision mit rein, also
Code: GLBasic [Select]
EntityAddCollision: group_src, group_dest, collision_mode, reaction
0= nichts (oder reaction optional machen)
1= stop
usw.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-18
Fehler 1+2:
EntityCollisionEntity
// \param icollision - index of the collision. Must be in range 0..EntityCollisionCount()-1

Code: GLBasic [Select]
   FOR i = 0 TO ncol-1
      IF EntityCollisionEntity(pivotfuss, i) = level THEN collevel = 1
   NEXT
   ... den unteren selbst machen
 

Der EntityGetName$ ist nur dazu da, dass Du den irgendwo inschreiben kannst.

Irgendwas stimmt trotzdem noch nicht...




Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-19
ja eben, irgendwas stimmt nicht, aber ist so ein reactionsparameter möglich, oder zu kompliziert?

WÄRE KLASSE!

das mit den kollisionen hab ich nu gerafft, bzw. mir richtig angewöhnt, aaaber eben diese boxkollision, bzw. mit einem anderen objekt, naja naja.

bei y schien es ja noch zu gehen, wenn man aber alte posis wiederherstellen will, gibts probleme, naja heut ist ja samstag, vielleicht bekommen wir das ja zusammen heute noch hin.
wär klasse.

Gernot, schaust es dir mal an? Also die Kollisionen brauch ich wirklich.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2008-Jul-19
Ja, aber heut und morgen nicht.
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-19
danke dir, alles klar.
vielleicht irgendeine ahnung, warum das nicht funktioniert mit den kollisionen?
ich bräuchts und da könnt ich ja mal selber auf die suche gehen.


sooooo, erstmal ohne quellcode, was sagt ihr denn zu meinen noch verbesserungswürdigen kollisionen?
muss noch bisschen probieren, aber es funktioniert schonmal zum großteil.

http://www.glbase.de/koll.rar

achja, sprung ist space taste, der rest via cursor tasten...
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2008-Jul-21
ich muss ma eben doppelt posten, nic dass es sonst jemand übersieht.
brauch halt noch den reactionsparameter bei collision.

achja, hab gestern ein tolles phänomen bei dem ddd exporter für ac3d erlebt.

ein damit erstelltes objekt, bewegte sich eigenständig, ohne jeglichen code dafür, immer in abhängigkeit von der camera.
ich habs nur positioniert, und es blieb nicht statisch, erst der normale 3dconverter hats hinbekommen.

wo wir gleich dabei sind, eventuell irgendwelche ideen, gernot, um die animationen noch zu verfeinern?

achja, bekomm ich irgendwie dieses metallischen effekt auf meine spielfigur?beispsielsweise mitten diesem spheremapping?
aber eben fürs entitysystem?

kann du da mal schnell was machen?

und ich würde noch gern sprites so plazieren wollen, bzw. animieren, dass es ausschaut, als wenn sie in die 3d welt gehören.
also stell dir vor, ich sammel ein item ein, und hätte dann als folge eine spriteanimation an genau dieser stelle.

aber das muss ja von der größe, position etc. auch irgendwie passen.


achja, und hier mal der code für mein beispiel oben.
ist halt noch nicht perfekt, aber ich nehme gern jeden ratschlag entgegen.

Code: GLBasic [Select]

LOCAL gplayer = 101
LOCAL glevel = 102


light = EntityCreateLight(RGB(255,255,255) )
camera=EntityCreateCamera()
          EntitySetCameraRange(camera,1,1000)

level = EntityLoadMesh("level.ddd")
     leveltex=EntityLoadTexture("level.bmp")
          EntityApplyTexture(level, leveltex, -1 )
                   EntitySetGroup(level, glevel)

juru = EntityLoadMesh("juru.ddd")
     jurutex=EntityLoadTexture("juru.bmp")
          EntityApplyTexture(juru, jurutex, -1 )
           EntityCollisionSetRadius(juru, 2)
           EntitySetGroup(juru, gplayer)

box = EntityCreateCube(7)
           EntitySetGroup(box, glevel)

boxa = EntityCreateCube(10)
           EntitySetGroup(boxa, glevel)

pivotfuss = EntityCreatePivot()
           EntityCollisionSetRadius(pivotfuss, 1)
            EntitySetGroup(pivotfuss, gplayer)

pivotvorn = EntityCreatePivot()
            EntitySetGroup(pivotvorn, gplayer)
            EntityCollisionSetRadius(pivotvorn, 1)

pivothinten = EntityCreatePivot()
              EntitySetGroup(pivothinten, gplayer)
              EntityCollisionSetRadius(pivothinten, 1)


EntitySetPosition(pivotvorn, 0, 1.5, 1)
EntitySetPosition(pivothinten, 0, 1.5, -1)
EntitySetPosition(pivotfuss, 0, 1, 0)
EntitySetPosition(level, 0, 0, 0)
EntitySetPosition(box, -2, 8, -2)
EntitySetPosition(boxa, 4, 8, 2)
EntitySetPosition(camera, 0, 7, -15)
EntitySetPosition(juru, 0, 9, 8)
EntitySetRotation(camera, 15, 0, 0)


EntityParent(pivotvorn, juru)
EntityParent(pivothinten, juru)
EntityParent(pivotfuss, juru)
EntityParent(light, juru)
EntityParent(camera, juru)
EntityTranslate(light, 0, 2, -2)

EntityEnable(camera, TRUE)

//Kollisionsgruppen initialisieren
EntityAddCollision(gplayer, glevel, 0)

//

WHILE TRUE
GOSUB Kollisionen
GOSUB Movement
GOSUB UpdateMovement
EntityDrawSystem()
EntityUpdateCollisions()
SHOWSCREEN
WEND

SUB Kollisionen:

                IF EntityCollisionCount(pivotvorn) > 0 THEN pivvorn = 0.5
                 IF EntityCollisionCount(pivothinten) > 0 THEN pivhin = 0.5
                  IF EntityCollisionCount(pivotfuss) > 0 THEN collevel = 1
ENDSUB

SUB Movement:


//Sprung
            IF collevel = 1
               updown = 0.01
               collevel=0
             IF KEY(57) THEN updown=0.5
            ELSE
               updown=updown-0.02

            ENDIF


// drehen und bewegen
            IF KEY(203) THEN jy = 1
            IF KEY(205) THEN jy = -1
            IF KEY(200) THEN jz = 0.5 - pivvorn
            IF KEY(208) THEN jz = -0.5 + pivhin

ENDSUB


SUB UpdateMovement:


EntityRotate(juru, 0, jy, 0)
EntityMove(juru, 0, 0, jz)
EntityMove(juru,0,updown,0)
jy=0;jz=0;pivvorn=0;pivhin=0

ENDSUB
 
Title: Re: 3D Entity System [DE]
Post by: Hemlos on 2008-Oct-14
Nice library Gernot, i think i might be able to use the matrix stuff...maybe a 3d heli flight sim....im going to try it one of these days...

PS. the program that it has, is bugged...i used [ and ] and both make the program crash.
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2009-Jan-26
Hi Gernot!
Hab mir grad nochmal das Entity angeguckt...
Das ist ja jetzt der HAMMER !

Kleiner vorschlag von mir:

Ich mach ein kleines Spielchen( Nix Großes, so ein 1-2 Tagesprojekt ), dann reden wir über die feste Einbindung ?
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2009-Jan-26
Deal!
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2009-Jan-26
WOHOO :D :good:
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2009-Feb-03
Es wäre manchmal praktisch, wenn die Objekterzeugung (ddd) vom Entitysystem abgekoppelt wäre. Wenn ich z.B. Laserschüsse erstelle, finde ich es etwas überflüssig, jedesmal einen neuen Kubus oder was auch immer ich dafür nehme, erstellen zu lassen, da die Objekte alle gleich aussehen. Es gibt zwar die Funktion EntityDuplicate, die bedingt jedoch, daß bereits ein entsprechendes Objekt im Entitysystem vorhanden ist. D.h. einen Laserschuss müsste ich immer in petto halten, um ihn bei Bedarf zu duplizieren, müsste ihn in der Zwischenzeit jedoch so verstecken, daß er nicht angezeigt wird.

Für den Eigenbedarf habe ich mir zwei Funktionen gebastelt, mit denen man 3D-Objekte außerhalb des Entity-Systems erstellen und dann im Entity-System einbinden kann.

Code: GLBasic [Select]
// ------------------------------------------ //
//! Add an object to the Entity system which was made outside the Entity system (e.g. with X_LOADOBJ)
//! You can call EntityGetFreeMesh before to get a free number
// param obj - object number created with X_LOADOBJ or X_OBJSTART..X_OBJEND
// \return the index of the Entity object
// \sa EntityGetFreeMesh
// ------------------------------------------ //
FUNCTION EntityCreateOjbect: obj

        LOCAL t AS T3DEntity
        LOCAL nc

        IF X_NUMFACES(obj) = 0 THEN RETURN -1
        t.what = 0
        t.tex = -1
        t.ddd = obj
        RETURN EntityAddInternal(t)

ENDFUNCTION
 

Diese bindet einfach ein Objekt, daß ich z.B. mit X_LOADOBJ oder X_OBJSTART..X_OBJEND erstellt habe, in das Entitysystem ein. Natürlich benötige ich dazu eine freie Objektnummer. Auch dafür habe ich dann eine eigene Funktion erstellt, die mir die nächste freie Nummer zurückliefert analog EntityGetFreeTexture(ist in den vorhandenen Funktionen immer fest verdrahtet)

Code: GLBasic [Select]
// ------------------------------------------ //
//! Get a free mesh slot to use for X_LOADOBJ, X_OBJSTART..X_OBJEND
//! or EntityCreateObject
// \return the index of the mesh
// \sa EntityCreateObject
// ------------------------------------------ //
FUNCTION EntityGetFreeMesh:
        LOCAL nc
        LOCAL obj = 1
        // Get free object slot
        nc = X_NUMFACES(obj)
        WHILE nc > 0
                INC obj, 1
                nc = X_NUMFACES(obj)
        WEND
        RETURN obj
ENDFUNCTION
 

Wäre es evtl. eine Überlegung wert, solche Funktionen in das ES mit einzubinden?
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2009-Sep-24
Gernot?

Steht das eigentlich noch mit der Absicht, das ES fest einzubinden? In abesehbarer Zeit? Oder ist das erst einmal nach hinten verschoben?
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2009-Sep-24
Wenn es einer nutzen w?rde, ich g?be Support daf?r. Ob man's intern einbaut oder als gbas anbietet ist ja egal.
Arbeitet aber keiner damit.
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2009-Sep-24
Doch schon. Nur komme ich im Moment wg. Hausbau, Arbeit etc. nicht viel zum programmieren. Versuche zur Zeit die Funktionen einzubauen, die mir fehlen.

Aber ok dann. Dann arbeite ich weiter mit der bisherigen Version. Falls ich etwas zustande bringen sollte, gebe ich Laut.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2009-Sep-24
Ja, super! Wenn Du Hilfe brauchst, einfach rufen.
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2009-Sep-24
Gernot es arbietet keiner damit weil es nicht eingebunden ist ;)
Glaub mir das ist Fakt.
"Wenn" du das mal einbinden "solltest", w?rdest du dich wunder, was auf einmal f?r nen Ansturm auf 3D da w?r.

Trust me!
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2009-Sep-25
Das ist doch Schmarrn. Man kann eine Bibliothek doch auch so nutzen. Ich versteh das nicht.
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2009-Sep-25
Schranzor Recht geb!

Das hat absolut gar nichts damit zu tun, da? man es so genau so gut nutzen kann wie fest eingebaut und sogar noch die Freiheit, die Funktionaltit?t anzupassen, sondern das ist reine Psychologie :)
Fest implementierte Befehle wirken auf die meisten Programmierer (mich eingeschlossen) seri?ser als zugestrickte Bibliotheken, vor allem, wenn diese Bibliotheken nicht aus der eigenen Tastatur stammen.

Nat?rlich ist das in gewisser Weise bl?dsinnig, aber das sind menschliche Verhaltens- und Denkweisen allzu h?ufig ;)

Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2009-Sep-25
Erschwerend kommt noch hinzu, das die meisten keinen schimmer haben dass es das ES gibt!
Ist es drin sehen die von Anfang an, OK da gibts ein EntitySystem, das ist cool das nutz ich auch...
Wenn einer voll auf 3D aus ist, wird er leider immernoch auf BB zur?ckgreifen  :|
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2009-Sep-25
aber im ES fehlen noch Sachen, oder? Ich w?rde das gerne vorher alles gecheckt haben.
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2009-Sep-25
ja, einiges fehlt sicherlich noch, wo ich schon mal rumgespielt hatte, waren folgende Punkte

- Attribut "active" ist gef?hrlich, weil z.B. auf inaktive Kameras ?berschrieben werden durch neu eingef?gte Entities. Habe versucht, da? man mit einem weiteren Attribut "enabled" zu l?sen. Klappt auch, musste etliche Funktionen darauf anpassen. Allerdings gef?llt mir diese L?sung nicht sonderlich.

- Hinzuf?gen von selbsterstellten Objekten (X_OBJSTART ... X_OBJEND) in das System (hatte ich schon mal beschrieben)

- Beleuchtung, geht nur mit 360?, hatte hier den CUTOFF-Winkel variabel eingestellt

Was noch g?nzlich fehlt:
- Sprites (f?r Partikel/Explosionen etc.), ggfs. Partikelsystem
- Skybox /-sphere /-plane etc
- evtl. Landschaftsgenerierung
- Multitexturierung (mit GL_ARB_multitexture ??)

Aber das ist sicherlich noch nicht alles. Vielleicht ist es wirklich sinnvoll, erst einmal ein Projekt damit zu starten. Dann sieht man wohl besser, woran es noch hakt.

Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2009-Sep-25
Ich verstehe die "active" frage nicht.

X_SPRITE
Skybox
shader

die 3 m?ssen wohl noch rein.
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2009-Sep-25
Also skybox/Skydome w?r noch gut ja.

Dann wenn es eingebunden ist einen "Easywrapp" von Newton druff und die 3D-Ebene beginnt zu explodieren ;)
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2009-Sep-25
zur Konfusion wegen "active":

mit EntityEnable kann man die Sichtbarkeit von Objekten steuern. Wenn aber jetzt ein Objekt disabled ist "active = FALSE), wird es m?glicherweise beim Einf?gen von neuen Objekten mit EntityAddInternal ?berschrieben.

Moru ist z.B. im englischen Thread zum ES dar?ber gestolpert. Er hatte sich zu Beginn mehrere Kameras erstellt, auf die er im sp?teren Spielverlauf wieder zugreifen wollte, war aber ?berrascht, da? seine inaktiven Kameras schon wieder durch neu eingef?gte Objekte ?berschrieben worden waren. Das erzeugt nat?rlich Verwirrung. Von daher w?re es imo sinnvoller, zwischen "inaktiv" setzen eines Objektes und tats?chlichem L?schen eines Objektes im Sinne von "zum ?berschreiben freigegeben" zu unterscheiden. Ich hoffe, das macht es verst?ndlich.

Shader?
Die Funktionen ..LoadShader, ..ApplyShader und ..FreeShader sind doch drin??
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2009-Sep-25
Jopp shader ist da =D
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2009-Sep-28
zur Konfusion wegen "active":

mit EntityEnable kann man die Sichtbarkeit von Objekten steuern. Wenn aber jetzt ein Objekt disabled ist "active = FALSE), wird es m?glicherweise beim Einf?gen von neuen Objekten mit EntityAddInternal ?berschrieben.

Das ist dann ein Bug, oder?
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2009-Sep-28
naja, war ja wohl so gewollt von dir :)

Vorschlag:

Neues Attribut "deleted"

EntityEnable --> setzt Enabled auf true/false --> wird bei false duch EntityAddInternal NICHT ?berschrieben
EntityFree --> setzt deleted auf true --> kann ?berschrieben werden.
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-05
Did this come out of beta, anyone been using it?

I noticed when "[""]" are used it crashed the demo?
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Feb-05
Does it crash, still?
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-05
Yep, maybe I used the wrong link? I used the one at the beginning of this thread?
Title: Re: 3D Entity System [DE]
Post by: Moru on 2010-Feb-05
I used it when it was still fresh and it was very easy to use but I haven't tried it since then except for trying to add X_sprites. That test failed since they are displayed centered on the lower middle of the sprite.
Title: Re: 3D Entity System [DE]
Post by: Hemlos on 2010-Feb-08
Does it crash, still?

3des crashes on me when i use the button commands ][
Title: Re: 3D Entity System [DE]
Post by: codegit on 2010-Feb-09
Is the link at the start of this thread the correct and latest version?  :)
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Feb-09
OK - my fault. It was a mixture of several bugs. I fixed them all.

I'll update the sample in post #1 and will provide an update for GLBasic tonight, that fixes the crash (and also memory consumption. The GENX_OBJ did not use free slots when you loaded an object "" or X_OBJSTART; X_OBJEND).
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-09
Thanks Gernot  :good:, downloaded the new sample, it still crashes but this is down to not having the new update, I'll re-try it after I get the GLB update.
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-10
No update last night, problems?
Title: Re: 3D Entity System [DE]
Post by: codegit on 2010-Feb-11
I gave this a quick test. I had problems with EntityLoadTexture and EntityApplyTexture. I was unable to load a .png and then texture a cube.  :(
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Feb-11
Small example, please?
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2010-Feb-11
for me it works as expected. Where did you get a crash? And about the .png file. Are you able to display it with DRAWSPRITE?
Title: Re: 3D Entity System [DE]
Post by: codegit on 2010-Feb-12
SETCURRENTDIR("Media") /// NOTE bump.png is in the MEDIA directory
TestJim()

FUNCTION TestJim:

   camera=EntityCreateCamera()
   EntityEnable(camera, TRUE)
   EntitySetCameraRange(camera,1,4000)


   light = EntityCreateLight(RGB(255,255,255) )
   cube = EntityCreateCube(1)

   EntitySetPosition(camera,0,0,-10)
   EntityParent(light, camera)
   jtex = EntityLoadTexture("bump.png")
   notex=EntityMakeNullTexture()
   EntityApplyTexture(cube,jtex,notex)
   //EntitySetAlpha(cube,0.5)

   WHILE TRUE
      // Draw all entites, using entity camera
      IF (KEY(200))
         EntityMove(camera,0,0,0.2)

      ENDIF
      IF (KEY(208))
         EntityMove(camera,0,0,-0.2)

      ENDIF
      IF (KEY(203))

         EntityRotate(camera,0,1,0)

      ENDIF
      IF (KEY(205))

         EntityRotate(camera,0,-1,0)

      ENDIF
      EntityRotate(cube,1,0,0)
      EntityDrawSystem()
      SHOWSCREEN

   WEND

ENDFUNCTION
Title: Re: 3D Entity System [DE]
Post by: codegit on 2010-Feb-12
Are you able to display it with DRAWSPRITE?

YES ....  8)

SETCURRENTDIR("Media")

LOADSPRITE "bump.png",1
DRAWSPRITE 1,20,20
SHOWSCREEN
WHILE TRUE
WEND
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2010-Feb-12
That's really funny. I just tested your TestJim() function.

If I switch on Debug mode, the texture is shown as expected. If I turn off Debug mode, texture isn't shown ....

Gernot?
Title: Re: 3D Entity System [DE]
Post by: Moru on 2010-Feb-12
Wasn't there something about bumpmapping and NVIDIA drivers that you had to turn off or did they fix that bug?
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2010-Feb-12
hmm don't think so, I guess this bug is because of the internal sprite handling of GLBasic

if you use
Code: GLBasic [Select]
jtex = GENSPRITE()
LOADSPRITE "bump.png", jtex
 
instead of
Code: GLBasic [Select]
jtex = EntityLoadTexture("bump.png")
 

the program works. Texture is shown as it should be.
Title: Re: 3D Entity System [DE]
Post by: codegit on 2010-Feb-12
Thanks. I will try this.
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2010-Feb-12
you can even change the function EntityLoadTexture

just replace
Code: GLBasic [Select]
t = EntityGetFreeTexture()
 
with
Code: GLBasic [Select]
t = GENSPRITE()
 

This works as well, but it's not the same, as EntityGetFreeTexture() starts counting at 1, GENSPRITE at 0. I couldn't see if this makes any difference to the rest of the ES
Title: Re: 3D Entity System [DE]
Post by: codegit on 2010-Feb-12
@Quentin.

Thanks mate. This all works now.  =D
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-15
A big thanks to all involved in this lib, once you work with it you realise just how good it is.  :happy:
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Feb-15
OK, I fixed that. I'll then.
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-15
Trying to get the camera entity working... it does not work currently with multiple cameras, blank screen or invalid entities, when switching.

This function,

Code: GLBasic [Select]
// ------------------------------------------ //
//! Creates an entity that represents a camera.
//! You can have several cameras, though the one used for
//! scene rendering is the one you enabled last. This function
//! enalbes the new camera, thus making it the default camera.
// \return the entity entity
// ------------------------------------------ //
FUNCTION EntityCreateCamera:
LOCAL t AS T3DEntity
LOCAL e
        t.what = 1
        t.name$="camera"
        e = EntityAddInternal(t)
        EntityEnable(e, TRUE)
        RETURN e
ENDFUNCTION

Returns an invalid entity (Entity+1) and EntityEnables twice etc... it should read...

Code: GLBasic [Select]
// ------------------------------------------ //
//! Creates an entity that represents a camera.
//! You can have several cameras, though the one used for
//! scene rendering is the one you enabled last. This function
//! enalbes the new camera, thus making it the default camera.
// \return the entity entity
// ------------------------------------------ //
FUNCTION EntityCreateCamera:
LOCAL t AS T3DEntity
LOCAL e
        t.what = 1
        t.name$="camera"
        RETURN EntityAddInternal(t)
ENDFUNCTION

This get it up and running with cameras attached to entities but I'm have a little trouble with their orientation... they seem to flip when the parent entity is rotated?

I'm still trying to get familiar with the code, so that I can contribute a little.
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2010-Feb-15
the problem is, that with EntityEnable all other cameras are disabled, so only one camera is active at at time. Thus, disabled cameras may be overwritten by following entities, added to the ES.

More ahead in this thread I suggested to add an attribute "deleted" to the ES so that disabled entities are not overwritten unless they are deleted. I already did this work for my own version, but it was deleted when installing Win 7 :(
I'll try to add it again :)
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-15
Sounds like a good idea Quentin.

With the above modification, multiple attached cameras do work but I did not try an introduce new entities, so I seem to have avoided this 'bug' by luck alone...  is this a bug or a feature? :P
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2010-Feb-15
normally it should be possible to switch between different cameras. Do you have an example of this bug?
Title: Re: 3D Entity System [DE]
Post by: FutureCow on 2010-Feb-16
Can someone give a quick summary in English of what the entity system is for?
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Feb-16
In quick, the Entity system changes the handing of 3D objects. The ES (entity system) has a list of currently visible objects. You can then move/rotate/size the objects, and they keep that translation for good. There's one function to apply all the transformations you made to all objects and one to draw them all and one to check whether groups of objects have a collision in the current position.
Sort of a physics engine without physics but only for visuals.

[edit]
Fixed the delete/enable bits.
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-16
normally it should be possible to switch between different cameras. Do you have an example of this bug?

Changing the create camera function stopped the invalid entity when switching between cameras but the camera seems to suffer badly from gimbal lock when attached to another entity.
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2010-Feb-16
Gernot already did a new update, so disabled entities are not overwritten, unless they're released

Regarding your problem:
a small example would be very helpful :)
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-16
Thanks for the offer Quentin, I'll bang up a demo when I'm near my home computer.
Title: Re: 3D Entity System [DE]
Post by: FutureCow on 2010-Feb-16
Thanks Ocean / Kitty Hello for the description. Looks like it would be worth having a play with!
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-17
Thanks for the offer Quentin, I'll bang up a demo when I'm near my home computer.

Attaching a camera to an entity was not causing the gimbal lock, "EntityAlignTowards(cam%, target%)" was causing it. I removed this and all was fine.
Title: Re: 3D Entity System [DE]
Post by: codegit on 2010-Feb-17
Just noticed small mistake in latest source.

FUNCTION EntityFreeMesh: ext
   // find it in the list and just drop it
   FOREACH t IN g3DObj[]
      IF t.ddd = ext
         t.valid_slot% = FALSE
         t.avtice = FALSE
      ENDIF
   NEXT
   // make sure the memory is freed
   X_OBJSTART ext
   X_OBJEND
ENDFUNCTION

t.avtice should be t.active??
 =D
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2010-Feb-17
of course it should :)
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Feb-17
Silly me.
Can you give me an example, where EntityAlignTowards causes a gimbal lock?
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-17
This piece of code shows two bugs...

1) An entity once scaled, does not 'pick' properly, the pick routine seems to detect the unscaled mesh. Test this by changing the scale of the cube.
2) Deformation of the entity when an entity uses "EntityAlignTowards()", see the cube deform as it rotates around the axis, only when EntityAlignTowards() is used. This could explain the gimbal lock I had ealier in a camera, as its parent was the cube?

Code: GLBasic [Select]
        GLOBAL camera

        camera=EntityCreateCamera()

        EntitySetCameraRange(camera, 1, 1000)
        EntityEnable(camera, TRUE)

        cube = EntityCreateCuboid(30,30,30)
        EntityScale(cube,0.2,0.2,0.2) // Take this line out to see Picking working properly
        axis = EntityCreateAxes(20)
        piv = EntityCreatePivot()
        EntitySetPosition(piv, 0, 0, 0)
        EntitySetPosition(camera, 0, 13, -100)
        EntityParent(cube, axis)
        EntityMove(cube, 40, 0, 0)

        EntitySetPickable(cube, TRUE);
        EntitySetName(cube, "cube")
        EntitySetPickable(haupt, TRUE);
        EntitySetName(axis, "axis")

        WHILE TRUE
        EntityRotate(axis, 0.1,0.1,-0.1)
        EntityAlignTowards(cube,axis) // Take this line out to stop the cube getting deformed
        EntityDrawSystem()


        // Camera picking
        MOUSESTATE mx, my, b1, b2
        PRINT "X", mx-8, my-8
        pick = EntityCameraPick(mx, my)
        IF pick>=0
                PRINT "Cam-Pick: " + EntityGetName$(pick), 0,20
        ELSE
                PRINT "No pick", 0,20
        ENDIF

        SHOWSCREEN
        WEND
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-17
See this post please Gernot, this bug affects this lib quite a bit, causing all sort of errors...

http://www.glbasic.com/forum/index.php?topic=4201.0
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Feb-25
I played with sliding collisions now.
The attached thing is a complete Super Monkey Ball example!!

Video:
http://www.youtube.com/watch?v=2C3PvrPsMAM (http://www.youtube.com/watch?v=2C3PvrPsMAM)

Code: GLBasic [Select]
FUNCTION Monkeyball:
LOCAL ball%, cam%, light
LOCAL world%[]
LOCAL vx, vy, vz // ball speed
LOCAL x%,y%
        CLEARSCREEN 0
        FOR x=0 TO 7; FOR y=0 TO 7; IF MOD(x+y, 2) THEN DRAWRECT x*8,y*8,8,8,0xffffff; NEXT; NEXT
        LOCAL checker% = GENSPRITE()
        GRABSPRITE checker,0,0,8*8, 8*8
        CLEARSCREEN 0
        ball% = EntityCreateSphere(6.0, 16)
        EntityCollisionSetRadius(ball, 3.0)
        EntityEnableShadow(ball)
        EntityApplyTexture(ball, checker)

        cam% = EntityCreateCamera()
        EntityParent(cam, ball)
        EntitySetPosition(cam, 0, 5, 33)
        EntityRotate(cam, 0,180,0)

        light = EntityCreateLight(RGB(255,255,255) )
        EntityMove(light, 0,99,0)
        EntityMoveGlobal(ball, 0.1,3,0)

        // make a few "world" objects just to test the ball
        LOCAL ob%
        ob% = EntityCreateCuboid(100,1,100)
        EntityApplyTexture(ob, checker)
        DIMPUSH world%[], ob

        ob% = EntityCreateCylinder(12,2,4,12,3)
        EntityApplyTexture(ob, checker)
        EntityMove(ob, 10,0,0)
        DIMPUSH world%[], ob

        ob% = EntityCreateCuboid(30,1,100)
        EntityApplyTexture(ob, checker)
        EntityMove(ob, -35,1,0)
        EntityRotate(ob, 0,0,-20)
        DIMPUSH world%[], ob

        ob% = EntityCreateCuboid(10,5,10)
        EntityApplyTexture(ob, checker)
        EntityMove(ob, 30,3,0)
        DIMPUSH world%[], ob

        WHILE TRUE
                // Draw all entites, using entity camera
                EntityDrawSystem()
                LOCAL spd = 0.1
                // move the ball
                LOCAL dt = 17.0 * 0.01 // [ms] per frame
                LOCAL mx,my,b1,b2
                MOUSESTATE mx, my, b1, b2
                mx=MIN(340,MAX(300,mx))
                my=MIN(260,MAX(220,my))
                X_MAKE2D
                        DRAWRECT 300,220,40,40,RGB(128,255,128)
                        DRAWRECT mx-4,my-4,8,8,RGB(255,255,255)
                INC vx, .25*(mx-320)*spd*dt
                INC vz, .25*(my-240)*spd*dt
                EntityMove(ball, vx*dt, vy*dt, vz*dt)
               
                vx = vx*0.99
                vz = vz*0.99
                vy = (vy - 9.81*dt*spd) * 0.95

                // sliding collision with all objects
                FOREACH o IN world[]
                        LOCAL nx, ny, nz
                        IF EntityCollisionSlide(ball, o, nx, ny, nz)
                                // mirror the velocity at the contact surface!
                                // v=v - s*n * dot(v,n) / len(n)
                                LOCAL lenn = SQR(nx*nx+ny*ny+nz*nz)
                                LOCAL dot = (vx*nx+vy*ny+vz*nz) / lenn
                                vx = (vx-2*nx*dot)*.95
                                vy = (vy-2*ny*dot)*.95
                                vz = (vz-2*nz*dot)*.95
                               
                                IF vy > 0 // bounced upwards
                                        vy = vy*.60
                                ENDIF
                        ENDIF
                NEXT
                SHOWSCREEN
        WEND
ENDFUNCTION
 
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Feb-25
One word, "WOW!", very nice work Gernot!  :good:

P.S. has the scaling collision ray bug been solved?
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2010-Feb-25
@ Gernot:

Also gibts ne neue Gbas für das Entity?
Title: Re: 3D Entity System [DE]
Post by: codegit on 2010-Feb-26
GLBASIC, just gets better and better.  :enc:  =D
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2010-Feb-27
I played with sliding collisions now.
The attached thing is a complete Super Monkey Ball example!!

Video:
http://www.youtube.com/watch?v=2C3PvrPsMAM (http://www.youtube.com/watch?v=2C3PvrPsMAM)

Code: GLBasic [Select]
FUNCTION Monkeyball:
LOCAL ball%, cam%, light
LOCAL world%[]
LOCAL vx, vy, vz // ball speed
LOCAL x%,y%
        CLEARSCREEN 0
        FOR x=0 TO 7; FOR y=0 TO 7; IF MOD(x+y, 2) THEN DRAWRECT x*8,y*8,8,8,0xffffff; NEXT; NEXT
        LOCAL checker% = GENSPRITE()
        GRABSPRITE checker,0,0,8*8, 8*8
        CLEARSCREEN 0
        ball% = EntityCreateSphere(6.0, 16)
        EntityCollisionSetRadius(ball, 3.0)
        EntityEnableShadow(ball)
        EntityApplyTexture(ball, checker)

        cam% = EntityCreateCamera()
        EntityParent(cam, ball)
        EntitySetPosition(cam, 0, 5, 33)
        EntityRotate(cam, 0,180,0)

        light = EntityCreateLight(RGB(255,255,255) )
        EntityMove(light, 0,99,0)
        EntityMoveGlobal(ball, 0.1,3,0)

        // make a few "world" objects just to test the ball
        LOCAL ob%
        ob% = EntityCreateCuboid(100,1,100)
        EntityApplyTexture(ob, checker)
        DIMPUSH world%[], ob

        ob% = EntityCreateCylinder(12,2,4,12,3)
        EntityApplyTexture(ob, checker)
        EntityMove(ob, 10,0,0)
        DIMPUSH world%[], ob

        ob% = EntityCreateCuboid(30,1,100)
        EntityApplyTexture(ob, checker)
        EntityMove(ob, -35,1,0)
        EntityRotate(ob, 0,0,-20)
        DIMPUSH world%[], ob

        ob% = EntityCreateCuboid(10,5,10)
        EntityApplyTexture(ob, checker)
        EntityMove(ob, 30,3,0)
        DIMPUSH world%[], ob

        WHILE TRUE
                // Draw all entites, using entity camera
                EntityDrawSystem()
                LOCAL spd = 0.1
                // move the ball
                LOCAL dt = 17.0 * 0.01 // [ms] per frame
                LOCAL mx,my,b1,b2
                MOUSESTATE mx, my, b1, b2
                mx=MIN(340,MAX(300,mx))
                my=MIN(260,MAX(220,my))
                X_MAKE2D
                        DRAWRECT 300,220,40,40,RGB(128,255,128)
                        DRAWRECT mx-4,my-4,8,8,RGB(255,255,255)
                INC vx, .25*(mx-320)*spd*dt
                INC vz, .25*(my-240)*spd*dt
                EntityMove(ball, vx*dt, vy*dt, vz*dt)
               
                vx = vx*0.99
                vz = vz*0.99
                vy = (vy - 9.81*dt*spd) * 0.95

                // sliding collision with all objects
                FOREACH o IN world[]
                        LOCAL nx, ny, nz
                        IF EntityCollisionSlide(ball, o, nx, ny, nz)
                                // mirror the velocity at the contact surface!
                                // v=v - s*n * dot(v,n) / len(n)
                                LOCAL lenn = SQR(nx*nx+ny*ny+nz*nz)
                                LOCAL dot = (vx*nx+vy*ny+vz*nz) / lenn
                                vx = (vx-2*nx*dot)*.95
                                vy = (vy-2*ny*dot)*.95
                                vz = (vz-2*nz*dot)*.95
                               
                                IF vy > 0 // bounced upwards
                                        vy = vy*.60
                                ENDIF
                        ENDIF
                NEXT
                SHOWSCREEN
        WEND
ENDFUNCTION
 

NEW GBAS?
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Mar-01
OK, I updated the archive.
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Mar-09
Scaled entities are still not being detected properly by EntityCameraPick(), any calls to EntityScale() are not taken into consideration in the EntityPickLine() routine.

I tried to add...
Code: GLBasic [Select]
                X_PUSHMATRIX
                X_MULTMATRIX e.Mg[]
                X_SCALING e.sx,e.sy,e.sz // <-- Added this
                d = X_COLLISIONRAY(e.ddd, e.anim_collision, x,y,z, dx,dy,dz)
                X_POPMATRIX
...but it made no difference.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Mar-09
No. Scaling and collision never worked properly :(
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Mar-09
Oh dear, I have a lot of entities that have been scaled in my program that are now not being detected properly. I will have another look to see if I can spot the problem.
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Mar-09
OK, I see that the problem is not related to the entity system but to scaled objects in general.

Is there a possibility of a new command that will permanently scale a mesh(Change the internal GLB vertices list for an object) . It would fix a lot of problems with the collision detection and maybe even speed some programs up if as scaling is not required each game loop?
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Mar-10
not yet. I think about an idea. Maybe X_TRANSFORM_OBJ id%, mat[], where you can sclae/rotate/move an object's nodes totally as if you loaded it that way with X_LOADOBJ.
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2010-Mar-10
Sounds good Gernot!
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Mar-10
not yet. I think about an idea. Maybe X_TRANSFORM_OBJ id%, mat[], where you can sclae/rotate/move an object's nodes totally as if you loaded it that way with X_LOADOBJ.

Thanks Gernot, that sounds very good!  :good:
Title: Re: 3D Entity System [DE]
Post by: bigsofty on 2010-Mar-10
Small bugget...

Code: GLBasic [Select]
//! Return the local yaw (Y rotation) of the object
// \param entity - the entity entity
// \return the angle
FUNCTION EntityGetYawGlobal%: entity%
LOCAL rx,ry,rz
        IF EntityIsValid(entity)=FALSE THEN END
        EntityGetEulers(g3DObj[Entity].Mg[], rx,ry,rz)
        RETURN ry
ENDFUNCTION

Code: GLBasic [Select]
//! Return the local yaw (Y rotation) of the object
// \param entity - the entity entity
// \return the angle
FUNCTION EntityGetYawGlobal%: entity%
LOCAL rx,ry,rz
        IF EntityIsValid(entity)=FALSE THEN END
        EntityGetEulers(g3DObj[entity].Mg[], rx,ry,rz) //<- "Entity" becomes "entity"
        RETURN ry
ENDFUNCTION
Title: Re: 3D Entity System [DE]
Post by: FutureCow on 2010-Oct-11
Okay, my 3D matrix mathematics knowledge is less than 0 but I'm finding that EntityGetYaw is returning values I don't expect.
If I do a complete circle, EntityGetYaw returns values from 0 to 90, then 90 to 0, then 0 to -90 then -90 to 0.

Therefore I have 2 places where I'm facing the same angle (eg. there are two locations where EntityGetYaw will return 45 for example, but those 2 locations are 90 degrees out from each other).

Also, EntityGetYaw and EntityGetYawGlobal contain the same code - is that the way it should be?
Title: Re: 3D Entity System [DE]
Post by: FutureCow on 2010-Oct-13
Can someone please outline the difference between EntityMove and EntityMoveGlobal?

What I'm doing is
Load 3D Model (entity)
Move/rotate entity so it's where I want it to be
Assign parent to entity (so that any future changes to the parent's location/rotation affect this entity)

What happens is that when I assign the parent, my entity moves from where I put it. How do I assign a parent to an entity but keep the location/rotation it currently has? It's causing me SO many problems as I have a big chain of objects where each object is the child of another object. The minute I change the location of one I spend hours of trial and error moving all the rest to try and line them up again - it's driving me nuts!!!


And two bugs - the "Mg" below should be just "M"

Code: GLBasic [Select]
FUNCTION EntityGetYaw%: entity%
LOCAL rx,ry,rz
    IF EntityIsValid(entity)=FALSE THEN END
    EntityGetEulers(g3DObj[entity].Mg[], rx,ry,rz)                     // THIS LINE IS WRONG
    RETURN ry
ENDFUNCTION

//! Return the local pitch (Z rotation) of the object
//! relative to the parent object (if any)
// \param entity - the entity entity
// \return the angle
FUNCTION EntityGetPitch%: entity%
LOCAL rx,ry,rz
    IF EntityIsValid(entity)=FALSE THEN END
    EntityGetEulers(g3DObj[entity].Mg[], rx,ry,rz)                     // THIS LINE IS WRONG
    RETURN rz
ENDFUNCTION
Title: Re: 3D Entity System [DE]
Post by: Slydog on 2010-Oct-13
I'll tell you upfront that I've never used the Entity System.

But, from the function names, I would assume 'EntityMove' moves an entity relative to its parent, and 'EntityMoveGlobal' moves an entity relative to the world's (0,0,0) location.

If you haven't tried using 'EntityMoveGlobal' for your problem, give that a try using the world coordinates you already have.  If I'm wrong on what these functions do, you may have another option.

If you can, place the parent at (0,0,0) with no rotation, and then apply the transformations to the children, so the children won't inherit the parent's transformation.  (Then move/rotate the parent back to normal after)
Title: Re: 3D Entity System [DE]
Post by: FutureCow on 2010-Oct-14
Hmmm...  That sounds like a good starting point Slydog - I'll test to see if that's what the difference is between the standard and the global move.

I'll have a look at my code in regards to the order I'm moving things, hopefully if I move all the children before parents that might fix the problem - I thought I'd tried that but I'll try again. Thanks for the post!

If anyone else has anything to add in the meantime, please let me know.

KittyHello - if you're looking at this forum, can you update the code for the bug I listed? Thanks!
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Oct-14
I think EntityMove moves from the current position in some direction, whereas EntityMoveGlobal sets the absolute position at once.
Title: Re: 3D Entity System [DE]
Post by: kanonet on 2010-Dec-08
Ich habe dem Entitysystem bei mir eine Funktion hinzugefügt, mit der man (ddd-)Objekte auf eine bestimmte Größe skalieren kann. Im Gegensatz zu EntityScale gibt man dabei keinen Skalierungsfaktor an, sondern die gewünschte (absolute) Größe des Objekts, es ist also nicht nötig die genaue Ursprungsgröße zu kennen.
Da die Funktion lediglich selbst die entsprechenden Skalierungsfaktoren ausrechnet und dann spiechert, sollte sie keine Konflikte oder Verlangsamungen innerhalb des ES auslösen und sich somit perfekt integrieren. Einzig zu beachten wäre: Animationen werden vermutlich ignoriert, bzw. ich habe keine Ahnung, wie die Funktion auf eine animiertes Objekt wirken würde.

Vielleicht nützt es ja dem einen oder anderen, daher hier der Code:
Code: GLBasic [Select]
// ------------------------------------------ //
//! Scales an entity. Object will fit in an Box with the Size sx, sy, sz.
//! The scaling is only applied TO the final entity.
//! Parents and childs will not be affected at all.
// \param entity - entity to an entity
// \param sx,sy,sz - new size if the object
// ------------------------------------------ //
FUNCTION EntityFit%: entity%, sx,sy,sz
        IF EntityIsValid(entity)=FALSE THEN RETURN
        LOCAL count, face[]
        count = X_NUMFACES( g3DObj[entity].ddd )
        LOCAL maxX = -1000000000
        LOCAL maxY = -1000000000
        LOCAL maxZ = -1000000000
        LOCAL minX = 1000000000
        LOCAL minY = 1000000000
        LOCAL minZ = 1000000000
        FOR i = 0 TO count - 1
                X_GETFACE g3DObj[entity].ddd , 0 , i , face[]
                IF minX > ( face[ 0 ][ 0 ] ) THEN minX = ( face[ 0 ][ 0 ] )
                IF minX > ( face[ 1 ][ 0 ] ) THEN minX = ( face[ 1 ][ 0 ] )
                IF minX > ( face[ 2 ][ 0 ] ) THEN minX = ( face[ 2 ][ 0 ] )
                IF minY > ( face[ 0 ][ 1 ] ) THEN minY = ( face[ 0 ][ 1 ] )
                IF minY > ( face[ 1 ][ 1 ] ) THEN minY = ( face[ 1 ][ 1 ] )
                IF minY > ( face[ 2 ][ 1 ] ) THEN minY = ( face[ 2 ][ 1 ] )
                IF minZ > ( face[ 0 ][ 2 ] ) THEN minZ = ( face[ 0 ][ 2 ] )
                IF minZ > ( face[ 1 ][ 2 ] ) THEN minZ = ( face[ 1 ][ 2 ] )
                IF minZ > ( face[ 2 ][ 2 ] ) THEN minZ = ( face[ 2 ][ 2 ] )
                IF maxX < ( face[ 0 ][ 0 ] ) THEN maxX = ( face[ 0 ][ 0 ] )
                IF maxX < ( face[ 1 ][ 0 ] ) THEN maxX = ( face[ 1 ][ 0 ] )
                IF maxX < ( face[ 2 ][ 0 ] ) THEN maxX = ( face[ 2 ][ 0 ] )
                IF maxY < ( face[ 0 ][ 1 ] ) THEN maxY = ( face[ 0 ][ 1 ] )
                IF maxY < ( face[ 1 ][ 1 ] ) THEN maxY = ( face[ 1 ][ 1 ] )
                IF maxY < ( face[ 2 ][ 1 ] ) THEN maxY = ( face[ 2 ][ 1 ] )
                IF maxZ < ( face[ 0 ][ 2 ] ) THEN maxZ = ( face[ 0 ][ 2 ] )
                IF maxZ < ( face[ 1 ][ 2 ] ) THEN maxZ = ( face[ 1 ][ 2 ] )
                IF maxZ < ( face[ 2 ][ 2 ] ) THEN maxZ = ( face[ 2 ][ 2 ] )
        NEXT
        g3DObj[entity].sx=sx/ABS(maxX-minX)
        g3DObj[entity].sy=sy/ABS(maxY-minY)
        g3DObj[entity].sz=sz/ABS(maxZ-minZ)
ENDFUNCTION

(Die Grundsätzliche Idee der Umsetzung stammt aus Helmlos' Analyse3DObject)
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2010-Dec-08
Danke! Hab's dazugefügt.
Title: Re: 3D Entity System [DE]
Post by: Marmor on 2011-Feb-26
boah hammer   :nw: :nw: :nw: :nw: :nw: :nw: :nw: :nw: :nw: :nw: :nw: :nw: :happy:
Title: Re: 3D Entity System [DE]
Post by: WPShadow on 2011-May-26
Hi,

ich habe versucht mal das aktuelle Entity runter zu laden, aber der Link am Anfang funktioniert leider nicht.

Gibt es da inzwischen einen aktuellen Download - Link?

LG

W.

[EDIT:]

Jetzt läuft der Link wieder. k.A. was da vorher war
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2011-Sep-07
Neuer Befehl: EntityMoveGlobal2D platziert ein 3D Objekt unter dem 2D Pixel auf dem Schirm.

[edit]
Update. Objekt bleibt auf dieser Position.
Title: Re: 3D Entity System [DE]
Post by: Kitty Hello on 2011-Nov-10
Aktuelles Update korrigiert die Funktion EntitySetPosition2D und liefert ein Beipiel dazu.
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2012-Jun-13
moin moin war ja lang nicht mehr hier und hab mich an paar anderen engines ausprobiert.
gibts was neues zur implementation des entity systems direkt in die sprache?
würde mich schon freuen da ich glb schon sehr mochte.
Title: Re: 3D Entity System [DE]
Post by: backslider on 2012-Jun-14
Ich glaube nicht, das Gernot Lust und Zeit hat, das in die Sprache einzubauen.
Nett wäre es auf jeden Fall!  :good:
Title: Re: 3D Entity System [DE]
Post by: Hemlos on 2012-Jun-18
      IF minX > ( face[ 0 ][ 0 ] ) THEN minX = ( face[ 0 ][ 0 ] )
      IF minX > ( face[ 1 ][ 0 ] ) THEN minX = ( face[ 1 ][ 0 ] )
      IF minX > ( face[ 2 ][ 0 ] ) THEN minX = ( face[ 2 ][ 0 ] )
      IF minY > ( face[ 0 ][ 1 ] ) THEN minY = ( face[ 0 ][ 1 ] )
      IF minY > ( face[ 1 ][ 1 ] ) THEN minY = ( face[ 1 ][ 1 ] )
      IF minY > ( face[ 2 ][ 1 ] ) THEN minY = ( face[ 2 ][ 1 ] )
      IF minZ > ( face[ 0 ][ 2 ] ) THEN minZ = ( face[ 0 ][ 2 ] )
      IF minZ > ( face[ 1 ][ 2 ] ) THEN minZ = ( face[ 1 ][ 2 ] )
      IF minZ > ( face[ 2 ][ 2 ] ) THEN minZ = ( face[ 2 ][ 2 ] )
      IF maxX < ( face[ 0 ][ 0 ] ) THEN maxX = ( face[ 0 ][ 0 ] )
      IF maxX < ( face[ 1 ][ 0 ] ) THEN maxX = ( face[ 1 ][ 0 ] )
      IF maxX < ( face[ 2 ][ 0 ] ) THEN maxX = ( face[ 2 ][ 0 ] )
      IF maxY < ( face[ 0 ][ 1 ] ) THEN maxY = ( face[ 0 ][ 1 ] )
      IF maxY < ( face[ 1 ][ 1 ] ) THEN maxY = ( face[ 1 ][ 1 ] )
      IF maxY < ( face[ 2 ][ 1 ] ) THEN maxY = ( face[ 2 ][ 1 ] )
      IF maxZ < ( face[ 0 ][ 2 ] ) THEN maxZ = ( face[ 0 ][ 2 ] )
      IF maxZ < ( face[ 1 ][ 2 ] ) THEN maxZ = ( face[ 1 ][ 2 ] )
      IF maxZ < ( face[ 2 ][ 2 ] ) THEN maxZ = ( face[ 2 ][ 2 ] )
   NEXT
   g3DObj[entity].sx=sx/ABS(maxX-minX)
   g3DObj[entity].sy=sy/ABS(maxY-minY)
   g3DObj[entity].sz=sz/ABS(maxZ-minZ)

(Die Grundsätzliche Idee der Umsetzung stammt aus Helmlos' Analyse3DObject)

Ill update the analyzer with it, thanks.
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2012-Jun-28
wäre aber schon wenn gernot sich einen ruck geben würde  :good:
Title: Re: 3D Entity System [DE]
Post by: Schranz0r on 2012-Jun-28
Heiko ist RE?
WB!
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2012-Jul-01
joah so wie ich zeit habe...mach grad bissl was in 2d, aber das mit dem implementierten ES wäre doch sehr schön...danke fürs WB.
Title: Re: 3D Entity System [DE]
Post by: backslider on 2012-Aug-01
Ich habe noch eine Idee für eine Funktion.

Und zwar wäre es noch sehr cool, wenn man einmalig eine Animation abspielen könnte.
Wenn es das schon gibt, hab ich es nicht gefunden.

Als Funktion denke ich da z.B. an:
Code: GLBasic [Select]
FUNCTION EntityPlayAnimation: entity%, key_from%, key_to%, speed%
//...
ENDFUNCTION
 

Oder als erweiterten Parameter für "EntitySetAnimation" könnte man die Anzahl der abzuspielenden Wiederholungen angeben und bei 0 ist es dann halt unendlich, wie jetzt auch.

Was haltet ihr davon? :)
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2012-Aug-01
?? gibt doch EntitySetAnimation, womit du das steuern kannst
meintest du das?
Title: Re: 3D Entity System [DE]
Post by: backslider on 2012-Aug-01
Ne eben nicht.

Mit "EntitySetAnimation" gibst Du an, von wo bis wo die Animation laufen soll.
Diese läuft dann allerdings für immer.
Ich meine aber, dass man da optional noch angeben können sollte, ob man es z.B. bei einem Trigger nur einmal durchlaufen will.

Meinetwegen ein Schalter, der angehen soll.
Der soll ja nicht für immer an/aus/an/aus machen. :)
Title: Re: 3D Entity System [DE]
Post by: Quentin on 2012-Aug-01
ahh ok, nee, da hab ich auch nix passendes gefunden. Müsste man halt von außen steuern.
oder die Funktonalität selbst dazu basteln
Title: Re: 3D Entity System [DE]
Post by: backslider on 2012-Aug-01
Das ist mir klar,
Ich dachte nur, dass es vielleicht einige geben könnte, die das sinnvoll finden könnten.

Also entweder bastelt Gernot das da schnell rein, wenn er 5 Minuten Zeit hat,
oder ich werde das demnächst mal tun. :)
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2012-Aug-15
Wäre schön wen gernot das trotzdem komplett implementieren könnte.
Title: Re: 3D Entity System [DE]
Post by: backslider on 2012-Aug-15
Bin ich auch für.
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2012-Aug-22
vielleicht wirds ja nochwas...
Title: Re: 3D Entity System [DE]
Post by: Heiko on 2013-Sep-04
gibts von irgendwem was neues?
ich hab einen kleinen shooter halbfertig mit dem ES.
nix besonderes.....

gibts eigentlich noch jemanden hier der windows-only programmiert....hihi