GUI-Anwendung mit 3D-Canvas oder -Fenster
GUI-Anwendung mit 3D-Canvas oder -Fenster
Hallo Forumsmitglieder,
ist es mit PB möglich, eine Anwendung mit den GUI-Befehlen zu coden, die ein 3D-Fenster enthält? Also ein Gadget, das zur Anzeige von 3D-Grafik verwendet werden kann? Um beispielsweise ein kleines Utility zur Mesh-Manipulation zu programmieren, wo einem das veränderte Mesh in Echtzeit angezeigt wird. = kann man 3D-Befehle und GUI-Befehle in ein und derselben Anwendung verbraten?
Wenn ja, welches Gadget kann man dafür nehmen?
Greetz, slick
ist es mit PB möglich, eine Anwendung mit den GUI-Befehlen zu coden, die ein 3D-Fenster enthält? Also ein Gadget, das zur Anzeige von 3D-Grafik verwendet werden kann? Um beispielsweise ein kleines Utility zur Mesh-Manipulation zu programmieren, wo einem das veränderte Mesh in Echtzeit angezeigt wird. = kann man 3D-Befehle und GUI-Befehle in ein und derselben Anwendung verbraten?
Wenn ja, welches Gadget kann man dafür nehmen?
Greetz, slick
Code: Alles auswählen
InitSprite()
hwnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,400,400,"Test")
CreateGadgetList(hwnd)
imgg = ImageGadget(0,20,20,200,200,0,#PB_Image_Border)
OpenWindowedScreen(imgg,0,0,200,200,0,0,0)
Repeat
e = WaitWindowEvent(1)
If e = #PB_Event_CloseWindow
End
EndIf
ClearScreen(0)
StartDrawing(ScreenOutput())
Box(10,10,20,20,Random($FFFFFF))
StopDrawing()
FlipBuffers()
ForEver
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Sowas in der Richtung?
Das ist das erstmal das Grundgerüst der Anwendung. Was die direkte Mesh-Manipulation angeht muss ich erstmal 'nen bischen suchen bzw. in Erfahrung bringen ob dies überhaupt möglich ist.
Code: Alles auswählen
InitEngine3D() : InitSprite()
OpenWindow(0,0,0,150,100,"Controls",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ButtonGadget(0,5,5,140,25,"START")
ButtonGadget(1,5,40,140,25,"STOP")
CheckBoxGadget(2,5,70,120,25,"WIREFRAME")
ResizeWindow(0,WindowX(0) - 300,#PB_Ignore,#PB_Ignore,#PB_Ignore)
OpenWindow(1,WindowX(0) + WindowWidth(0) + 10,WindowY(0),420,320,"Preview",#PB_Window_SystemMenu,WindowID(0))
OpenWindowedScreen(WindowID(1),0,0,420,320,0,0,0)
CreateCamera(0,0,0,100,100)
CameraBackColor(0,#White)
CameraLocate(0,0,40,110)
Add3DArchive(#PB_Compiler_Home + "Examples\Sources\Data\",#PB_3DArchive_FileSystem)
LoadMesh(0,"robot.mesh")
LoadTexture(0,"r2skin.jpg")
CreateMaterial(0,TextureID(0))
CreateEntity(0,MeshID(0),0,0,0,0)
EntityMaterial(0,MaterialID(0))
AnimateEntity(0,"Walk")
Repeat
Repeat
EventID = WindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 0 : AnimateEntity(0,"Walk")
Case 1 : AnimateEntity(0,"Idle")
Case 2 : CameraRenderMode(0,#PB_Camera_Textured + GetGadgetState(2))
EndSelect
EndIf
If EventID = #PB_Event_CloseWindow : End : EndIf
Until EventID = 0
FlipBuffers()
RenderWorld()
Delay(1)
ForEver
Windows 10 Pro, 64-Bit / Outtakes | Derek
Das zielt schon eher in die Richtung, an die ich dachte
. Ich hatte bloß gehofft, dass man dafür keine 2 separaten Fenster aufmachen müsste
aber grundsätzlich ist das schonmal ein gehbarer Weg so. Danke erst einmal für diesen brauchbaren Ansatz.
Da mit der Mesh-Manipulation ist dann nochmal so´n Ding für sich. Muss ich auch nochmall drüber nachdenken. Immerhin, wo Animate geht, geht ja schonmal auch Resize, Rotate etc.
Greetz, slick


Da mit der Mesh-Manipulation ist dann nochmal so´n Ding für sich. Muss ich auch nochmall drüber nachdenken. Immerhin, wo Animate geht, geht ja schonmal auch Resize, Rotate etc.
Greetz, slick
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Das musst du auch nicht. Ich fand es nur logischer das voneinander zu trennen.Ich hatte bloß gehofft, dass man dafür keine 2 separaten Fenster aufmachen müsste
Das bezieht sicht nicht auf die Meshdaten selbst. Du änderst nur das Erscheinungsbild für die Kamera. Um die eigentlichen Daten zu manipulieren musst du SetMeshData() benutzen. Allerdings ist das recht kompliziert und absolut unzureichend dokumentiert.Muss ich auch nochmall drüber nachdenken. Immerhin, wo Animate geht, geht ja schonmal auch Resize, Rotate etc.
Ein weiteres Problem ist direkte Selektion von Faces oder Vertices. Dies ist in Blitz3D recht einfach zu bewerkstelligen, mit ORGE bzw. PB ist das nicht möglich. Falls du sowas wie einen Mesh Editor basteln willst würde ich bspw. auf OpenGL umsteigen.
Windows 10 Pro, 64-Bit / Outtakes | Derek
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Der Begriff "Gadget" ist nur eine schwammige Beschreibung. Alles kann ein Gadget sein. Der Screen selbst ist eine eigene Einheit. Du kannst ihn frei positionieren wie skalieren (wie bspw. ein ButtonGadget).Weil mir halt nicht einleuchtet, in was für einem Gadget du die Renderscreen unterbringen würdest.
Code: Alles auswählen
InitSprite()
OpenWindow(0,0,0,360,215,"Controls",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ButtonGadget(0,5,5,140,25,"START")
ButtonGadget(1,5,40,140,25,"STOP")
CheckBoxGadget(2,5,70,120,25,"WIREFRAME")
OpenWindowedScreen(WindowID(0),150,5,200,200,0,0,0)
Repeat
Repeat
EventID = WindowEvent()
If EventID = #PB_Event_CloseWindow : End : EndIf
Until EventID = 0
ClearScreen(0)
StartDrawing(ScreenOutput())
Angle.f + 0.015
For i=0 To 10
CX = 100 + Cos(Angle + (i * 8)) * 70
CY = 100 + Sin(Angle + (i * 8)) * 70
Circle(CX,CY,15,RGB(255,150,0))
Circle(CX,CY,8,RGB(255,200,0))
Next
StopDrawing()
FlipBuffers()
Delay(1)
ForEver
Zuletzt geändert von Fluid Byte am 05.12.2007 22:05, insgesamt 1-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Schau mal Irrlicht an da ist ein Beispiel für GUI und 3D dabei ( funktioniert mit quasi jedem gadget ( idealerweise nimmst n imagegadget ).
Auch set / get vertice / indice kommandos sind dabei - 20 mesh formate. Und mit 1.06 kommt nun noch das mesh speichern hinzu. Wollte selbst schon nen kleinen edit schreiben - aber imo mit krankheit und allem uss ich mich aufswesentliche fokussiern) =/
Irrlicht
http://www.purebasic.fr/german/viewtopic.php?t=10332
Thalius
Auch set / get vertice / indice kommandos sind dabei - 20 mesh formate. Und mit 1.06 kommt nun noch das mesh speichern hinzu. Wollte selbst schon nen kleinen edit schreiben - aber imo mit krankheit und allem uss ich mich aufswesentliche fokussiern) =/
Irrlicht
http://www.purebasic.fr/german/viewtopic.php?t=10332
Thalius
"...smoking hash-tables until until you run out of memory." :P