IrrlichtWrapper 1.05 (leider immer noch beta)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
neotoma
Beiträge: 202
Registriert: 13.09.2004 16:16
Kontaktdaten:

Beitrag von neotoma »

Hallo tft !

Es gibt 2 Möglichkeiten mit dem Wraper Events abzufangen.
1. Wie in den meisten Beispielen (z.B. 14_Example_KeyboardAndMouse.pb) vorhanden, mittels IrrReadKeyEvent(). Da werden die Events von einem Eventhandler in eine Queue gepackt, und mittels der Funktionen wiedr ausgelesen.

2. (bessere) Man kann einen eigenen eventReceiver Schreiben. (z.B. wie in 30_Example_ImageGui.pb). Das ist nicht wesentlich schwieriger als bisher, nur das man jetzt sämtliche Events sofort bekommt.

Und zur Frage wg. nutzen des PB-Screens. Ja, das geht.
Dafür gibt es die Funktion IrrStartEx(), die als letzten parameter ein Window-Handle akzeptiert. Also erst das PB-Windowd öffnen, dann den Screen, und dann mit IrrStartEx() als letzten Parameter den Window-Handle (z.B. WindowID(0) ) übergeben.

Mike

tft hat geschrieben:Hallo ...

coole Wrapper... habe eine Frage. Ich bekomme bei den IrrMouse und IrrKey Events, immer nur den Hit state. Nie den down state. Bei Tasten gibt es nach einer kleinen Pause nur Repeatet Keys, 200 ms. Ich brauche aber den Status von Tastatur und Mouse key unmittelbar. Kann man die Abfrage Intervalle einstellen, oder fileicht das Irrlicht Fenster auf ein Pure Fenster/Screen umlenken. Damit die Pure Mouse und Tasttatur abfrage verwendet werden kann. Die funktionieren ja nur mit geöffneten Fenster/Screen.

MfG TFT
Alle Rechtschreibfehler unterliegen der GPL und dürfen frei kopiert und modifiziert werden.
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ..

danke für die schnelle antwort. Ich werde beide methoden ausprobieren.

MfG TFT
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hi ...

also die sache mit dem Event Reciver funktioniert bei mir garnicht. Weder das beispiel noch ein Code snipe. Wenn ich den ProcedureDLL teil übernehme
dann bekomme ich immer beim ProcedureReturn einen fehler.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
neotoma
Beiträge: 202
Registriert: 13.09.2004 16:16
Kontaktdaten:

Beitrag von neotoma »

tft hat geschrieben:Hi ...

also die sache mit dem Event Reciver funktioniert bei mir garnicht. Weder das beispiel noch ein Code snipe. Wenn ich den ProcedureDLL teil übernehme
dann bekomme ich immer beim ProcedureReturn einen fehler.
Sorry !
Da ist der Fehler in der Doku/Example (?).
Es muss eine ProcedureC sein :

Code: Alles auswählen


ProcedureC _Game_Events(*event.SEvent)
  
  If *event\EventType = #IRR_EET_KEY_INPUT_EVENT         
    key.l = *event\KeyEvent\key
    Select key
      Case #IRR_KEY_F9        
        IrrSaveScreenshot("./game.bmp")

    EndSelect        
  EndIf     
 
  ProcedureReturn #True
EndProcedure
  
Erstellt wird der EventReceiver so :

Code: Alles auswählen

      ;Create our own Event-Receiver
      *Game_ER.l = IrrCreateEventReceiver(@_Game_Events())
  
Und so wird er in Irrlicht gesetzt (damit er auch events bekommt) :

Code: Alles auswählen

  IrrSetEventReceiver(*Game_ER)

MIke
Alle Rechtschreibfehler unterliegen der GPL und dürfen frei kopiert und modifiziert werden.
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ....

also nun funktioniert die CallBack Rutine zwar. Aber die abfrage kommt immernoch verzögert. Einer eine Idee woran das liegen kann. Es muss doch die möglichkeit geben Tastatur und MouseTasten direckt abzufragen. Bei PB Windows funktioniert das doch auch.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ..

so... habe das Problem jetzt selber gefunden. Da ich von B3D stark beeinflust bin. Habe ich völlig vergessen wie das mit den EVENTS funktioniert. Es gibt getrennte Nachrichten für KeyUp und KeyDown. Darauf muss man achten und dann die KeyStates selber definieren.

BRETBRETBRETBRET ..........

MfG TFT
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo...

je weiter ich mich in Irrlicht einarbeite. Je besser finde ich das teil. Jetzt stosse ich aber auf ein Problem. Ich möchte selber bestimmen welche Nods in welcher reihenfolge gezeichnet werden.
Ich möchte das eine immer im hintergrund gerendert wird. Und andere davor. Und der rest in abhängigkeit ihrer entfernung.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
neotoma
Beiträge: 202
Registriert: 13.09.2004 16:16
Kontaktdaten:

Beitrag von neotoma »

tft hat geschrieben:Hallo...

je weiter ich mich in Irrlicht einarbeite. Je besser finde ich das teil. Jetzt stosse ich aber auf ein Problem. Ich möchte selber bestimmen welche Nods in welcher reihenfolge gezeichnet werden.
Ich möchte das eine immer im hintergrund gerendert wird. Und andere davor. Und der rest in abhängigkeit ihrer entfernung.
Hi tft,

das ist nicht ganz 'trivial'. Aber auch nicht unmöglich. Doch bevor wir die tiefen der engine ausloten, würde ich gerne wissen wofür Du das benötigst. Wenn Du z.B. ein HUD (Head-Up-Display) darstellen willst, dann gibt es dafür auch andere Möglichkeiten (Man kann auch proma 2D mit Irrlicht nutzen. Und im wrapper ist sogar ein Animator dafür vorhanden...)

Wenn Du nun aber der Engine ins Handwerk 'pfuschen' willst ;-) - btw: im normalfall ist es natürlich die Aufgabe der Engine die richtige Reihenfolge zu bestimmen.
Okay - die einfachste Methode ist natürlich mit 2 Renderzyklen zu arbeiten, im ersten ist da 'obenliegende' disbaled, und im zweiten allen anderen..... (am besten mit eine 'hierarichischen Node-Struktur arbeiten, dann musst Du nur das Parent disablen')

Gruß,

Mike
Alle Rechtschreibfehler unterliegen der GPL und dürfen frei kopiert und modifiziert werden.
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ...

Zwei mal Rendern ist zwar nicht schlimm. Aber wie sage ich Irrlicht das er beim Zweiten Rendern nicht den ZBuffer löscht. In den Camera Optionen habe ich nichts gefunden.

Die sache mit der Node reihenfolge ist für bestimmte tricks nötig. Wenn zum beispiel der Raum durch den ZBuffer in der Tiefe begrenzt ist. Kann man durch geschicktes Arbeiten mit Scale und Node reihenfolge, einen fiel Teiferen Raum darstellen. Ich brauche konkret eine Mesh das den Sternen hintergrund darstellt. Das mesh ist aus etwa 32000 Planes mit einer TExture 2*2. Nun kann ich wegen der unterschiedlichen Grafikkarteneigenschafften die Planes nicht 200000 einheiten in die Tiefe versetzten. Da sonst der rechenaufwand durch die benötigte grössere Scalierung ins bodenlose fällt. Wenn das Mesh aber nur 10 Einheiten im Radius hat. Dafür aber immer als erstes gerendert wird. Geht es schnell und siet toll aus. Dann sind da natürlich noch die Planeten ... (SPACEGAME) Um ein einigermassen echtes ausssehen und noch dazu das Landen auf demselben zu realisieren. Benötige ich eine Sphere von mindestens 1000000 einheiten durchmesser. Das gibt ganz eklige Rechenfehler auf dem Bildschirm. Aber eine Sphere mit 1000 Durchmesser und in der reihenfolge gleich nach dem Sternen Mesh plaziert. Wirkt erstaunlich echt. Die restlichen objecte können normal dargestellt werden. Da ihre entfernung sowiso durch ein Object LOD gesteuert wird.

In der hoffnung dir etwas mer Klarheit zu meinen Ziehlen zu gewären.

TFT
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ..

und wenn wir schon mal beim palavern sind ... warum wird bei folgendem Code Abschnitt die Node nicht verschoben.

Code: Alles auswählen

        AddElement(obj_liste())
        obj_liste()\obj = IrrAddMeshToScene( *Mesh )
        IrrSetNodeScale(obj_liste()\obj,0.01,0.01,0.01)
        IrrSetNodeMaterialTexture( obj_liste()\obj, *stone_texture, 0 )
        IrrSetNodeMaterialFlag( obj_liste()\obj, #IRR_EMF_LIGHTING, #IRR_OFF )
        IrrSetNodePosition(obj_liste()\obj,0,0,0)
        IrrSetNodeRotation(obj_liste()\obj,Random(360),Random(360),Random(360))
        IrrMoveNodeForward(obj_liste()\obj,-150)
Der MoveForward sollte eigentlich das object in Blickrichtung um 150 Verschieben. Aber es bleibt immer im Zentrum 0,0,0 .
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Antworten