Irrlicht Engine

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

DeleD hat einen Ziemlich gut Funktionierenden X konverter
Irrlicht kan DeleD ASCII Files direkt einlesen .. plus du kannst die vertex daten etc. wenn dus brauchst ebenfalls sehr leicht aus denen direkt auslesen. Alternativ gugg mal .irr scene files an. Die sind in XML aufgebaut. Generell kannst du in xml ganze szenerien , animatoren, materialien und vertex / UV infos fuer meshes ablegen. IRRXML ist recht schnell ;)

bei Kollisionen gegen ein static ( oft ein grosses mesh zb welches die fixe szene beiinhaltet ) kannst du dieses mit:
IrrAddMeshToSceneAsOcttree(*mesh.irr_mesh)
hinzufügen. Octree ( durch-4-zerbäumeln *g* ) spaltet intern dein mesh besonders effektiv für kollisionsabfragen auf. Wenn du dann noch ein terrain verwendest musst du die beiden in eine Collisiongroup schreiben.

Für alles animierte , dynamische player etc sind bounding box collisionen gedacht. Mit sowas und den netten callback animators kann man dinge wie volumetrischen nebel welcher zurückweicht wenn man sich hindurch bewegt realisieren. :)

Imo werd ich mich mal an die IrrWdoku machen, später gibts dann ein paar tutorials für materialien und special effects.

Cheers, Thalius

Thalius
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

??? :o
gehts auch auf deutsch? :?
v6.00
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

noch was:
wo krig ich DeleD her?

@Ground0:
hab mir OpenFX von nem Freund runterladen lassen, und an sich ist er nicht schwer zu bedienen (aber als Anfänger tu ich mich trozdem nicht leicht) aber gibts da ne deutsche Hilfe?

Nehmen wir mal an, ich hab ein Modell erstellt:
wie kann ich ne Textur rum machen, und kann man die Textur irgendwo exportieren, dass man es mit der Irrlicht-Engine wieder einladen kann?
(bei dem Beispiel (die Burg) sind nur Grafikstücke zum einladen, nicht die ganze "Haut", ist das mit OpenFX auch möglich?)
Ich versteh das noch nicht ganz; kannst du mir das mal erklären?
v6.00
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Thomas hat geschrieben:noch was:
wo krig ich DeleD her?
http://www.google.de/search?hl=de&q=Del ... uche&meta=
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Und wegen Texturieren mit Wings. Hat mir das hier damals recht geholfen.

http://www.code5.ch/meckardt/tutorials/ ... extur.html

Thalius
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Thalius hat geschrieben:Und wegen Texturieren mit Wings. Hat mir das hier damals recht geholfen.

http://www.code5.ch/meckardt/tutorials/ ... extur.html

Thalius
find ich gut! :allright:

Wie kann man die *.3ds-Dateien mit der Irrlicht-Engine am bessten darstellen?
Kann da auch mit den Collisionen arbeiten?
v6.00
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Alle im Doku beschriebenen Objekt Formate kannst du als Mesh laden.

Und na klar kannst du da Kollisionen benutzen.. schau dir mal das Collision example an. Um ein sehr komplexes Mesh welches du zb. als level Grundlage erstellst mit einer schnellen Kollision zu versehen solltest du dieses wie oben beschrieben als "Octree" hinzufügen.

Wie Du das Machst.. siehe Irrwrapper Beispiel 04:

Code: Alles auswählen

;; ----------------------------------------------------------------------------
;; Irrlicht Wrapper For Imperative Languages - Purebasic Examples
;; IrrlichtWrapper and FreeBasic-Example by Frank Dodd (2006)
;; Improved IrrlichtWrapper and PureBasic-Example by Michael Taupitz (2006)
;; ----------------------------------------------------------------------------
;; Example 04 : 3D Models - Meshes And Nodes
;; This example loads an MD2 model And adds it As a node To the scene
;; ----------------------------------------------------------------------------

;; ////////////////////////////////////////////////////////////////////////////
;; Includes For extension libraries
XIncludeFile "IrrlichtWrapper.pbi"

;; ////////////////////////////////////////////////////////////////////////////
;; Init the DLL
InitIrrlichtWrapperDll()

;; Include the Irr3D-Requester
XIncludeFile "Irr3DRequester.pb"


;; ////////////////////////////////////////////////////////////////////////////
;; Global variables

; irrlicht objects
*MD2Mesh.irr_mesh
*MeshTexture.irr_texture
*SceneNode.irr_node
*OurCamera.irr_camera


;; ////////////////////////////////////////////////////////////////////////////
;; GDB debugger main() function


; -----------------------------------------------------------------------------
; To Start the Irrlicht-Device we use the Irr3DRequester, to make it more comfortable
; for the Users, and also easier to test different resolutions and devices.
If Irr3DRequester()

  ; set the window caption
  IrrSetWindowCaption( "Example 04: 3D Models - Meshes and Nodes" )
  
  ; add credits for the model as a static text GUI object on the display
  IrrGuiAddStaticText( "Welcome to Irrlicht", 4,0,200,16, #IRR_GUI_NO_BORDER, #IRR_GUI_NO_WRAP )
  
  ; load a mesh this acts as a blue print for the model
  *MD2Mesh = IrrGetMesh( "..\media\sydney.md2" )
  
  ; load texture resources for texturing the scene nodes
  *MeshTexture = IrrGetTexture( "..\media\sydney.bmp" )
  
  ; add the mesh to the scene as a new node, the node is an instance of the
  ; mesh object supplied here
  *SceneNode = IrrAddMeshToScene( *MD2Mesh )
  
  ; apply a material to the node to give its surface color
  IrrSetNodeMaterialTexture( *SceneNode, *MeshTexture, 0 )
  
  ; switch off lighting effects on this model, as there are no lights in this
  ; scene the model would otherwise render pule black
  IrrSetNodeMaterialFlag( *SceneNode, #IRR_EMF_LIGHTING, #IRR_OFF )
  
  ; play an animation sequence embeded in the mesh. MD2 models have a group of
  ; preset animations for various poses and actions. this animation sequence is
  ; the character standing idle
  IrrPlayNodeMD2Animation( *SceneNode, #IRR_EMAT_STAND )
  
  ; add a camera into the scene, the first co-ordinates represents the 3D
  ; location of our view point into the scene the second co-ordinates specify the
  ; target point that the camera is looking at
  *OurCamera = IrrAddCamera( 50,0,0, 0,0,0 )
  
  
  ; -----------------------------------------------------------------------------
  ; while the irrlicht environment is still running
  While IrrRunning()
      ; begin the scene, erasing the canvas with sky-blue before rendering
      IrrBeginScene( 240, 255, 255 )
  
      ; draw the scene
      IrrDrawScene()
      
      ; draw the GUI
      IrrDrawGUI()
  
      ; end drawing the scene and render it
      IrrEndScene()
  Wend
  
  ; -----------------------------------------------------------------------------
  ; Stop the irrlicht engine and release resources
  IrrStop()
  
EndIf  

;; ////////////////////////////////////////////////////////////////////////////
;; Free the DLL
FreeIrrlichtWrapperDll()

ändere mal...

Code: Alles auswählen

*MD2Mesh = IrrGetMesh( "pfad\zu\3dsmesh" )
...
*MeshTexture = IrrGetTexture( "pfad\zu\textur\für\mesh" )
...
und zum Lightmappen und Szenen erstellen kannst du als Alternative zu Deled auch mal IrrEdit ( http://www.ambiera.com/irredit/ ) ausprobiern.

Nochwas irrlicht kann 4 Texturen pro Objekt laden, als Tip solltest du diese ned "verschwenden". Idealerweise benutzt du eine als "Diffusemap", "Lightmap", "Bumpmap", "Spec-Map" ... mit den 4 Typen kannst du Photorealistische Ergebnisse erziehlen .. aber zum Anfangen empfiel ich dir mal mit einer Textur pro Mesh zu arbeiten die du UV mappst ( Wings iss ganz gut dafür ).

Ausserdem achte drauf das deine verwendeten Texturen durch 8 teilbar sind .. typischerweise 128x128 , 256x256, 512x512 usw.
16 Bit texturen brauchen auch noch halb soviel Speicher ( den Grafikspeicher solltest du im Auge behalten ... Texturen brauchen jeweils die volle unkomprimierte Speichermenge im Grafikspeicher. Desto geschickter du mit Texturen etc umgehst desto schneller wird deine Szenery gerendert und speziell desto besser wird das ganze aussehen.

Hier ein altes Beispiel einer Kirche:
Bild

Und die UV gemappte Textur dazu:
Bild

Thalius
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Muss ich mal genauer ansehen,
danke für's erste!
(IrrEdit hab ich) :mrgreen:
v6.00
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Hi,
am besten ich erkläre euch mal wie ich es jetzt gemacht habe:

Als erstes hab ich in Wings3D einen Raum mit ein paar Durchgängen, usw. erstellt.
dann habe ich ne Textur erstellt, so wie es in dem Tutorial ( http://www.code5.ch/meckardt/tutorials/ ... extur.html ) beschrieben war.
Dann hab ich es als *.3ds exprotiert.

Bezüglich Code; es geht auch kürzer:

Code: Alles auswählen

XIncludeFile "IrrlichtWrapper.pbi"

XIncludeFile "Irr3DRequester.pb"

InitIrrlichtWrapperDll()

*Mesh.irr_mesh
*Node.irr_node
*Camera.irr_camera
*CameraNode.irr_node
*MapCollision.irr_selector
*ret.irr_selector

If Irr3DRequester()

  IrrSetWindowCaption( "HausTest" )
  *Mesh = IrrGetMesh( "..\media\HausTest.3ds" )

  *Node = IrrAddMeshToSceneAsOcttree( *Mesh )

  ;*****-das hier damit die Textur angezeigt wird!!!-*****
  IrrSetNodeMaterialFlag(*Node, #Irr_EMF_LIGHTING, #Irr_Off)
 
  *Camera = IrrAddFPSCamera()
  
  *CameraNode = *Camera
  
  IrrSetNodePosition( *CameraNode, 150, 49, 69 )
  IrrSetNodeRotation( *CameraNode, 4, -461.63, 0 )
  *MapCollision = IrrGetCollisionGroupFromComplexMesh( *Mesh, *Node )
  *CameraNode = *Camera
  *ret = IrrAddCollisionAnimator( *MapCollision, *CameraNode, 30.0, 160.0 ,30.0, 0.0, -0.50, 0.0, 0.0, 50.0, 0.0 )
  
  IrrHideMouse()


  While IrrRunning()
      IrrBeginScene( 200, 255, 255 )
  
      IrrDrawScene()
  
      IrrEndScene()
  Wend
  
  IrrStop()
EndIf
FreeIrrlichtWrapperDll()
Aber noch ne Frage:
wo kann man einstellen wie weit die Camera in der "Luft hängt" (vom Boden meines Hauses entfernt ist) hab bei IrrAddCollisionAnimator(...) schon etwas rumprobiert, aber das Wahre wars bis jetzt noch nicht.
v6.00
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Aber noch ne Frage:
wo kann man einstellen wie weit die Camera in der "Luft hängt" (vom Boden meines Hauses entfernt ist) hab bei IrrAddCollisionAnimator(...) schon etwas rumprobiert, aber das Wahre wars bis jetzt noch nicht.
Wenn ich dich richtig verstanden habe ist das die Y Achse des folgenden Befehls:

Code: Alles auswählen

IrrGetNodePosition(*irr_node.l,*x.f,*y.f,*z.f) 
Respektive Y Offset des Animators:

Code: Alles auswählen

*ret = IrrAddCollisionAnimator( *MapCollision, *CameraNode, 30.0,30.0,30.0, 0.0,-3.0,0.0, 0.0,50.0,0.0 )

; Parameters:
IrrAddCollisionAnimator(*irr_selector.l, *irr_node.l, radiusx.f, radiusy.f, radiusz.f,gravityx.f,gravityy.f,gravityz.f,offsetx.f,offsety.f,offsetz.f) 
... und zurück zur Manual... ;)

Thalius
Antworten