Seite 1 von 2

würfel mit buttion bewegen, wie geht das hier

Verfasst: 10.12.2005 12:09
von super_castle
hallo, ich habe eine würfeldemo im fenster.
habe dieses fenster kleiner gemacht:
"OpenWindowedScreen(WindowID(0), 0, 0, 300, 300, 0, 0, 0)"
und möchte auf den rest des "openwindow" 2 druckbutton setzen und damit den würfel steuern.
wie bekomme ich die button jetzt in das fenster.

mfg castle

Code: Alles auswählen

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

OpenWindow(0, 50, 50, 640, 480, #PB_Window_SystemMenu, "3D - Würfel")
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0)

Procedure RCol()
 ProcedureReturn RGB(Random(240)+15, Random(235)+20, Random(235)+20)
EndProcedure

Procedure NewMaterial(N)
 
 CreateTexture(N, 256, 256)
 StartDrawing(TextureOutput(N))
  Box(  0,   0, 128, 128, RCol())
  Box(  0, 128, 128, 128, RCol())
  Box(128,   0, 128, 128, RCol())
  Box(128, 128, 128, 128, RCol())
 StopDrawing()

 CreateMaterial    (0, TextureID(N))
   
 ProcedureReturn MaterialID(0)
EndProcedure
 
 ;- Kamera einstellen
 
 CreateCamera(0,  0,  5, 100, 90)
 CameraLocate(0, 33, 56, -66)
 CameraLookAt(0, 10, 10, 15)
 
 DataSection
  V_01:
   Data.f 00,00,00 ;Point 0
   Data.f 32,00,00 ;Point 1
   Data.f 00,00,32 ;Point 2
   Data.f 32,00,32 ;Point 3
   Data.f 00,32,00 ;Point 4
   Data.f 32,32,00 ;Point 5                 P2                    P3
   Data.f 00,32,32 ;Point 6                   *------------------*
   Data.f 32,32,32 ;Point 7                 /  \ _________ D0  / |
  T_01:               ;                 P0 /   D1          \  / D5|
   Data.w 0, 1, 2 ;Dreieck 0  (oben)     *------------------*\   |
   Data.w 2, 1, 3 ;Dreieck 1             |\               P1| |  |
   Data.w 6, 5, 4 ;Dreieck 2  (unten)    |  \     D8        | |  |
   Data.w 7, 5, 6 ;Dreieck 3             |    \             | |  |
   Data.w 7, 1, 5 ;Dreieck 4  (rechts)   |      \           | \  |
   Data.w 3, 1, 7 ;Dreieck 5             |        \         |  | |
   Data.w 0, 6, 4 ;Dreieck 6  (links)    |          \       |  | |
   Data.w 2, 6, 0 ;Dreieck 7             |   D9       \     |   \|
   Data.w 5, 1, 0 ;Dreieck 8  (vorne)    |              \   | D4 * P7
   Data.w 0, 4, 5 ;Dreieck 9             |                \ |  /
   Data.w 2, 3, 7 ;Dreieck 10 (hinten)   *------------------*/
   Data.w 7, 6, 2 ;Dreieck 11            P4                 P5
  U_01:
   Data.f 0.0, 0.0 ; Vertex 0
   Data.f 0.0, 1.0 ; Vertex 1
   Data.f 1.0, 0.0 ; Vertex 2
   Data.f 1.0, 1.0 ; Vertex 3
   
   Data.f 0.0, 0.0 ; Vertex 4
   Data.f 0.0, 1.0 ; Vertex 5
   Data.f 1.0, 0.0 ; Vertex 6
   Data.f 1.0, 1.0 ; Vertex 7
   
  EndDataSection
 
 CreateMesh(0)
  SetMeshData(0, #PB_Mesh_Vertices,      ?V_01,   08)
  SetMeshData(0, #PB_Mesh_Triangles,     ?T_01,   12)
  SetMeshData(0, #PB_Mesh_UVCoordinates, ?U_01,   08)
 
 CreateEntity(0, MeshID(0), NewMaterial(0))
 EntityLocate(0, 5, 0, 5)
 
 ;- Hauptschleife
 Repeat
 
  RenderWorld()
 
  StartDrawing(ScreenOutput())
   Locate(4, 3)
   FrontColor(255,255,255) : BackColor(0,0,0)
   DrawText("Position = " +Str(CameraX(0))+ " ; " +Str(CameraY(0))+ " ; " + Str(CameraZ(0)) + Space(10))
   Locate(4, 460) : DrawText("Auf = Num8  |  Ab = Num2  |  Textur ändern = Eingabe | Drehen = Strg rechts")
  StopDrawing()
 
  FlipBuffers()
 
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_All)
   Zm = 0 : Xm = 0 : Ym = 0
   If KeyboardPushed(#PB_Key_Up)       : Zm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Down)     : Zm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Right)    : Xm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Left)     : Xm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad8)     : Ym =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad2)     : Ym = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Return)   : N*-1+1 : EntityMaterial(0, NewMaterial(N)) : EndIf
   MoveCamera(0, Xm, Ym, Zm)
   If KeyboardPushed(#PB_Key_RightControl)
     ReleaseMouse(0)
     ExamineMouse()
     RotateCamera(0, -MouseDeltaX(), -MouseDeltaY(), 0)
     MouseLocate(320, 240)
   EndIf
  EndIf
  If KeyboardReleased(#PB_Key_RightControl) : ReleaseMouse(1) : EndIf
   
  RotateEntity(0, 0.1, 0.05, 0.1)
   
Until KeyboardPushed(#PB_Key_Escape) Or WindowEvent() = #PB_Event_CloseWindow

CloseScreen()

End
; IDE Options = PureBasic v3.94 (Windows - x86)
; CursorPosition = 84
; FirstLine = 43
; Folding = -


Verfasst: 10.12.2005 18:41
von AND51
Ist zwar nicht direkt hilfreich, aber bei mir kommt immer ein fehler, wenn ich Eingabe drücke:
"Invalid memory access." (Beim wechseln der Textur in Zeile 15)

beantwortet nicht deine Frage, aber ich dachte, es offenbart ein anderes Problem, damit du in Zukunft nicht mehr danach suchen musst....

Verfasst: 10.12.2005 19:19
von super_castle
das ist eine texture, die hiermit nichts zu tun hat.
ich möchte 2 button dort unterbringen.
kannst die zeile deaktivieren, dann läuft das programm, sind doch nur abfragen von tasten nichts weiter.

mfd castle

Verfasst: 10.12.2005 21:00
von AND51
wollt eh nur bescheid sagen, wusste nicht ob das von interesse ist, hätt ja sein können...

Verfasst: 10.12.2005 22:20
von AndyX
Einfach den WindowedScreen mit RightOffset und BottomOffset maken und dann Gadgets dazu plazen.

Verfasst: 10.12.2005 22:42
von Kiffi
> maken und dann [...] plazen.

:shock:

Verfasst: 10.12.2005 23:27
von AndyX
Huch! Kiffi ist bei dem Anblick meiner Rechtschreibung ohnmächtig geworden :mrgreen:

Verfasst: 11.12.2005 14:09
von super_castle
hallo, jetzt bekomme ich im window(grau) den 3dscreen mit dem würfel.
wenn ich mehrmals starte, kommt auch manchmal nur wieder ein komplettes schwarzes window. woran liegt das?
muss beim schliessen wieder speicher freigegeben werden,und wie?
im 3d-fenster (zur zeit noch schwarz) ist ein oberer rand von ca 20 pixel breite, sieht man, wenn man den würfel nach oben verschiebt, wie bekommt man den weg?
wie kann man dem 3d-fenster einen farbigen hintergrund geben?
danke für die hilfe.

neuer nachtrag: wenn das window schwarz ist und ich schiebe ein anderes window darüber, dann werden die berührten flächen grau vomwindow. obwohl ich diese beiden befehle :
FlipBuffers()
RenderWorld()
schon drin habe.????

mfg castle

Code: Alles auswählen

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

OpenWindow(0, 0, 0, 800, 700, #PB_Window_SystemMenu , "3D - Würfel")
OpenWindowedScreen(WindowID(0), 130, 5, 400, 400, 0, 0, 0)

Procedure RCol()
 ProcedureReturn RGB(Random(240)+15, Random(235)+20, Random(235)+20)
EndProcedure

Procedure NewMaterial(N)
 
 CreateTexture(N, 256, 256)
 StartDrawing(TextureOutput(N))
  Box(  0,   0, 128, 128, RCol())
  Box(  0, 128, 128, 128, RCol())
  Box(128,   0, 128, 128, RCol())
  Box(128, 128, 128, 128, RCol())
 StopDrawing()

 CreateMaterial    (0, TextureID(N))
   
 ProcedureReturn MaterialID(0)
EndProcedure
 
 ;- Kamera einstellen
 
 CreateCamera(0,  0,  5, 100, 90)
 CameraLocate(0, 33, 56, -66)
 CameraLookAt(0, 10, 10, 15)
 CreateLight(0, RGB(0,0,255), 100.0, 0, 0)   ; Blue light
 
 DataSection
  V_01:
   Data.f 00,00,00 ;Point 0
   Data.f 32,00,00 ;Point 1
   Data.f 00,00,32 ;Point 2
   Data.f 32,00,32 ;Point 3
   Data.f 00,32,00 ;Point 4
   Data.f 32,32,00 ;Point 5                 P2                    P3
   Data.f 00,32,32 ;Point 6                   *------------------*
   Data.f 32,32,32 ;Point 7                 /  \ _________ D0  / |
  T_01:               ;                 P0 /   D1          \  / D5|
   Data.w 0, 1, 2 ;Dreieck 0  (oben)     *------------------*\   |
   Data.w 2, 1, 3 ;Dreieck 1             |\               P1| |  |
   Data.w 6, 5, 4 ;Dreieck 2  (unten)    |  \     D8        | |  |
   Data.w 7, 5, 6 ;Dreieck 3             |    \             | |  |
   Data.w 7, 1, 5 ;Dreieck 4  (rechts)   |      \           | \  |
   Data.w 3, 1, 7 ;Dreieck 5             |        \         |  | |
   Data.w 0, 6, 4 ;Dreieck 6  (links)    |          \       |  | |
   Data.w 2, 6, 0 ;Dreieck 7             |   D9       \     |   \|
   Data.w 5, 1, 0 ;Dreieck 8  (vorne)    |              \   | D4 * P7
   Data.w 0, 4, 5 ;Dreieck 9             |                \ |  /
   Data.w 2, 3, 7 ;Dreieck 10 (hinten)   *------------------*/
   Data.w 7, 6, 2 ;Dreieck 11            P4                 P5
  U_01:
   Data.f 0.0, 0.0 ; Vertex 0
   Data.f 0.0, 1.0 ; Vertex 1
   Data.f 1.0, 0.0 ; Vertex 2
   Data.f 1.0, 1.0 ; Vertex 3
   
   Data.f 0.0, 0.0 ; Vertex 4
   Data.f 0.0, 1.0 ; Vertex 5
   Data.f 1.0, 0.0 ; Vertex 6
   Data.f 1.0, 1.0 ; Vertex 7
   
  EndDataSection
 
 CreateMesh(0)
  SetMeshData(0, #PB_Mesh_Vertices,      ?V_01,   08)
  SetMeshData(0, #PB_Mesh_Triangles,     ?T_01,   12)
  SetMeshData(0, #PB_Mesh_UVCoordinates, ?U_01,   08)
 
 CreateEntity(0, MeshID(0), NewMaterial(0))
 EntityLocate(0, 5, 0, 5)
  
 ;- Hauptschleife
 Repeat
 
  WinEvent = WindowEvent()
 
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_All)
   Zm = 0 : Xm = 0 : Ym = 0
   If KeyboardPushed(#PB_Key_Up)       : Zm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Down)     : Zm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Right)    : Xm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Left)     : Xm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad8)     : Ym =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad2)     : Ym = -2.1 : EndIf
   MoveCamera(0, Xm, Ym, Zm)   
  EndIf
 
  RotateEntity(0, 0.1, 0.05, 0.1)
  
  FlipBuffers()
  RenderWorld()
  
  
Until WinEvent = #PB_Event_CloseWindow
CloseWindow(0)


Verfasst: 11.12.2005 16:05
von SoS
Du must glaube ich erst mal ein Gadget im fenster darstellen damit es nicht mehr schwarz wird.
Teste mal mit folgendem Code.

Code: Alles auswählen

OpenWindow(0, 0, 0, 800, 700, #PB_Window_SystemMenu , "3D - Würfel") 
CreateGadgetList(WindowID(0))
OpenWindowedScreen(WindowID(0), 130, 15, 400, 400, 1, 270,290) 
Frame3DGadget(0, 120, 5, 420, 420, "")
Must nur noch an die von Dir gewünschte Grösse anpassen ;)

Verfasst: 11.12.2005 16:24
von Batze
super_castle hat geschrieben: im 3d-fenster (zur zeit noch schwarz) ist ein oberer rand von ca 20 pixel breite, sieht man, wenn man den würfel nach oben verschiebt, wie bekommt man den weg?
Na indem man die Höhe der Camera auf 100% stellt.

PS: Schön das dir mein Beispiel hilft. <)