Seite 2 von 3

Verfasst: 05.08.2007 20:21
von Kaeru Gaman
nuja... wenn du nix anderes drin hast, als in deinem code oben...

was soll er dann auch zeichnen, deine welt is doch leer...

du hast wahrscheinlich ein klasse 3D-Bild von nem unbeleuchteten schwarzen Adler vor schwarzem Hintergrund...

Verfasst: 05.08.2007 20:23
von ts-soft
Kaeru Gaman hat geschrieben:du hast wahrscheinlich ein klasse 3D-Bild von nem unbeleuchteten schwarzen Adler vor schwarzem Hintergrund...
Haste mal nen link, sowas suche ich noch :mrgreen:

Verfasst: 05.08.2007 20:25
von TomTom
also ich habe den code jetzt geändert... er sieht jezt so aus.

Code: Alles auswählen


InitEngine3D()
InitSprite()
InitKeyboard()
InitMouse()
ExamineDesktops()

OpenWindow(0,0,0,1024,768,"3D-Editor by Thomas Brüggemann", #PB_Window_MinimizeGadget)
OpenWindowedScreen(WindowID(0), 71, 0, 953, 768, 0, 0, 0)
SetWindowState(0, #PB_Window_Maximize) 

CreateGadgetList(WindowID(0)) 

ButtonGadget(0, 0, 0, 70, 30, "Neuer Stein")
TextGadget(1, 0, 31, 70, 20, "Verschiebung:",#PB_Text_Center) 
StringGadget(2, 0, 51, 50, 20, "100",#PB_String_Numeric ) 
StringGadget(3, 0, 71, 50, 20, "100",#PB_String_Numeric ) 
StringGadget(4, 0, 91, 50, 20, "100",#PB_String_Numeric ) 
TextGadget(5, 51, 51, 19, 20, "X",#PB_Text_Border|#PB_Text_Center) 
TextGadget(6, 51, 71, 19, 20, "Y",#PB_Text_Border|#PB_Text_Center) 
TextGadget(7, 51, 91, 19, 20, "Z",#PB_Text_Border|#PB_Text_Center) 

TextGadget(8, 0, 111, 70, 20, "Drehung:",#PB_Text_Center) 
StringGadget(9, 0, 131, 50, 20, "0",#PB_String_Numeric ) 
StringGadget(10, 0, 151, 50, 20, "0",#PB_String_Numeric ) 
StringGadget(11, 0, 171, 50, 20, "0",#PB_String_Numeric ) 
TextGadget(12, 51, 131, 19, 20, "X",#PB_Text_Border|#PB_Text_Center) 
TextGadget(13, 51, 151, 19, 20, "Y",#PB_Text_Border|#PB_Text_Center) 
TextGadget(14, 51, 171, 19, 20, "Z",#PB_Text_Border|#PB_Text_Center) 

TextGadget(15, 0, 191, 70, 20, "Skallierung:",#PB_Text_Center) 
StringGadget(16, 0, 211, 50, 20, "100",#PB_String_Numeric ) 
StringGadget(17, 0, 231, 50, 20, "100",#PB_String_Numeric ) 
StringGadget(18, 0, 251, 50, 20, "100",#PB_String_Numeric ) 
TextGadget(19, 51, 211, 19, 20, "X",#PB_Text_Border|#PB_Text_Center) 
TextGadget(20, 51, 231, 19, 20, "Y",#PB_Text_Border|#PB_Text_Center) 
TextGadget(21, 51, 251, 19, 20, "Z",#PB_Text_Border|#PB_Text_Center) 


Structure stein
  x.d
  y.d
  z.d
  zoomx.d
  zoomy.d
  zoomz.d
  winkelx.d
  winkely.d
  an.d
  
EndStructure

Dim welt.stein(1000)



Procedure window()
  window0 = WindowEvent() 
  If window0 = #PB_Event_CloseWindow
    esc = 1
    ProcedureReturn esc
  EndIf
EndProcedure


;CreateCamera(0, 12, 0, 44, 50)
;CreateCamera(1, 58, 0, 44, 50)
;CreateCamera(2, 12, 50, 44, 50)
;CreateCamera(3, 58, 50, 44, 50)

CreateCamera(0, 0, 0, 50, 50)
CreateCamera(1, 50, 0, 50, 50)
CreateCamera(2, 0, 50, 50, 50)
CreateCamera(3, 50, 50, 50, 50)

CameraBackColor(0, RGB(255,0,0))


Repeat
  
  esc = window()
  RenderWorld()
   

  
 
Until esc = 1


er zeigt mir nichtmal schwarz an (er zeigt mir nur die normale window hintergrund farbe an.

Verfasst: 05.08.2007 20:38
von Kaeru Gaman
du solltest FlipBuffers() nicht vergessen...


@ts

http://img504.imageshack.us/img504/3098 ... leroo8.png

Verfasst: 05.08.2007 20:39
von ts-soft
Mal abgesehen vom Kameraproblem, das Programm ist Tod!
Entweder WaitWindowEvent(10) oder noch besser einen HighResTimer
einsetzen, damit die Buttons überhaupt funktionieren können.

In die TimerProc packste dann den RenderWorld kram, durch HighResTimer
haste dann auch wirklich 10 ms die ausreichen sollten.

@Kaeru
Danke, hat leider keine Transparenz, aber ansonsten genau sowas hab ich mir vorgestellt :mrgreen:

Verfasst: 05.08.2007 20:39
von TomTom
das war es auch nicht :((

Verfasst: 05.08.2007 20:42
von Kaeru Gaman
TomTom hat geschrieben:das war es auch nicht :((
was war es auch nicht...

ich hab bei mir flipbuffers reingehaun, und es lief..

...abgesehen von deinem timer-problem, was ja ts erwähnt hat...

Verfasst: 05.08.2007 20:43
von TomTom
also das timer prob check ich nicht so ganz... "poste" mal den code

Verfasst: 05.08.2007 20:50
von Kaeru Gaman
also, es funktioniert zwar, aber läuft mit maximaler framerate durch.
d.h. es dürfte auch so an die 100% CPU verbraten.

in deiner eventabfrage solltest du zumindest WindowEvent() durch WaitWindowEvent(10) ersetzen.

das mit dem HighResTimer soll dir ruhig ts erklären...

Verfasst: 05.08.2007 20:53
von ts-soft
http://www.purebasic.fr/german/viewtopi ... 805#110805
Hab das mal direct eingebaut:

Code: Alles auswählen

Global TimerResolution.TIMECAPS

Procedure Timer_Init()
  Global Dim TimerHandles.l(15)
  Global Dim TimerProcedures.l(15)

  Protected err.l = timeGetDevCaps_(@TimerResolution, SizeOf(TIMECAPS))

  If err = #TIMERR_NOERROR
    ProcedureReturn #True
  EndIf

  ProcedureReturn #False
EndProcedure

Procedure Timer_End()
  Protected I.l

  timeEndPeriod_(TimerResolution\wPeriodMin)

  For I = 0 To 15
    If TimerHandles(I)
      timeKillEvent_(TimerHandles(I))
    EndIf
  Next

EndProcedure

Procedure Timer_Callback(TimerHandle, Message, TimerID, wParam, lParam)
  If TimerProcedures(TimerID)
    CallFunctionFast(TimerProcedures(TimerID))
  EndIf
EndProcedure

Procedure TimerStart(TimerID.l, Delay.l, ProcAddr.l)
  If TimerID > 15 Or TimerID < 0 : ProcedureReturn #False : EndIf

  If TimerHandles(TimerID)
    timeKillEvent_(TimerHandles(TimerID))
  EndIf

  TimerProcedures(TimerID) = ProcAddr
  TimerHandles(TimerID) = timeSetEvent_(Delay, 0, @Timer_Callback(), TimerID, #TIME_PERIODIC)

  ProcedureReturn TimerHandles(TimerID)
EndProcedure

Procedure TimerStop(TimerID.l)
  If TimerID > 15 Or TimerID < 0 : ProcedureReturn #False : EndIf

  If TimerHandles(TimerID)
    timeKillEvent_(TimerHandles(TimerID))

    ProcedureReturn #True
  EndIf

  ProcedureReturn #False
EndProcedure

Procedure TimerGetMaxRes()
  ProcedureReturn TimerResolution\wPeriodMax
EndProcedure

Procedure TimerGetMinRes()
  ProcedureReturn TimerResolution\wPeriodMin
EndProcedure

InitEngine3D()
InitSprite()
InitKeyboard()
InitMouse()
ExamineDesktops()

OpenWindow(0,0,0,1024,768,"3D-Editor by Thomas Brüggemann", #PB_Window_MinimizeGadget)
OpenWindowedScreen(WindowID(0), 71, 0, 953, 768, 0, 0, 0)
SetWindowState(0, #PB_Window_Maximize)

CreateGadgetList(WindowID(0))

ButtonGadget(0, 0, 0, 70, 30, "Neuer Stein")
TextGadget(1, 0, 31, 70, 20, "Verschiebung:",#PB_Text_Center)
StringGadget(2, 0, 51, 50, 20, "100",#PB_String_Numeric )
StringGadget(3, 0, 71, 50, 20, "100",#PB_String_Numeric )
StringGadget(4, 0, 91, 50, 20, "100",#PB_String_Numeric )
TextGadget(5, 51, 51, 19, 20, "X",#PB_Text_Border|#PB_Text_Center)
TextGadget(6, 51, 71, 19, 20, "Y",#PB_Text_Border|#PB_Text_Center)
TextGadget(7, 51, 91, 19, 20, "Z",#PB_Text_Border|#PB_Text_Center)

TextGadget(8, 0, 111, 70, 20, "Drehung:",#PB_Text_Center)
StringGadget(9, 0, 131, 50, 20, "0",#PB_String_Numeric )
StringGadget(10, 0, 151, 50, 20, "0",#PB_String_Numeric )
StringGadget(11, 0, 171, 50, 20, "0",#PB_String_Numeric )
TextGadget(12, 51, 131, 19, 20, "X",#PB_Text_Border|#PB_Text_Center)
TextGadget(13, 51, 151, 19, 20, "Y",#PB_Text_Border|#PB_Text_Center)
TextGadget(14, 51, 171, 19, 20, "Z",#PB_Text_Border|#PB_Text_Center)

TextGadget(15, 0, 191, 70, 20, "Skallierung:",#PB_Text_Center)
StringGadget(16, 0, 211, 50, 20, "100",#PB_String_Numeric )
StringGadget(17, 0, 231, 50, 20, "100",#PB_String_Numeric )
StringGadget(18, 0, 251, 50, 20, "100",#PB_String_Numeric )
TextGadget(19, 51, 211, 19, 20, "X",#PB_Text_Border|#PB_Text_Center)
TextGadget(20, 51, 231, 19, 20, "Y",#PB_Text_Border|#PB_Text_Center)
TextGadget(21, 51, 251, 19, 20, "Z",#PB_Text_Border|#PB_Text_Center)


Structure stein
  x.d
  y.d
  z.d
  zoomx.d
  zoomy.d
  zoomz.d
  winkelx.d
  winkely.d
  an.d
 
EndStructure

Dim welt.stein(1000)

Procedure TimerProc()
  RenderWorld()
  FlipBuffers()
EndProcedure

Procedure window()
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndProcedure


;CreateCamera(0, 12, 0, 44, 50)
;CreateCamera(1, 58, 0, 44, 50)
;CreateCamera(2, 12, 50, 44, 50)
;CreateCamera(3, 58, 50, 44, 50)

CreateCamera(0, 0, 0, 50, 50)
CreateCamera(1, 50, 0, 50, 50)
CreateCamera(2, 0, 50, 50, 50)
CreateCamera(3, 50, 50, 50, 50)

CameraBackColor(0, RGB(255,0,0))

Timer_Init() 
TimerStart(1,1000, @TimerProc()) 
window()
Timer_End() 
In der TimerProc() machste den Screenkram, in window() deine Buttons,
und alles läuft ohne stolpern :wink: