Mesh vergrößern

Anfängerfragen zum Programmieren mit PureBasic.
controller
Beiträge: 16
Registriert: 28.08.2008 16:23

Mesh vergrößern

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
controller
Beiträge: 16
Registriert: 28.08.2008 16:23

Beitrag von controller »

Ok, werde versuchen mich zu bessern. :mrgreen:
Aber meinst du, dass es niemand verstanden hat was ich wollte?
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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.)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
controller
Beiträge: 16
Registriert: 28.08.2008 16:23

Beitrag 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:
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag 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
"...smoking hash-tables until until you run out of memory." :P
controller
Beiträge: 16
Registriert: 28.08.2008 16:23

Beitrag von controller »

hey danke für die antwort!
Antworten