IrrlichtWrapper 1.05 (leider immer noch beta)
- 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:
Hallo ..
also ist IrrRuning() nicht nur eine Test funktion. Sonders sie inizialisiert auch die Events. Das erklärt natürlich einige Probleme die ich hatte. In der vorm ist nirgends was zu lesen gewesen.
Ein Umsteiger Problem ........
Und was den Sound angeht. Diverse Funktionen für den 3D Sound benötigen einen handler auf den gespielten Sound. Ohne kann man bestimmt werte nicht ändern. Zumindesten habe ich das so aus der Anleitung .....
Zum Beispiel die:
IrrKlangSoundSetMinDistance(*fx_sound, 0.1)
IrrKlangSoundSetMaxDistance(*fx_sound, 50)
Ohne Handler des gerade zu spielenden Sounds geht das nicht. Ausserdem Kann man ja auch merrere abspielen. Das bedeutet merere PlayHandler.
Oder bin ich da völlig auf dem Holzweg.
Du hast auch den Restart Code ausKommentiert. Aber um wirklich zu verstehen was du meinst. Wäre es nett wenn du das nochmal auf Deutsch erklärst.
also ist IrrRuning() nicht nur eine Test funktion. Sonders sie inizialisiert auch die Events. Das erklärt natürlich einige Probleme die ich hatte. In der vorm ist nirgends was zu lesen gewesen.
Ein Umsteiger Problem ........
Und was den Sound angeht. Diverse Funktionen für den 3D Sound benötigen einen handler auf den gespielten Sound. Ohne kann man bestimmt werte nicht ändern. Zumindesten habe ich das so aus der Anleitung .....
Zum Beispiel die:
IrrKlangSoundSetMinDistance(*fx_sound, 0.1)
IrrKlangSoundSetMaxDistance(*fx_sound, 50)
Ohne Handler des gerade zu spielenden Sounds geht das nicht. Ausserdem Kann man ja auch merrere abspielen. Das bedeutet merere PlayHandler.
Oder bin ich da völlig auf dem Holzweg.
Du hast auch den Restart Code ausKommentiert. Aber um wirklich zu verstehen was du meinst. Wäre es nett wenn du das nochmal auf Deutsch erklärst.
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
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

IrrRunning() callt :also ist IrrRuning() nicht nur eine Test funktion. Sonders sie inizialisiert auch die Events. Das erklärt natürlich einige Probleme die ich hatte. In der vorm ist nirgends was zu lesen gewesen.
Code: Alles auswählen
device->run();
habe dies mal für die final manual markiert, werde dazu noch ein paar Anmerkungen schreiben.
Sorry für vorherige Verwirrung:
Bool Params (#True/#False):
- playlooped
- Start Paused
- Track ( return)
Code: Alles auswählen
-------------------------------------------------------------------“*”
*soundnode = IrrKlangPlay3D(*soundsource, 0,0,0, #True, #False, #True)
Offizielle Info zu IrrKlang:
http://www.ambiera.com/irrklang/docu/in ... artexample
Korrekt ( Nodes genauer gesagt )!Das bedeutet merere PlayHandler.
Oder bin ich da völlig auf dem Holzweg.
Beispiele siehe IrrKlang examples im Examples/IrrlichtWrapper/IrrKlang/
& Advanced zb das Irr/Arkanoid (http://www.purebasic.fr/english/viewtopic.php?t=28803).

du stoppst und restartest die engine neu. Es reicht um die jeweilige Szene neuzu initialisieren. Geldaene Objekte werden im hintergrund gecached und müssen beim neuinitialisieren dann auch nicht mehr mit den add befehlen und über den bus ins GPU Memory geladen werden. Somit entsteht weniger Overhead zudem die Engine und somit der Screen nicht neu initialisiert werden muss. Stell dir jede Szene ( Ob interaktiv: sprich man kann auf etwas einfluss nehmen - oder auch nicht ) wie eine Szene in einem 3D Programm vor in welchem deine Nodes den Szenenbaum abbilden. Das neusetzen respektive ein/ausblenden der Objekte erspart das gesamte reinitilisieren. Texturen / Objekte die du nicht mehr benötigst kannst du mit IrrDropPointer() zum löschen markieren. Diese werden dann vom internen Garbage Kollektor automatisch freigegeben ( hierzu ist zu beachten dass die überprüfung der Pointer zu diesen Ressourcen von dir überprüft werden muss wenn dus sicher willst ). Zb darf ein Node welcher ein geFreetes mesh enthält dann später nciht mehr verwendet werden. Eine gute Methode seine Szenen übersichtlich zu behalten sind strukturierte linkedlists / arrays. Mithilfe der IrrGet* befehle lassen sich durch den nodepointer einfach alle möglichen dinge abfragen .. mit IrrSet setzen - und der Rest der Struktur ist dir überlassen ( HP, Shields was auch immer..). Nodes lassen sich mithilfe ihrer ID und Name$ auch von irredit kategorisieren.Du hast auch den Restart Code ausKommentiert. Aber um wirklich zu verstehen was du meinst. Wäre es nett wenn du das nochmal auf Deutsch erklärst.
Zum besser verstehen, schau dir mal deine programmierten Szenen mit irrEdit an.
speichern kannst du diese mit:
Code: Alles auswählen
*node.l = IrrSaveScene(sceneFile.s)
; respektive:
*Rootnode.l = IrrSaveScene(sceneFile.s)
Hier eine einfache logik zum überprüfen eines pointer (wie du diese schlussendlich umsetzt bleibt dir überlassen ):
Code: Alles auswählen
If *pointer
; -Wenn pointer initialisiert...
Else
; -andernfalls...
EndIf
If Not *pointer
; Wenn Pointer NICHT initialisiert ....
Else
; andernfalls...
EndIf
irrKlang.dll - irrKlang Engine
ikpMP3.dll - irrKlang MP3 Decoder
Ist ein eigenes Subsystem im Wrapper welches eigen initialisiert und gestoppt werden sollte.
Code: Alles auswählen
Sucess.l = IrrKlangStart(#IRRKLANG_ESOD_AUTO_DETECT, #IRRKLANG_ESEO_DEFAULT_OPTIONS)
; stop
IrrKlangStop()
Code: Alles auswählen
IrrKlangRemoveSoundSource( *source )
; respektive:
IrrKlangRemoveAllSoundSources()
Thalius
"...smoking hash-tables until until you run out of memory." :P
Hört sich gut an.Gibt es denn schon das Manual zum ziehen ?Thalius hat geschrieben: Derzeit sind mal alle Grundfunktionen unter Linux lauffähig ....
Manual ist zu 90% fertig ( Newton , Stlt und paar Kleinigkeiten fehlen noch )
Nee, ich wollt schon Irrlicht-Objekte benutzen.Also - hab ich noch nicht getestet aber Irrlicht sowie des neue PB DX9 sollten kompatibel sein ( Sprich du kannst PB Spites ( anstatt irrlicht Sprites ) direkt über Irrlicht Szenen rendern lassen ( DirectX only ). Dazu musst du ihm den hook mitgeben ( hat glaub ne funktion in der Include lib - hierzu sind noch beispiele geplant ) - auch die movie funktionen sollten dadurch funktionieren. Als 2 methode wäre direkt zb ffmpg anzusprechen und auf eine Textur zu rendern ( das ganze dann zb auf nem 3D objekt darzustellen![]()
Das sind (verbessere mich gerne) doch mesh's mit ner Textur.
Die kann man doch auch rotieren,verzerren , transparenz einstellen oder nicht ?
sehr schön, bisher verwende ich auch windowed screen.In einem Windowed Screen sollte das gehen. Irrlicht lässt sich in jedes Gadget "inkorporieren" ( Siehe Beispiel 24 ). Evtl. kommt später noch ein 3D HTML Renderer rein in dem sich webseiten dann perspektivisch im raum anzeigen lassen ( auf surfaces ) ...Aber dazu später.
Danke, was irrklang kann weiss ich jetzt, also muss ich nur noch testen.GUI und Imagegui sind drin wobei in der Version auf purearea net ist da noch ein kleiner bug im imagui ( eigentlich in der header definition dessen ). Aber ich schick dir auf wunsch n fix ( das noch n bissl gehen wir dbis ich heir durch bin ). Eine einfache doku ist dabei ( die komplette ist bald feddich .. endlich .. ). Falls du hartgesotten bist und was in der momentanen docu ned findest:
http://irrlicht.sourceforge.net/docu/
Irrklang features:
http://www.ambiera.com/irrklang/index.html
Das mit der Imagegui wäre gut.
wird kommen.....Ansonsten schiess los wenn Fragen hastAh und wenn irgendwas unklar ist der source code ( C++ ) ist dabei - sprich manchmal die nase da rein stecken hilft klarheit .
Auch das include file solltest du dir vorher mal genau ansehenHat da auch ein paar nützliche helper funktionen
![]()
Rings hat geschrieben:ziert sich nich beim zitieren
Helper Function: IrrFaceTargetNode()
Siehe:
http://www.purebasic.fr/english/viewtopic.php?t=30500
Thalius
Siehe:
http://www.purebasic.fr/english/viewtopic.php?t=30500
Thalius
"...smoking hash-tables until until you run out of memory." :P
- 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:
Hi ....
Habe mal wider ein Prob.
Nachfolgende Procedure soll ein Mesh erzeugen und dann als node in die scene aufnemen. Das funktioniert auch. Aber wenn ich diese Procedure
zum Refrechen in die Main schleife einbaue. Dann Werden mit der Zeit die Recurcen eng. Da scheinbar die von mir nicht mer Benötigten mesh und nodes, die ich mittels Remove Lösche, Ihre recurcen nicht frei geben.
Habe mal wider ein Prob.
Nachfolgende Procedure soll ein Mesh erzeugen und dann als node in die scene aufnemen. Das funktioniert auch. Aber wenn ich diese Procedure
zum Refrechen in die Main schleife einbaue. Dann Werden mit der Zeit die Recurcen eng. Da scheinbar die von mir nicht mer Benötigten mesh und nodes, die ich mittels Remove Lösche, Ihre recurcen nicht frei geben.
Code: Alles auswählen
Procedure RefrechText3D()
;- !!! Forsicht Falle 10 !!!
;
; Die node die erzeugt wird. Wird erst einen Frame später dargestellt. Daher
; muss das Löschen der alten node später erfolgen.
If *ClearTextPageNode<>0
IrrRemoveNode(*ClearTextPageNode)
*ClearTextPageNode=0
EndIf
Dim text_verts.IRR_VERT(anz_TextQuad.l*4)
Dim text_indices.w(anz_TextQuad.l*6)
;- alte elemente übernehmen
i.l=0:i1.l=0:i4.l=0
ResetList(TextChar())
ForEach TextChar()
text_verts(0+i)\X = TextChar()\verts0\x
text_verts(0+i)\y = TextChar()\verts0\y
text_verts(0+i)\z = TextChar()\verts0\z
text_verts(0+i)\texture_x = TextChar()\verts0\texture_x
text_verts(0+i)\texture_y = TextChar()\verts0\texture_y
text_verts(0+i)\vcolor = TextChar()\verts0\vcolor
text_verts(1+i)\X = TextChar()\verts1\x
text_verts(1+i)\y = TextChar()\verts1\y
text_verts(1+i)\z = TextChar()\verts1\z
text_verts(1+i)\texture_x = TextChar()\verts1\texture_x
text_verts(1+i)\texture_y = TextChar()\verts1\texture_y
text_verts(1+i)\vcolor = TextChar()\verts1\vcolor
text_verts(2+i)\X = TextChar()\verts2\x
text_verts(2+i)\y = TextChar()\verts2\y
text_verts(2+i)\z = TextChar()\verts2\z
text_verts(2+i)\texture_x = TextChar()\verts2\texture_x
text_verts(2+i)\texture_y = TextChar()\verts2\texture_y
text_verts(2+i)\vcolor = TextChar()\verts2\vcolor
text_verts(3+i)\X = TextChar()\verts3\x
text_verts(3+i)\y = TextChar()\verts3\y
text_verts(3+i)\z = TextChar()\verts3\z
text_verts(3+i)\texture_x = TextChar()\verts3\texture_x
text_verts(3+i)\texture_y = TextChar()\verts3\texture_y
text_verts(3+i)\vcolor = TextChar()\verts3\vcolor
text_indices(0+i1) = TextChar()\indices[0]
text_indices(1+i1) = TextChar()\indices[1]
text_indices(2+i1) = TextChar()\indices[2]
text_indices(3+i1) = TextChar()\indices[3]
text_indices(4+i1) = TextChar()\indices[4]
text_indices(5+i1) = TextChar()\indices[5]
i=i+4
i1=i1+6
i4=i4+1
Next
;- Mesh erzeugen
*TextPageMesh = IrrCreateMesh( "TextPageMesh", anz_TextQuad.l*4, @text_verts(0), anz_TextQuad.l*6, @text_indices(0))
If *TextPageNode
*ClearTextPageNode=*TextPageNode
;IrrRemoveNode(*TextPagenode)
EndIf
*TextPageNode = IrrAddMeshToScene(*TextPageMesh)
If *TextPageMesh
IrrRemoveMesh(*TextPageMesh)
*TextPageMesh=0
EndIf
;- Atribute
IrrSetNodeMaterialFlag( *TextPageNode, #IRR_EMF_LIGHTING, #IRR_Off )
IrrSetNodeMaterialTexture( *TextPageNode, *Font, 0 )
IrrSetNodeMaterialFlag( *TextPageNode, #IRR_EMF_BACK_FACE_CULLING, #IRR_Off)
;IrrSetNodeMaterialType( *TextPageNode, #IRR_EMT_TRANSPARENT_ADD_COLOR)
IrrSetNodeMaterialType( *TextPageNode, #IRR_EMT_TRANSPARENT_ALPHA_CHANNEL)
;charx.f=-screen_alpha.f*((ScrX.l/2)-MouseX)
IrrSetNodePosition(*TextPageNode,0,0,0.1)
IrrSetNodePosition(*ClearTextPageNode,0,0,0.2)
Dim text_verts.IRR_VERT(0)
Dim text_indices.w(0)
EndProcedure
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
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

Hihi,
Also habs mal schnell überflogen ( muss es mir mal nach der Arbeit genauer durchsehen ).
Folgendes :
Ob ein Node dargestellt wird oder nicht spielt keine Rolle ob du ihn löschen kannst oder nicht. Ein Node muss nicht sichtbar sein um in einer Szene zu hocken. Das was du siehst und das was du in deine Szene reinpackst sind 2 Dinge. EIne Szene kann riesig sein und wird vom Irrlicht Object Manager Speichermässig verwaltet so gut es geht. Wobei die Sicht zb nur einen Teil der Szene darstellt ( ob dies nun eine Begrenzung durch Sichtweite, Details etc ist ).
Dieser Befehl entfernt ein Node aus deiner Szene ( Aber nicht das Mesh aus deinem Speicher - Node <> Mesh !).
zb. kann man so ebenfalls Speicher sparen indem man verschidene Instanzen desselben Mesh / mit denselben oder auch anderen Texturen x mal in der Szene verwendet. In wirklichkeit ist da nur ein Mesh im Memory und ein haufen Nodes mit Materialien. Dasselbe wird mit wiederverwendeten Texturen gemacht.
Wie schon oben beschrieben um eine Irrlicht Ressource ( Mesh, Textur ) aus dem Speicher zu entfernen - verwendest du:
dann musst auch ned sowas basteln 
da sich der Garbage Kollektor im Hintergrund beim nächsten Schleifendurchlauf drüberstürzt.
Was Delay betrifft. Je nachdem wie und wo du dieses einsetzt kann dies zu Verzögerungen im Bewegunsloop führen ( Speziell bei Delay(100)
). Dein Eventloop und alle Veränderungen die du in einer Szene vornimmst laufen mit der Geschwindigkeit deines mainloops. Was zb. bei einem delay(100) mit Glück noch 10x pro Sekunde sind ( FPS / (1000 / delayms)). Sprich während deine GPU gemütlich ihre zb 100 FPS vor sich hin bröselt, kommen updateanwesungen zur Szene von der CPU aus
deinem PB Mainloop. Sprich jedes 10te Bild in diesem Beispiel würde upgedatet (Im Prinzip ähnlich wie wenn du einen 15 FPS Film auf dienem PC schaust - dadurch verändert sich ja deine Bildwiederholfrequenc ( hz ) auch nicht einfach ins Bodenlose
). Also Wichtig! Für ein Ernstahfeteres Programm sollte man sich da schon was überlegen wenn man CPU schonend programmieren will. Werde dazu noch ein Tutorial schreiben aber im Moment denke ich mal reicht es zu sagen: Wenn Events zu verarbeiten sind oder die Szene upzudaten ist sollte kein Delay erfolgen - erst beim nächsten Durchlauf dann zb. wieder.
Noch ein winziger Tip: Das sich hier ja um Realtime 3D handelt sollte man CPU Zeit sparen wos nur geht ( desto cleaner & kompakter der Code - um so mehr FPS hat man ).
Dies kannst du noch ein bissl Optimieren.
<> 0 ist eine Expression , diese muss von der CPU ausgewertet werden.
Obige Methode mit ( If *ptr / If Not *ptr ) ist schneller ( Vorallem wenn du sowas öfters aufrufst).
Weiter so!
Thalius
Also habs mal schnell überflogen ( muss es mir mal nach der Arbeit genauer durchsehen ).
Folgendes :
Code: Alles auswählen
; Die node die erzeugt wird. Wird erst einen Frame später dargestellt. Daher
; muss das Löschen der alten node später erfolgen.
If *ClearTextPageNode<>0
IrrRemoveNode(*ClearTextPageNode)
*ClearTextPageNode=0
EndIf
Dieser Befehl entfernt ein Node aus deiner Szene ( Aber nicht das Mesh aus deinem Speicher - Node <> Mesh !).
Code: Alles auswählen
IrrRemoveNode(*ClearTextPageNode)
Wie schon oben beschrieben um eine Irrlicht Ressource ( Mesh, Textur ) aus dem Speicher zu entfernen - verwendest du:
Code: Alles auswählen
IrrDropPointer( *mesh )

Code: Alles auswählen
*ClearTextPageNode=0
Was Delay betrifft. Je nachdem wie und wo du dieses einsetzt kann dies zu Verzögerungen im Bewegunsloop führen ( Speziell bei Delay(100)

deinem PB Mainloop. Sprich jedes 10te Bild in diesem Beispiel würde upgedatet (Im Prinzip ähnlich wie wenn du einen 15 FPS Film auf dienem PC schaust - dadurch verändert sich ja deine Bildwiederholfrequenc ( hz ) auch nicht einfach ins Bodenlose

Noch ein winziger Tip: Das sich hier ja um Realtime 3D handelt sollte man CPU Zeit sparen wos nur geht ( desto cleaner & kompakter der Code - um so mehr FPS hat man ).
Dies kannst du noch ein bissl Optimieren.
Code: Alles auswählen
If *ClearTextPageNode<>0
Obige Methode mit ( If *ptr / If Not *ptr ) ist schneller ( Vorallem wenn du sowas öfters aufrufst).
Weiter so!

Thalius
"...smoking hash-tables until until you run out of memory." :P
- 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:
Hallo ...
das würde ja bedeuten das ich garkeine Nodes aus dem Speicher löschen kann. Sondern sie lediglich aus der Scene Liste wegnehem. Für meine Arcade Game ist es aus Pervormance gründen aber zwingend nötig. Zur Laufzeit Meshs zu erzeugen, sie als Node in die Scene zu integrieren und sie auch komplett wider aus demSpeicher werfen zu können. Wenn das nicht geht. Wundert es mich nicht das kaum gute 3D Sachen in Irrlicht entstehn. Alles was mit Dynamischer Scene erstellung funktioniert, scheitert am Scene Manager.
Ich mache mal auf Basis deiner Grundstrucktur eine Testprog. Und du schaust mal im Taskmanager nach. Wie die Resurcen purzeln. Es wird bei mir sogar die Auslagerungsdatei beständig grösser.
Code Folgt.
das würde ja bedeuten das ich garkeine Nodes aus dem Speicher löschen kann. Sondern sie lediglich aus der Scene Liste wegnehem. Für meine Arcade Game ist es aus Pervormance gründen aber zwingend nötig. Zur Laufzeit Meshs zu erzeugen, sie als Node in die Scene zu integrieren und sie auch komplett wider aus demSpeicher werfen zu können. Wenn das nicht geht. Wundert es mich nicht das kaum gute 3D Sachen in Irrlicht entstehn. Alles was mit Dynamischer Scene erstellung funktioniert, scheitert am Scene Manager.
Ich mache mal auf Basis deiner Grundstrucktur eine Testprog. Und du schaust mal im Taskmanager nach. Wie die Resurcen purzeln. Es wird bei mir sogar die Auslagerungsdatei beständig grösser.
Code Folgt.
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
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

Dann hast du irgendwo ein LeckIch mache mal auf Basis deiner Grundstrucktur eine Testprog. Und du schaust mal im Taskmanager nach. Wie die Resurcen purzeln. Es wird bei mir sogar die Auslagerungsdatei beständig grösser.

Ehm - also du hast hier irgendwas nicht verstanden. Also ich sags nochmals ein NODE ist kein MESH. Wenn du zur Laufzeit MESHES erstellst musst du diese auch wieder freigeben um den Speicher zurück zu gewinnen. Nur dessen Node zu löschen reicht da nicht .... du kannst nicht Variable a reservieren und nur b löschen und dich wundern warum variable a nie freigegeben wird ....Wenn das nicht geht. Wundert es mich nicht das kaum gute 3D Sachen in Irrlicht entstehn. Alles was mit Dynamischer Scene erstellung funktioniert, scheitert am Scene Manager.
Ein Node ist nichts anderes als eine Struktur mit Pointern und OffsetDaten (grösse,ausrichtung,id,name usw...). In einem Node wird KEIN Mesh gespeichert sondern dieser enthält nur einen Pointer zu der jeweiligen Ressource (ist ja absoluter unfug alles 10x im Speicher zu haben - somit ists auch viel komfortabler handzuhaben).
Hoffe das hast du jetzt verstanden

IrrRemoveNode(*Node) - löscht den Node aus der scene.
IrrDropPointer( *mesh ) - löscht ein mesh / textur aus dem speicher....
Dies ist aus Perfromancegründen so gelöst, da die schlimmste Bremse für 3D immernoch dein Datenbus ist. Deshlab liegen die eigentlichen Meshdaten die du auf dem Bildschirm siehst komplett mit Tesxturen in deinem Grafikkartenspeicher ( und bei dynamics noch eine Kopie im Hauptspeicher / respektive gemapptem AGP VideoMemory ). Kollisionen
werden unteranderem von deiner CPU abgehandelt ( deshalb liegen kopien des meshes auch im mainmemory , da darauf die cpu mit vollem Speed zu greifen kann ) - so funktioniert das im 3D egal mit welcher Engine btw.
Irrlicht schickt also nur änderungen durch den Datenbus und cashed alles was du nicht zum löschen markierst zwischen. Dadurch muss nicht alles neu geladen werden zb. bei einem levelwechsel ... sondern nur die Gemoetrie udn Texturen die wirklich neu sind ... Die Spielfigur zb. bleibt dadurch im Speicher und spart CPU / BUS UND GPU Zeit - da die texturen nicht gelesen, dekomprimiert evtl umgewandelt und an deine Graka geshcikt werden müssen.
Was du machen willst ist alles also absolut möglich und der wrapper ist auf performance optimiert ( und wird in der nächsten release auch noch mal ca 30% schneller - dank neuer Irrlicht version und VC2008 Optimierungstechniken.... ) .
Nur ums nochmals klar zu stellen:
Irrlicht wird unteranderem auch für viele Kommerzielle Projekte eingesetzt ( unteranderem auch von mir ). Auch diverse Playstation2 / Xbox Titel sind damit schon entstanden. Irrlicht IST ausgewachsen und sehr weit mit Features. Aber wie jede andere API will auch diese gelernt sein.
Hier ein paar Beispiele welche mit Irrlicht realisiert wurden:
Crash Car:
http://www.coder3d.com/forum/viewtopic.php?id=7
H-Craft Championship:
http://www.irrgheist.com/games.htm
Amulet of tricolor:
http://www.gamerotor.com/amulet_of_tricolor
gekkeiju Online:
http://www.gekkeijuonline.com/
Diverse (unter anderem Anarchy Online)
http://www.free-multiplayer-fps.evolutionvault.net/
Bolzplatz:
http://www.xenoage.com/bp2k6/en/screenshots.php
Galactic Dream: Rage of War
http://www.rageofwar.net/
Architektur:
http://www.irrlicht3d.org/images/alvaro ... oughts.jpg
etc. dies ist nur ein winziger Auszug aus dem Wiki (welche schon lang nicht mehr mit Projekten komplett ist):
http://www.irrlicht3d.org/wiki/
Thalius
"...smoking hash-tables until until you run out of memory." :P
- 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:
Hallo .....
ich habe schon verstanden wie das geht. Aber das ändert nichts daran das die Befehle IrrRemoveMesh() und IrrRemoveNode() ... deren funktion ja recht eindeutig ist. Speicher nicht mer freigeben dehn sie reservieren. Und daher habe ich das problem das bei mir der Speicher knapp wird. Und dann wird die Ausslagerungs Datei auch noch grösser.
Ich versuche es mal anders zu erleutern.
In den Meisten Programmen werden die Scenen generiert und am ende wider freigegeben. Meshs werden geladen und bei bedarf in die Scene eingefügt. Es ist normalerweise nicht nötig die Meshs und Nodes Ständig zu löschen um neue zu Machen.
Ich dagegen muss zur Laufzeit Meshs Dynamisch erzeugen. dies beinhalten sich verändernde Texture Cords und sich ständig ändernde anzahl von Vertix und Indizien Listen. Ich habe mir jetzt damit beholfen den Refrech nur dann durchzuführen wenn die auch wirklich nötig ist. Das hat geholfen. Aber es änders nichts daran das die Resurcen beim Löschen der Mech und/oder Node daten ncht fregegeben werden ch ache dr a en Extre be s- e
ich habe schon verstanden wie das geht. Aber das ändert nichts daran das die Befehle IrrRemoveMesh() und IrrRemoveNode() ... deren funktion ja recht eindeutig ist. Speicher nicht mer freigeben dehn sie reservieren. Und daher habe ich das problem das bei mir der Speicher knapp wird. Und dann wird die Ausslagerungs Datei auch noch grösser.
Ich versuche es mal anders zu erleutern.
In den Meisten Programmen werden die Scenen generiert und am ende wider freigegeben. Meshs werden geladen und bei bedarf in die Scene eingefügt. Es ist normalerweise nicht nötig die Meshs und Nodes Ständig zu löschen um neue zu Machen.
Ich dagegen muss zur Laufzeit Meshs Dynamisch erzeugen. dies beinhalten sich verändernde Texture Cords und sich ständig ändernde anzahl von Vertix und Indizien Listen. Ich habe mir jetzt damit beholfen den Refrech nur dann durchzuführen wenn die auch wirklich nötig ist. Das hat geholfen. Aber es änders nichts daran das die Resurcen beim Löschen der Mech und/oder Node daten ncht fregegeben werden ch ache dr a en Extre be s- e
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
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

- 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:
Hallo ...
son mist aber auch. Da hat doch mitten beim schreiben die Tastatur aufgegeben
www.optima-code.ch/addtext3d-irr.zip
Das ist der Code Teil ... lauffähig, der mir sorgen bereitet. Wenn du dir mal den TaskManager ansiest. Wärend das teil leuft. Wirst du sofort wissen was ich meine. Da ich aber nicht ausschliessen kann. das der fehler bei mir liegt. wäre ich um deine Meinung bedacht.
son mist aber auch. Da hat doch mitten beim schreiben die Tastatur aufgegeben
www.optima-code.ch/addtext3d-irr.zip
Das ist der Code Teil ... lauffähig, der mir sorgen bereitet. Wenn du dir mal den TaskManager ansiest. Wärend das teil leuft. Wirst du sofort wissen was ich meine. Da ich aber nicht ausschliessen kann. das der fehler bei mir liegt. wäre ich um deine Meinung bedacht.
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
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
