| |
|
|
Sven Bader | avec dem Accumulation Buffer laisser sich entier gentille Sachen realisieren, comment zum Beispiel une Bewegungsunschärfe.
L'idée est, dass on plusieurs Frames dans einem zusammenfasst. Gibt es aucun Bewegung, so merkt on keinen Unterschied ansonsten sieht on, comment qui bewegten Objekte Schlieren tirer.
dans meinem Beispiel augmenté sich le nombre qui zusammengefassten Bilder avec qui Geschwindigkeit et es wird zusätzlich encore une kleine Abweichung incorporé, um den effet trop verstärken.
sans Accum Buffer (ou bien Stillstand)
avec Accum Buffer
avec Accum Buffer + Schütteleffekt (dx!, dy!, dz!)
$H windows.ph
declare xrot!, yrot!, zrot!
declare xpos!, xspeed!, ypos!, yspeed!, zpos!, zspeed!
proc DrawGLScene
parameters dx!, dy!, dz!
declare id&
ogl("glClear",~GL_DEPTH_BUFFER_BIT | ~GL_COLOR_BUFFER_BIT)'ogl("clear") cleared trop viel!
oGL("Color", 0.7,0.7,0.7,1)
oGL("Origin", xpos!+dx!*0.1, ypos!+dy!*0.1, zpos!+dz!*0.1)
oGL("Rotate", xrot!, yrot!, zrot!)
oGL("Move", 0, -1, 0)
oGL("Texture", tex&, 1)
oGL("Cylinder", 1, 1, 2, 24)
oGL("Texture",tex2&, 8)
oGL("Origin", 0, -10, -24)
oGL("Quad", 29, 20)
xrot! = xrot! + xspeed!
yrot! = yrot! + yspeed!
zrot! = zrot! + zspeed!
endproc
proc Redraw
declare i%, max!, dx!, dy!, dz!
dx! = 1.0
dy! = 1.0
dz! = -1.0
ogl("Clear")
ogl("Push")
max! = si(abs(yspeed!) > abs(xspeed!), si(abs(yspeed!) > abs(zspeed!), abs(yspeed!), abs(zspeed!)), abs(xspeed!)) * 0.75
max! = round(max!, 0)
cas max! <= 1 : max! = 1
cas max! > 10 : max! = 10
ogl("glClear",~GL_ACCUM_BUFFER_BIT)
whileloop 0, max!-1
DrawGLScene(dx! * &loop, dy! * &loop, dz! * &loop)
ogl("glAccum",~GL_ACCUM, 1.0 / max!)
endwhile
ogl("glAccum",~GL_RETURN, 1.0)
ogl("Pop")
~SwapBuffers(%hDC)'Ersetzt show!!
endproc
' Hauptprogramm
' -------------
declare hWnd&, ende%, hpic&,tex&,tex2&
CLS 0
oGL("Init", %hWnd, 1, 1, 1, 0)
'Texture aus Icônes
Mcls 32,32
startpaint -1
DrawIcon "A", 0,0
endpaint
hPic&=create(«PCSI»,0,"& MEMBMP")
tex&=ogl("getTextureBmp",hPic&,1)
DeleteObject hPic&
'Texture aus Icônes
startpaint -1
DrawIcon "KNOPF1", 0,0
endpaint
hPic&=create(«PCSI»,0,"& MEMBMP")
tex2&=ogl("getTextureBmp",hPic&,1)
DeleteObject hPic&
xpos! = 0
ypos! = 0
zpos! = -5
xrot! = 35
yrot! = 55
zrot! = 0
xspeed! = 0
yspeed! = 0
zspeed! = 0
Ende% = 0
setTimer 10' max. 50 Frames /sek.
WhileNot ende%
WaitInput
Si IsKey(27)
Ende% = 1
ElseIf Iskey(39)
yspeed! = yspeed! + .02
ElseIf Iskey(37)
yspeed! = yspeed! - .02
ElseIf Iskey(40)
xspeed! = xspeed! + .02
ElseIf Iskey(38)
xspeed! = xspeed! - .02
ElseIf Iskey(33)
zpos! = zpos! - .1
ElseIf Iskey(65)
xpos! = xpos! - .1
ElseIf Iskey(68)
xpos! = xpos! + .1
elseIf Iskey(83)
ypos! = ypos! - .1
ElseIf Iskey(87)
ypos! = ypos! + .1
ElseIf Iskey(34)
zpos! = zpos! + .1
EndIf
redraw()
Endwhile
killTimer
end
|
|
|
| |
|
|