siehste wohl...unix hat geschrieben:Sry habs fertig und mal ohne Debuger kompiliert.
WOW ist das schnell
und so ein aha-erlebnis prägt sich ein. du wirst nie wieder mit debugger performance testen...
Code: Alles auswählen
Procedure RenderPixelLine(*d.dbuffer, x.l,y.l, height.l, r.l, g.l, b.l)
Protected bits.l, temp.l, position.l
;erst vorberechnen, was zu poken, dann eventuell farbwerte tauschen und durchlaufen lassen
Select *d\bufferpixelformat
Case #PB_PixelFormat_24Bits_RGB ; 3 Byte pro Pixel (RRGGBB)
bits = 3
Case #PB_PixelFormat_24Bits_BGR ; 3 Byte pro Pixel (BBGGRR)
bits = 3
temp = b
b = r
r = temp
Case #PB_PixelFormat_32Bits_RGB ; 4 Byte pro Pixel (RRGGBB)
bits = 4
Case #PB_PixelFormat_32Bits_BGR ; 4 Byte pro Pixel (BBGGRR)
bits = 4
temp = b
b = r
r = temp
EndSelect
position = *d\buffer + (y * *d\bufferpitch) + (x * bits)
For zy = 0 To height-1
PokeB(position+0, r)
PokeB(position+1, g)
PokeB(position+2, b)
position + *d\bufferpitch
Next
EndProcedure
Habe gerade diesen Thread gefunden. Vor kurzem war ich in einemunix hat geschrieben:ja ist ja erst ma eine art engine
mein ziel ist es eine NC Simulation durchzuführen nicht CNC
für unsere Kunzmann Fräse auf der Arbeit
Da es für diese Programmiersparche kein Simulationsprogramm gibt
Ausbilder wird sich freuen
Wenn das Programm fertig ist stelle ich ne Demo zur verfügung!
Code: Alles auswählen
If InitSprite() And InitSprite3D() = 0
MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
End
EndIf
Enumeration
#Sprite_0
#Sprite_1
#Text_X
#Display_X
#Text_Y
#Display_Y
EndEnumeration
Global FR.l,WZ.l
Global Radius.d,BreiteX.d,LaengeY.d,x.d,direction.d
Procedure Fraeser(Durchmesser.l,Col.l)
Radius=Durchmesser/2
FR=CreateSprite(#Sprite_0, Durchmesser, Durchmesser,#PB_Sprite_Texture)
If StartDrawing(SpriteOutput(0))
Circle(Radius,Radius,Radius,Col)
StopDrawing()
CreateSprite3D(#Sprite_0,#Sprite_0)
EndIf
ProcedureReturn FR
EndProcedure
Procedure Werkstueck(BreiteX,LaengeY,HoeheZ,Col.l)
CreateSprite(#Sprite_1,BreiteX,LaengeY)
StartDrawing(SpriteOutput(#Sprite_1))
Box(0,0,BreiteX,LaengeY,Col)
StopDrawing()
EndProcedure
If OpenWindow(0, 0, 0, 640, 480, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 530, 370, 45, 20, "Quit")
TextGadget(#Text_X,485,12,10,20,"X")
TextGadget(#Display_X,500,10,50,20,"0.000",#PB_Text_Border )
TextGadget(#Text_Y,485,32,10,20,"Y")
TextGadget(#Display_Y,500,30,50,20,"0.000",#PB_Text_Border )
EndIf
If OpenWindowedScreen(WindowID(0), 0, 0, 480, 400, 0, 0, 0)
Fraeser(30,RGB(0,254,0))
Werkstueck(200,200,20,RGB(0,0,254))
Else
MessageRequester("Error", "Can't open windowed screen!", 0)
End
EndIf
EndIf
direction = 2
Repeat
; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten
;
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Gadget
If EventGadget() = 0
End
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
Until Event = 0
FlipBuffers()
ClearScreen(RGB(0, 0, 0))
DisplaySprite(1,30,30)
Start3D()
DisplaySprite3D(0, x, x,255)
StartDrawing(SpriteOutput(1))
If direction=2
Circle(x-15,x-15,Radius,RGB(col1, Col2, Col3))
;ElseIf direction=-2
; Circle(x-15,x-15,10,RGB(0, 0, 255))
EndIf
StopDrawing()
Stop3D()
x + direction
SetGadgetText(#Display_X,StrF(x ,0))
SetGadgetText(#Display_Y,StrF(x ,0))
If x >200: direction = -2 : EndIf
If x < 0 :Col1=Random(255):Col2=Random(255):Col2=Random(255): direction = 2 : EndIf
;Delay(1)
ForEver