camera auf window zeichen

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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 »

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:
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
TomTom
Beiträge: 130
Registriert: 18.10.2006 18:47

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

Beitrag von Kaeru Gaman »

du solltest FlipBuffers() nicht vergessen...


@ts

http://img504.imageshack.us/img504/3098 ... leroo8.png
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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 »

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:
Zuletzt geändert von ts-soft am 05.08.2007 20:40, insgesamt 1-mal geändert.
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
TomTom
Beiträge: 130
Registriert: 18.10.2006 18:47

Beitrag von TomTom »

das war es auch nicht :((
Pure Basic 4.0
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
TomTom
Beiträge: 130
Registriert: 18.10.2006 18:47

Beitrag von TomTom »

also das timer prob check ich nicht so ganz... "poste" mal den code
Pure Basic 4.0
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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 »

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:
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
Antworten