So, will ich doch auch mal was zu dem Wettbewerb beitragen
Ich hab heute mal ne kleine OpenGL-Demo geschrieben, irgendjemand muss es ja tun. Konkret geht es um viel Rotation, Hüpfen und ein wenig Takt.
http://postimage.org/image/xcy8bql0v/
4069 (nicht 4096!) Bytes:
Code
Declare csz!,cdist!,crot!,demostep&,ltm&,etm&,gtm&,sync1!,ssync1!,cbeats!,bsync!,breg![20],dskBmp&,cTex&,bSpeed!,pntx![],pnty![],pntz![],pntr![],pntcr![],pntcg![],pntcb![],pntanz&,t1!,t2!,t3!,t4&,pntux!,pntuy!,pntuz!,pntrx!,pntry!,pntrz!,pntseg&,pntvx![],pntvy![],pntvz![],s%,sync2!,ssync2!,tr!,cr!,cg!,cb!,beatact&,pntsc%,cubsc%
dskBmp& = @Create("hSizedPic",0,"&DSKBMP",768,768,0)
Randomize
WindowStyle 16+64
CLS
ShowMax
ShowCursor 0
Ogl("Init",%hwnd,0,0,0,1)
Ogl("PosMode",1)
csz!=2
cdist!=6
crot!=0
demostep&=0
cTex&=Ogl("GetTextureBMP",dskBmp&,1)
Proc OGDR
Ogl("Clear")
Ogl("Origin",0,0,-cdist!)
Ogl("Rotate",crot!,crot!,0)
Ogl("Color",cr!*tr!,cg!*tr!,cb!*tr!,1)
Ogl("Texture",cTex&,1)
Ogl("Cuboid",csz!,csz!,csz!)
Ogl("Rotate",0,0,0)
WhileLoop 0,pntanz&
Ogl("Texture",0,0)
Ogl("Color",pntcr![&loop]*tr!,pntcg![&loop]*tr!,pntcb![&loop]*tr!,1)
Ogl("Origin",pntux!,pntuy!,pntuz!)
Ogl("Rotate",pntrx!,pntry!,pntrz!)
Ogl("Move",pntx![&loop],pnty![&loop],pntz![&loop])
Ogl("Sphere",pntr![&loop],pntseg&,pntseg&)
EndWhile
Ogl("Show")
EndProc
UserMessages 16
ltm&=&gettickcount
Clear breg![]
pntanz& = -1
WhileNot (%umessage=16) Or @Iskey(27)
Gtm&=&gettickcount
etm&=Gtm&-ltm&
Ltm&=Gtm&
sync1!=@Range(sync1!-ssync1!*etm&,10^-7,1)
sync2!=@Range(sync2!-ssync2!*etm&,10^-7,1)
bsync!=@Range(bsync!-etm&/1000,10^-7,1)
cbeats!=(cbeats!+etm&*bSpeed!) Mod 1000
Select demostep&
CaseOf 0
pntanz& = -1
WhileLoop -2,2
t1! = &loop
WhileLoop -2,2
t2! = &loop
WhileLoop -2,2
t3! = &loop
Inc pntanz&
t4&=pntanz&
pntx![t4&]=t1!*.3
pnty![t4&]=t2!*.3
pntz![t4&]=t3!*.3
pntr![t4&]=.025
pntcr![t4&]=@Rnd()
pntcg![t4&]=@Rnd()
pntcb![t4&]=@Rnd()
EndWhile
EndWhile
EndWhile
Clear breg![]
ssync1!=.0001
sync1!=1
pntseg&=16
cr!=1
cg!=1
cb!=1
cubsc%=0
pntsc%=0
Inc demostep&
CaseOf 1
crot!=sync1!^2*360+60
csz!=2+bsync!
cdist!=sync1!^2*6+.5
pntux!=0
pntuy!=0
pntuz!=-cdist!
pntrx!=crot!
pntry!=crot!
pntrz!=0
tr!=1-sync1!
Case sync1!<(10^-6): Inc demostep&
CaseOf 2
Clear breg![]
bSpeed! = .25
breg![0]=.1
ssync1!=.0002
sync1!=1
pntsc%=1
cubsc%=1
Inc demostep&
CaseOf 3
csz!=2
cdist!=bsync!+.5
t1!=(etm&/100*(1-sync1!))
crot!=@Range(crot!-t1!,0,10^9)
pntux!=0
pntuy!=0
pntuz!=-cdist!
pntrx!=@Range(pntrx!-t1!,0,10^9)
pntry!=@Range(pntry!-t1!,0,10^9)
pntrz!=@Range(pntrz!-t1!,0,10^9)
Case (pntrx!=0)And(pntry!=0)And(pntrz!=0)And(crot!=0): Inc demostep&
CaseOf 4
WhileLoop 0,pntanz&
pntvx![&loop]=@Rnd() - .5
pntvz![&loop]=@Rnd() - .5
pntvy![&loop]=@Rnd() - .5
EndWhile
Clear breg![]
bSpeed! = .25
breg![0]=.15
breg![2]=.1
ssync1!=.0002
sync1!=1
ssync2!=.0001/4
sync2!=1
pntsc%=0
Inc demostep&
CaseOf 5
s%=@Not(s%)
WhileLoop 0,pntanz&
pntvy![&loop]=pntvy![&loop]-etm&/1000
pntx![&loop]=pntx![&loop]+pntvx![&loop]*etm&/1000
pnty![&loop]=pnty![&loop]+pntvy![&loop]*etm&/1000
pntz![&loop]=pntz![&loop]+pntvz![&loop]*etm&/1000
If s%
IfNot @Between(pntx![&loop],-1,1): pntvx![&loop]=-pntvx![&loop]: pntx![&loop]=@Range(pntx![&loop],-1,1): EndIf
IfNot @Between(pnty![&loop],-1,1): pntvy![&loop]=-pntvy![&loop]: pnty![&loop]=@Range(pnty![&loop],-1,1): EndIf
IfNot @Between(pntz![&loop],-1,1): pntvz![&loop]=-pntvz![&loop]: pntz![&loop]=@Range(pntz![&loop],-1,1): EndIf
EndIf
EndWhile
cdist!=bsync!+.5
csz!=2
crot!=crot!-(etm&/100*(2-sync1!))
pntrx!=crot!
pntry!=crot!
pntux!=0
pntuy!=0
pntuz!=-cdist!
Case sync2!<(10^-6): Inc demostep&
CaseOf 6
Clear breg![]
bSpeed! = .25
breg![0]=.1
ssync2!=.0001/4
sync2!=1
pntsc%=1
Inc demostep&
CaseOf 7
cdist!=bsync!+.5
csz!=2
crot!=crot!-(etm&/100*(2-sync1!))
pntrx!=crot!
pntry!=crot!
pntux!=0
pntuy!=0
pntuz!=-cdist!
tr!=@Range(sync2!*5-.2,0,1)
Case sync2!<(10^-6): demostep&=0
EndSelect
t4&=cbeats!\50
If t4&<>beatact&
If breg![t4&]<>0
bsync!=breg![t4&]
If cubsc%
cr!=@Rnd()/2+.5
cg!=@Rnd()/2+.5
cb!=@Rnd()/2+.5
EndIf
If pntsc%
WhileLoop 0,pntanz&
pntcr![&loop]=@Rnd()
pntcg![&loop]=@Rnd()
pntcb![&loop]=@Rnd()
EndWhile
EndIf
EndIf
beatact&=t4&
Endif
OGDR
EndWhile
Ogl("Done")
Alles anzeigen
Lesbar:
Code
Declare csz!,cdist!,crot!,demostep&,ltm&,etm&,gtm&,sync1!,ssync1!,cbeats!,bsync!,breg![20],dskBmp&,cTex&,bSpeed!,pntx![],pnty![],pntz![],pntr![],pntcr![],pntcg![],pntcb![],pntanz&,t1!,t2!,t3!,t4&,pntux!,pntuy!,pntuz!,pntrx!,pntry!,pntrz!,pntseg&,pntvx![],pntvy![],pntvz![],s%,sync2!,ssync2!,tr!,cr!,cg!,cb!,beatact&,pntsc%,cubsc%
dskBmp& = @Create("hSizedPic",0,"&DSKBMP",768,768,0)
Randomize
WindowStyle 16+64
CLS
ShowMax
ShowCursor 0
Ogl("Init",%hwnd,0,0,0,1)
Ogl("PosMode",1)
csz!=2
cdist!=6
crot!=0
demostep&=0
cTex&=Ogl("GetTextureBMP",dskBmp&,1)
Proc OGDR
Ogl("Clear")
Ogl("Origin",0,0,-cdist!)
Ogl("Rotate",crot!,crot!,0)
Ogl("Color",cr!*tr!,cg!*tr!,cb!*tr!,1)
Ogl("Texture",cTex&,1)
Ogl("Cuboid",csz!,csz!,csz!)
Ogl("Rotate",0,0,0)
WhileLoop 0,pntanz&
Ogl("Texture",0,0)
Ogl("Color",pntcr![&loop]*tr!,pntcg![&loop]*tr!,pntcb![&loop]*tr!,1)
Ogl("Origin",pntux!,pntuy!,pntuz!)
Ogl("Rotate",pntrx!,pntry!,pntrz!)
Ogl("Move",pntx![&loop],pnty![&loop],pntz![&loop])
Ogl("Sphere",pntr![&loop],pntseg&,pntseg&)
EndWhile
Ogl("Show")
EndProc
UserMessages 16
ltm&=&gettickcount
Clear breg![]
pntanz& = -1
WhileNot (%umessage=16) Or @Iskey(27)
Gtm&=&gettickcount
etm&=Gtm&-ltm&
Ltm&=Gtm&
sync1!=@Range(sync1!-ssync1!*etm&,10^-7,1)
sync2!=@Range(sync2!-ssync2!*etm&,10^-7,1)
bsync!=@Range(bsync!-etm&/1000,10^-7,1)
cbeats!=(cbeats!+etm&*bSpeed!) Mod 1000
Select demostep&
CaseOf 0
pntanz& = -1
WhileLoop -2,2
t1! = &loop
WhileLoop -2,2
t2! = &loop
WhileLoop -2,2
t3! = &loop
Inc pntanz&
t4&=pntanz&
pntx![t4&]=t1!*.3
pnty![t4&]=t2!*.3
pntz![t4&]=t3!*.3
pntr![t4&]=.025
pntcr![t4&]=@Rnd()
pntcg![t4&]=@Rnd()
pntcb![t4&]=@Rnd()
EndWhile
EndWhile
EndWhile
Clear breg![]
ssync1!=.0001
sync1!=1
pntseg&=16
cr!=1
cg!=1
cb!=1
cubsc%=0
pntsc%=0
Inc demostep&
CaseOf 1
crot!=sync1!^2*360+60
csz!=2+bsync!
cdist!=sync1!^2*6+.5
pntux!=0
pntuy!=0
pntuz!=-cdist!
pntrx!=crot!
pntry!=crot!
pntrz!=0
tr!=1-sync1!
Case sync1!<(10^-6): Inc demostep&
CaseOf 2
Clear breg![]
bSpeed! = .25
breg![0]=.1
ssync1!=.0002
sync1!=1
pntsc%=1
cubsc%=1
Inc demostep&
CaseOf 3
csz!=2
cdist!=bsync!+.5
t1!=(etm&/100*(1-sync1!))
crot!=@Range(crot!-t1!,0,10^9)
pntux!=0
pntuy!=0
pntuz!=-cdist!
pntrx!=@Range(pntrx!-t1!,0,10^9)
pntry!=@Range(pntry!-t1!,0,10^9)
pntrz!=@Range(pntrz!-t1!,0,10^9)
Case (pntrx!=0)And(pntry!=0)And(pntrz!=0)And(crot!=0): Inc demostep&
CaseOf 4
WhileLoop 0,pntanz&
pntvx![&loop]=@Rnd() - .5
pntvz![&loop]=@Rnd() - .5
pntvy![&loop]=@Rnd() - .5
EndWhile
Clear breg![]
bSpeed! = .25
breg![0]=.15
breg![2]=.1
ssync1!=.0002
sync1!=1
ssync2!=.0001/4
sync2!=1
pntsc%=0
Inc demostep&
CaseOf 5
s%=@Not(s%)
WhileLoop 0,pntanz&
pntvy![&loop]=pntvy![&loop]-etm&/1000
pntx![&loop]=pntx![&loop]+pntvx![&loop]*etm&/1000
pnty![&loop]=pnty![&loop]+pntvy![&loop]*etm&/1000
pntz![&loop]=pntz![&loop]+pntvz![&loop]*etm&/1000
If s%
IfNot @Between(pntx![&loop],-1,1): pntvx![&loop]=-pntvx![&loop]: pntx![&loop]=@Range(pntx![&loop],-1,1): EndIf
IfNot @Between(pnty![&loop],-1,1): pntvy![&loop]=-pntvy![&loop]: pnty![&loop]=@Range(pnty![&loop],-1,1): EndIf
IfNot @Between(pntz![&loop],-1,1): pntvz![&loop]=-pntvz![&loop]: pntz![&loop]=@Range(pntz![&loop],-1,1): EndIf
EndIf
EndWhile
cdist!=bsync!+.5
csz!=2
crot!=crot!-(etm&/100*(2-sync1!))
pntrx!=crot!
pntry!=crot!
pntux!=0
pntuy!=0
pntuz!=-cdist!
Case sync2!<(10^-6): Inc demostep&
CaseOf 6
Clear breg![]
bSpeed! = .25
breg![0]=.1
ssync2!=.0001/4
sync2!=1
pntsc%=1
Inc demostep&
CaseOf 7
cdist!=bsync!+.5
csz!=2
crot!=crot!-(etm&/100*(2-sync1!))
pntrx!=crot!
pntry!=crot!
pntux!=0
pntuy!=0
pntuz!=-cdist!
tr!=@Range(sync2!*5-.2,0,1)
Case sync2!<(10^-6): demostep&=0
EndSelect
t4&=cbeats!\50
If t4&<>beatact&
If breg![t4&]<>0
bsync!=breg![t4&]
If cubsc%
cr!=@Rnd()/2+.5
cg!=@Rnd()/2+.5
cb!=@Rnd()/2+.5
EndIf
If pntsc%
WhileLoop 0,pntanz&
pntcr![&loop]=@Rnd()
pntcg![&loop]=@Rnd()
pntcb![&loop]=@Rnd()
EndWhile
EndIf
EndIf
beatact&=t4&
Endif
OGDR
EndWhile
Ogl("Done")
Alles anzeigen
Und hier noch als EXE für gescheite Framerates: Demo von File-Upload herunterladen
Die Demo ist zu Ende, sobald die Kugeln in der Luft erstarrt sind. Danach beginnt sie von vorne. Beenden kann man mit ESC oder ALT-F4.
Ich habe besonders darauf geachtet, dass die Demo die Framerate nicht festlegt und trotzdem bei jeder Framerate gleich schnell läuft. VSync ist für weniger Flimmern sehr zu empfehlen.
Gruß
Jonathan