3D Entity System [DE]

Previous topic - Next topic

x-tra

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.


Kitty Hello

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.

x-tra

#197
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.

Kitty Hello

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.

x-tra

#199
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.

x-tra

@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)

Schranz0r

Boxcoll bitte Gernot, ganz wichtig :)
Brauch ich für mein Breakout-Game  :noggin:  :good:
I <3 DGArray's :D

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

Kitty Hello

EntityTranslate? Es gibt EntityMove und EntitySetPosition.

Schranz0r: Wie willst Du das haben? Bzw. schreib mal alle Befehle exakt auf, wie die sein sollen.

Schranz0r

#203
So stell ich mir das vor :)

Code (glbasic) Select
EntityCollisionBox: Entity, Size_X, Size_Y
EntityCreateQuad: Size_X, Size_Y, Size_Z
I <3 DGArray's :D

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

x-tra

#204
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.

BumbleBee

Na, so langsam bekommt ihr euer Blitz3D ja wieder zusammen. =D  :booze:

Cheers
The day will come...

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

Quentin

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.

x-tra

#207
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.

Kitty Hello

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!?


x-tra

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?