 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 13.07.2007, 23:27 Titel: Animationen Programmieren - leichter als gedacht ;) |
|
|
Das muster erzeut ein Muster, mit Licht und 3d und alles nur durch berechnung der Farbe
Code: | dim as integer w,h,x,y,farbe,u
screen 14,32
screeninfo w,h
print w,h
DO
u+=1
FOR x=0 to w
for y=0 to h
farbe=x*u^2/(y*16)
pset (x,y),farbe
next
next
sleep 1
LOOP until inkey=chr(27) |
wenn es doch nur einen weg gäbe ihn auch noch unter screen 21 flüssig laufen zu lassen 
Zuletzt bearbeitet von AndT am 13.07.2007, 23:40, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 13.07.2007, 23:31 Titel: |
|
|
lol, das hatte ich auch mal gebaut bei dem Versuch, nen Plasmaeffekt zu bauen... ist aber leider nix geworden
Hiermit haben wir sogar ne 3D-Kante
Code: | dim as integer w,h,x,y,farbe,u
screen 14,32
screeninfo w,h
print w,h
DO
u+=1
FOR x=0 to w
for y=0 to h
farbe=x*u^2/(y*16) + y*u^2/(x*16) / 2
pset (x,y),farbe
next
next
sleep 1
LOOP |
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 13.07.2007, 23:37 Titel: |
|
|
Bei DO...LOOP wäre eine Abbruchbedingung nicht verkehrt.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 13.07.2007, 23:47 Titel: |
|
|
Und noch ein cooler Effekt
Code: | ddim as integer w,h,x,y,farbe
dim as double u
screen 14,32
screeninfo w,h
print w,h
DO
u+=1
screenlock
FOR x=0 to w
for y=0 to h
farbe=u^2+(x*y)
pset (x,y),farbe
next
next
sleep 1
screenunlock
LOOP until inkey=chr(27) |
///
Edit:
Funktionsweise:
es werden einfach Pixel gezeichnet, welche von links nach rechts laufen.
screeninfo sorgt dafür, dass das gleiche Resultat auch > screen 14 entsteht.
Was dafür sorgt, dass Bewegung ins Spiel kommt ist "u". Wenn u jetzt zb 64 wäre, ändern dich die Farben auch schneller.
Die Formel ist ein "Farbe" geschrieben und kann nach beliben verändert werden.
Diese "Engine" ist schnell genug um damit 3D zeichnen zu können 
Zuletzt bearbeitet von AndT am 14.07.2007, 00:01, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 13.07.2007, 23:50 Titel: |
|
|
jo, den hatte ich auch schon bei dem Versuch einen Plasmaeffekt zu bauen
Wie gesagt, daraus ist leider nie was geworden... obwohl, ich hab ja eine CPP-Vorlage
Hm
Aber momentan steht eine andere CPP->FB-Übersetzung an  |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 14.07.2007, 00:01 Titel: |
|
|
Haste villeicht nen Screenshot davon? |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 14.07.2007, 00:10 Titel: |
|
|
Von dem Plasmaeffekt?
Nur wie er egtl. aussehen sollte:
(grobaufgelöst)
wobei die andern, die man hier findet, auch nicht schlecht aussehen |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 14.07.2007, 00:20 Titel: |
|
|
Sowas kann nur mit RGB gehen
so ist mit rgb auch 3d möglich:
Code: | dim as integer w,h,x,y,farbe
dim as double u
screen 14,32
screeninfo w,h
print w,h
u=64
DO
u+=4
screenlock
FOR x=0 to w
for y=0 to h
farbe=rgb(x*u/255,y*u/255,x*u/255)
pset (x+1,y+1),farbe
next
next
sleep 1
screenunlock
LOOP until inkey=chr(27) |
|
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 14.07.2007, 00:37 Titel: |
|
|
kurze Frage: Was ist daran 3D?
Das ist nur 2D-Zoom was ich da seh  |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 14.07.2007, 00:47 Titel: |
|
|
egal... wenn ich nen weg gefunden hab den efeckt hinzukriegen, poste ich das genau hier
Dieser Code müsste so stark anpassbar sein, dass er den Zweck erfüllt
Code: | dim as integer w,h,x,y,farbe
dim as integer rt,gr,bl
dim as integer mode_rt,mode_gr,mode_bl
dim as double u,wfr,wfg,wfb
dim as integer rtad,grad,blad
screen 14,32
screeninfo w,h
print w,h
u=64
u+=16
screenlock
rtad=1
grad=rtad
blad=rtad
DO
FOR x=0 to w
for y=0 to h
wfr+=.1
wfb+=.1
wfg+=.1
' Funktion für Rot
if wfr > 1000 then
if mode_rt=1 then
rt+=rtad : wfr = 0:mode_rt=1
else
rt-=rtad : wfr = 0
end if
end if
' Funktion für Blau
if wfb > 1000 then
if mode_bl=1 then
bl+=grad : wfb = 0:mode_bl=1
else
bl-=blad : wfb = 0
end if
end if
' Funktion für Grün
IF wfg > 1000 then
if mode_gr=1 then
gr+=grad : wfg = 0:mode_gr=1
else
gr-=grad : wfg = 0
end if
end if
if rt< 2 then mode_rt=1
if bl< 2 then mode_bl=1
if gr< 2 then mode_gr=1
if rt = 255 then mode_rt=0
if bl= 255 then mode_bl=0
if gr= 255 then mode_gr=0
farbe=rgb(rt,gr,bl)
pset (x+0,y+0),farbe
next
next
sleep 1
screenunlock
LOOP until inkey=chr(27)
sleep
|
|
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 14.07.2007, 01:48 Titel: |
|
|
oO?
Wieso machst du das mit PSet und nicht mit Line ()-(),,BF? |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 14.07.2007, 09:12 Titel: |
|
|
Ich hab was gefunden...
http://www.freebasic.net/forum/viewtopic.php?t=8758&highlight=plasma
Hochauflösends Plasma geht mit
Code: | GenPlasma 1280,1024,ri(256),ri(256),ri(256),ri(256),300,8,0.001 |
/// Edit
Ich hab daraus übrigens einen ScreenSaver gemacht
Code: | Dim Shared As Integer Grad(0 To 255)
'+=============================================================+
Sub Rainbow()
Dim As Integer i, b, badd, g, gadd, r, radd, rx, gx, bx
rx = 2
gx = -2
bx = -2
b=Int(Rnd * 256):badd= bx
g=Int(Rnd * 256):gadd= gx
r=Int(Rnd * 256):radd= rx
For i = 0 To 255
b += badd
g += gadd
r += radd
If b < 0 Then badd = -bx: b = 0
If b > 255 Then badd = bx: b = 255
If g < 0 Then gadd = -gx: g = 0
If g > 255 Then gadd = gx: g = 255
If r > 255 Then radd = -rx: r = 255
If r < 0 Then radd = rx: r = 0
Grad(i) = RGB(r,g,b)
Next i
End Sub
'+==============+MAKE THIS WHATEVER YOU WANT : )+==============+
Rainbow
Sub GenPlasma(Byval w As Integer, Byval h As Integer, _
Byval crnr1 As Integer, Byval crnr2 As Integer, _
Byval crnr3 As Integer, Byval crnr4 As Integer, _
Byval rough As Integer, Byval iter As Integer, _
Byval prs As Double)
Dim As Double prex, prey, d1, d2, d3, d4, hr, fv, Image(0 To w,0 To h)
hr = rough * 2
prex = w / 2: prey = h / 2
Image(0,0)=crnr1
Image(w,0)=crnr2: d1 = (crnr1+crnr2) / 2: Image(prex,0)=d1
Image(w,h)=crnr3: d2 = (crnr2+crnr3) / 2: Image(w,prey)=d2
Image(0,h)=crnr4: d3 = (crnr3+crnr4) / 2: Image(prex,h)=d3
d4 = (crnr4+crnr1) / 2: Image(0,prey)=d4
fv = ((d1+d2+d3+d4) / 4) + (Int(Rnd * hr) - rough)
If fv>255 Then
fv=255
Elseif fv<0 Then
fv=0
Endif
Image(Cint(prex),Cint(prey))=fv
Dim As Double divisor, mdivx, mdivy, i, xs, ys, c1,c2,c3,c4, cx,cy, dx,dy
mdivx = w / 2: mdivy = h / 2
w -= 1: h -= 1
For i = 1 To iter
For ys = 0 To h Step mdivy
For xs = 0 To w Step mdivx
prex = mdivx / 2: prey = mdivy / 2
cx = xs + mdivx : cy = ys + mdivy
c1 = Image(Cint(xs),Cint(ys)): c2 = Image(Cint(cx),Cint(ys))
c3 = Image(Cint(cx),Cint(cy)): c4 = Image(Cint(xs),Cint(cy))
d1 = (c1+c2) / 2: d2 = (c2+c3) / 2
d3 = (c3+c4) / 2: d4 = (c4+c1) / 2
dx = xs + prex: dy = ys + prey
Image(Cint(dx),Cint(ys))=d1
Image(Cint(cx),Cint(dy))=d2
Image(Cint(dx),Cint(cy))=d3
Image(Cint(xs),Cint(dy))=d4
fv = ((d1+d2+d3+d4) / 4) + (Int(Rnd * hr) - rough)
If fv>255 Then
fv=255
Elseif fv<0 Then
fv=0
Endif
Image(Cint(dx),Cint(dy))=fv
Next xs
Next ys
mdivx = mdivx / 2
mdivy = mdivy / 2
hr = rough
rough = rough * prs
screenlock
For ys = 0 To h Step mdivy
For xs = 0 To w Step mdivx
Line (xs,ys)-(xs+mdivx,ys+mdivy), Grad(Image(xs,ys)), BF
Next xs
Next ys
screenunlock
Next i
End Sub
'test code
'#Include "fbgfx.bi"
'Using FB
#define ri(x) (Int(Rnd*x))
Screenres 1280,1024,32
Randomize Timer
dim as integer p1,p2,p3,p4,p5,p6
P6=9.2
Do
Rainbow
P5=INT(RND*255)
p1+=1
if p1 > 10 then p2+=1 :p1=0
if p2 > 20 then p3+=2 :p2=0
if p3 > 30 then p4+=3 :p3=0
if p4 > 40 then p4 =0: p1=0
GenPlasma 1280,1024,p1,p2,p3,p4,p5,p6,.001
Loop until inkey=chr(27)
|
Viel Spass damit  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 29.07.2007, 01:26 Titel: |
|
|
sieht recht hübsch aus - so langsam können wir als community unsere erste demo releasen ob die bei pouet dann angenommen wird... achne, die präsentiere ich nächstes jahr auf der breakpoint!  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|