Seite 1 von 1

Mesh vergrößern

Verfasst: 05.09.2008 03:08
von controller
Hallo

so ich versuch in letzter zeit mit iirlicht zu arbeiten und bin damit zufriedener als mit der momentanen ogre engine aber hab jetzt ein weiteres problem und zwar hab ich einwenig mit der engine herumgespielt und hab ein kleines programm geschieben mit ne kleinen callbackfunktion es macht nichts auser ein mesh zu zeigen, eine FPS camera zu erstellen und wenn man S drückt am oberen rechten rand welcome to irrlicht zu schreiben so weit zu gut nun wollt ich noch ne funktion einbauen mit der man sein mesh vergrößern kann aber dies lief schief da ich immer fehlermeldungen bekamm dann versuchte ich es ohne funktion sondern erstmal gleich in den code einzubauen und hab da immer noch einen runtime fehler kann mir jemand villeicht helfen der code ist hier

Code: Alles auswählen



;includfiles laden
XIncludeFile "Irr3DRequester.pb"

; Variabelen
*camera.irr_camera
*cameraNode.irr_Node
*mesh.irr_mesh
*meshNode.irr_Node
*MeshTexture.irr_Texture
*SceneNode.irr_Node


;callbackfuntion
;--------------------------------------------
ProcedureCDLL.l callback(*event.SEvent)
  
  ;abfragen ob das event von der tastatur kommt
  If *event\EventType = #IRR_EET_KEY_INPUT_EVENT
    key.l = *event\KeyEvent\Key
     If key = 83
      IrrGuiAddStaticText( "Welcome to Irrlicht", 4,0,200,16, #IRR_GUI_NO_BORDER, #IRR_GUI_NO_WRAP )
     EndIf
  EndIf
ProcedureReturn #False
EndProcedure 
;--------------------------------------------




If Irr3DRequester()

  ;Lade Mesh
  *mesh = IrrGetMesh("sydney.md2")
  ;Texture für mesh
  *MeshTexture = IrrGetTexture("sydney.bmp")
  ;mesh in die scene holen
  *meshNode = *mesh
  *sceneNode = IrrAddMeshToScene (*meshNode)
  ;texture in die scene laden  
  IrrSetNodeScale(*meshNode,3.0, 3.0, 3.0)
  IrrSetNodeMaterialTexture( *SceneNode, *MeshTexture, 0 )
  ;sceneFlags bestimmen das mesh von alleine leuchtet
  IrrSetNodeMaterialFlag( *SceneNode, #IRR_EMF_LIGHTING, #IRR_OFF )
  ;mesh vergrößern
  IrrSetNodeScale(*meshNode,3.0, 3.0, 3.0)
  ;camera erstmal zum schauen
  *camera = IrrAddFPSCamera()

  ;Mauszeiger verstecken
  IrrHideMouse()

  ;callbackfunktion aufrufen
  *er = IrrCreateEventReceiver(@Callback())
  IrrSetEventReceiver(*er)

  While IrrRunning()
    IrrBeginScene( 255,255,255 )
    
    IrrDrawScene()

    IrrDrawGUI()

    IrrEndScene()
  Wend

  IrrStop()

EndIf 

End 

zudem wenn jemand lust hat kann er mir auch noch hier zu der frage helfen http://www.purebasic.fr/german/viewtopic.php?t=17586
hat bis jetzt noch keiner geantwortet

Danke schön schon mal im vorraus

Verfasst: 05.09.2008 10:54
von Kaeru Gaman
bei aller liebe, aber hundert worte mit einem einzigen komma ist doch wirklich etwas übertrieben, findest du nicht?
mach doch bitte ein paar satzzeichen, dann kann man das auch lesen.
aber bitte moderat und nicht gleich 37 Ausrufungszeichen.

Verfasst: 05.09.2008 14:46
von controller
Ok, werde versuchen mich zu bessern. :mrgreen:
Aber meinst du, dass es niemand verstanden hat was ich wollte?

Verfasst: 05.09.2008 17:07
von HeX0R
Das Problem ist eher, dass nur wenige die Muse haben solch einen Wörter-Wust zu Ende zu lesen.
Daher verringert sich die Anzahl der Helfer schonmal beträchtlich.

Wer Hilfe will, sollte es den Hilfegebenden nicht noch unnötig erschweren.
(Ab deiner zweiten Zeile da oben habe ich den K(r)ampf aufgegeben, somit weiss ich immernoch nicht, was du eigentlich wolltest.)

Verfasst: 05.09.2008 17:19
von ts-soft

Verfasst: 06.09.2008 00:55
von controller
ok dann nochmal!

Ich würde gerne wissen, was an meinem code nicht stimmt.
Der code an sich ist nur ne spielerrei von mir. Er, auso der code, beinhaltet eine callbackfunktion, man kann ein mesh laden und durch drücken der Taste "S" wird auf dem Bildschirm ein kleiner Text ausgegeben.

Nun versuchte ich eine funktion zu schreiben, die es mir erlauben sollte das mesh zu vergößern oder zu verkleinern.
Dies gelang mir aber nicht. So versuchte ich den Befehl einfach mal so in das Programm einzubauen. Allerdings bekamm ich weiterhin einen Runtime Fehler, anstatt das gewünschte ergebnis.

Den code in dem es sich im zwiten Abschnit andelt steht oben.
Gerne würde ich Ihre\Eure hilfe in anspruch nehmen.
Ich bedanke mich schon einmal im voraus bei Ihnen.


controller den 06.09.2008 im Netz


P.S.
Bitte entschuldigen Sie meinen Sarkasmus.

Des weiteren:
Es wird keine haftung für Satzstellung und Rechtschreibung gegeben. :allright:

Verfasst: 06.09.2008 23:30
von Thalius
Fehler:

Code: Alles auswählen

*meshNode = *mesh 
Du schreibst hier den pointer von deinem geladenen mesh-object in einen neuen pointer mit neuem Namen, jedoch wird dadurch nicht ein Node draus ;)

Um den Node zu vergrössern kannst du entweder NodeScale von einer funktion aufrufen ( im callback ) oder vom mainloop aus via Key Events.

für das Abfragen der Tasten würde ich die Konstanten verwenden und nicht die einfach hart ausfüllen ( siehe "83" ) - diese findest du im includefile:

#IRR_KEY* etc.

tip: kompiliere deine app zum debugfgen als "console-application" dadurch weisst du wos in etwa hängt und ob oder fehler ausgegeben werden.

der tut:

Code: Alles auswählen

;includfiles laden
XIncludeFile "Irr3DRequester.pb"

; Variabelen
*camera.irr_camera
*cameraNode.irr_Node
*mesh.irr_mesh
*meshNode.irr_Node
*MeshTexture.irr_Texture
*SceneNode.irr_Node


;callbackfuntion
;--------------------------------------------
ProcedureCDLL.l callback(*event.SEvent)
  
  ;abfragen ob das event von der tastatur kommt
  If *event\EventType = #IRR_EET_KEY_INPUT_EVENT
    key.l = *event\KeyEvent\key
    If key = 83
      IrrGuiAddStaticText( "Welcome to Irrlicht", 4,0,200,16, #IRR_GUI_NO_BORDER, #IRR_GUI_NO_WRAP )
    EndIf
  EndIf
  ProcedureReturn #False
EndProcedure
;--------------------------------------------




If Irr3DRequester()
  
  ;Lade Mesh
  *mesh = IrrGetMesh("media/sydney.md2")
  ;Texture für mesh
  *MeshTexture = IrrGetTexture("media/sydney.bmp")
  ;mesh in die scene holen
  
  *SceneNode = IrrAddMeshToScene (*mesh)

  IrrSetNodeScale(*SceneNode,3.0, 3.0, 3.0)
  IrrSetNodeMaterialTexture( *SceneNode, *MeshTexture, 0 )
  ;sceneFlags bestimmen das mesh von alleine leuchtet // das mesh von Licht beeinflusst wird !
  IrrSetNodeMaterialFlag( *SceneNode, #IRR_EMF_LIGHTING, #IRR_OFF )
  ;mesh vergrößern
  IrrSetNodeScale(*SceneNode,3.0, 3.0, 3.0)
  ;camera erstmal zum schauen
  *camera = IrrAddFPSCamera()
  
  ;Mauszeiger verstecken
  IrrHideMouse()
  
  ;callbackfunktion aufrufen
  *er = IrrCreateEventReceiver(@callback())
  IrrSetEventReceiver(*er)
  
  While IrrRunning()
    IrrBeginScene( 255,255,255 )
    
    IrrDrawScene()
    
    IrrDrawGUI()
    IrrEndScene()
  Wend
  
  IrrStop()
  
EndIf

End 
Hier ein Beispiel welches einen Node auf einen andern ausrichtet. Damit sollts nimemr schwer sein ein Skalieren hinzubekommen: ;)
http://www.purebasic.fr/english/viewtopic.php?t=30500

Cheers,
Thalius

Verfasst: 10.09.2008 20:17
von controller
hey danke für die antwort!