Torus mit zwei Kugeln (dreidimensional angeordnete punkte) von ???
rotation mit den cursortasten, maustasten heran- oder herauszoomen.

[code:1:4b83013b0a]
size=4000 ;anzahl der punkte auf der kugeloberflaeche
wd=800 ;vertikale und horizontale aufloesung
ht=600
u#=17 ;entfernung des zentrums der kugel vom ursprung(kamera)
r0#=10 ;radius=10 einheiten
rspeed=2 ;rotationsgeschwindigkeit in grad pro schritt
uu#=0 ;beide winkel sind am anfang 0
ii#=0
Const m3d=820 ;multiplikator fuer die umwandlung 3d->2d

Dim x#(size)
Dim y#(size)
Dim z#(size)


;kugel
For i=0 To Int(size/3)
r#=2;Rnd#(-r0,r0)
h#=Rnd#(-r0,r0) ;hoehe und winkel werden zufaellig gewaehlt
r#=Sin#(h#)+Sin#(h#*3)+Cos#(h#)+Cos#(h#*4)+10*Sin#(h#/2)
a#=Rnd#(0,360)
yy#=h#
rr#=Sqr(r^2-h#^2) ;berechnung der x und z-koordinate des punktes
xx#=Cos#(a)*rr#
zz#=Sin#(a)*rr#
x#(i)=xx#
y#(i)=yy#-5
z#(i)=zz#
Next

;torus
For i=Int(size/3) To Int(size/3*2)
r1#=5;Rnd#(-r0,r0)
r2#=2
a#=Rnd#(0,360) ;hoehe und winkel werden zufaellig gewaehlt
b#=Rnd#(0,360)
xx#=Cos#(a)*r1#+Cos#(a)*Cos#(b)*r2 ;berechnung der x und z-koordinate des punktes
zz#=Sin#(a)*r1#+Sin#(a)*Cos#(b)*r2
yy#=Sin#(b)*r2
x#(i)=xx#
y#(i)=yy#
z#(i)=zz#
Next

For i=Int(size/3*2) To size
r#=2;Rnd#(-r0,r0)
h#=Rnd#(-r0,r0) ;hoehe und winkel werden zufaellig gewaehlt
r#=Sin#(h#)+Sin#(h#*3)+Cos#(h#)+Cos#(h#*4)+10*Sin#(h#/2)
a#=Rnd#(0,360)
yy#=h#
rr#=Sqr(r^2-h#^2) ;berechnung der x und z-koordinate des punktes
xx#=Cos#(a)*rr#
zz#=Sin#(a)*rr#
x#(i)=xx#
y#(i)=yy#+5
z#(i)=zz#
Next

;xy3d wandelt einen dreidimensionalen punkt in einen zweidimensionalen
;pixel um
Function xy3d(xm#, xz#)
If xz#<>0 Then Return Int(m3d * xm# / xz#)
End Function

Graphics wd,ht,16,1
SetBuffer BackBuffer()


Repeat
;rotation: cursor oben/unten - ebene YZ
; cursor links/rechts - ebene XZ
If KeyDown(200) Then uu#=uu#+rspeed
If KeyDown(208) Then uu#=uu#-rspeed
If KeyDown(203) Then ii#=ii#+rspeed
If KeyDown(205) Then ii#=ii#-rspeed

;zoom in/out mit linker/rechter maustaste
If MouseDown(1) Then u#=u#-0.1
If MouseDown(2) Then u#=u#+0.1

;wenn eine der variablen 360 grad ueberschreitet, wird sie
;auf 0 zurueckgesetzt, damit sie nicht ueberlaeuft
If ii>360 Then ii=0
If uu>360 Then uu=0

For i=0 To size
;sin-cos-transformationen
rx# = (Cos#(ii#) * x#(i) + Sin#(ii#) * z#(i))
rz# = (Sin#(ii#) * x#(i) - Cos#(ii#) * z#(i))
ry# = (Cos#(uu#) * y#(i) + Sin#(uu#) * rz#)
rz# = (Sin#(uu#) * y#(i) - Cos#(uu#) * rz#)
p#=rz#+u#
If (p#*5)>255 Then p#=255/5
Color 255-(p#)*5,255-(p#)*5,255-(p#)*5 ;aenderung der intensitaet
;eines pixels abhaengig von
;seiner z-koordinate
nx=xy3d(rx#,rz#+u#)
ny=xy3d(ry#,rz#+u#)
px=nx+wd/2
py=ny+ht/2
cond=(px>=1) And (px<=wd-1) And (py>=1) And (py<=ht-1)
;If cond Then
Plot px,py
; End If
;ein punkt wird nur dann
;gezeichnet,wenn seine z-koordinate
;>0 ist
Next

;For zby=0 To ht
; For zbx=0 To wd
;
; zbuf#(zbx,zby)=1000
; Next
; Next

Flip
Cls
Until KeyHit(1) ;
[/code:1:4b83013b0a]
===
von ???
Hey, das sieht mal extrem phat aus!
===
von ???
cool...
===
von ???
Hi,
ist sehr schön !

Leider nicht optimiert !

Bei 20000 Pixel geht das ganze ganz schön in die Knie !

Toni
===
von ???
Hi,

Wer das noch nicht hat, sollte es sich downloaden !

Source-code ist dabei !

Die Bilder können durch eigene ersetzt werden. Voraussetzung: sie sollen nicht größer als 320*40 Pixel sein. Und den gleichen Namen haben.

http://members.chello.at/hot-bit/diverses/intro45.zip

Toni
===
von ???
Hi,

hab ich mir zuerst auch überlegt. Habe es aber soo gemacht- und die Anleitung dazu, wie man eigene Bilder verwenden kann.
Sonst hätte ich Links zu den Bildern geben müssen.
Ich glaube, so ist es am besten.

Toni
===
von ???
sidn doch gut aus!
===
von ???
ok, hab das ganze mal ein bissle optimiert...
frage: wieso hast du das mit plot gemacht??? das is so grottenlahm :kotz:, aber nun gut. jetzt läufts bei mir mit 10fps in der einstellung :D

[code:1:1471ce7ca0]
size=100000 ;anzahl der punkte auf der kugeloberflaeche
Const wd=1280 ;vertikale und horizontale aufloesung
Const ht=1024
u#=17 ;entfernung des zentrums der kugel vom ursprung(kamera)
r0#=10 ;radius=10 einheiten
Const rspeed=3 ;rotationsgeschwindigkeit in grad pro schritt
uu#=0 ;beide winkel sind am anfang 0
ii#=0
Const m3d=820 ;multiplikator fuer die umwandlung 3d->2d

Dim x#(size)
Dim y#(size)
Dim z#(size)


;kugel
For i=0 To Int(size/3)
r#=2;Rnd#(-r0,r0)
h#=Rnd#(-r0,r0) ;hoehe und winkel werden zufaellig gewaehlt
r#=Sin#(h#)+Sin#(h#*3)+Cos#(h#)+Cos#(h#*4)+10*Sin#(h#/2)
a#=Rnd#(0,360)
yy#=h#
rr#=Sqr(r^2-h#^2) ;berechnung der x und z-koordinate des punktes
xx#=Cos#(a)*rr#
zz#=Sin#(a)*rr#
x#(i)=xx#
y#(i)=yy#-5
z#(i)=zz#
Next

;torus
For i=Int(size/3)To Int(size/3*2)
r1#=5;Rnd#(-r0,r0)
r2#=2
a#=Rnd#(0,360) ;hoehe und winkel werden zufaellig gewaehlt
b#=Rnd#(0,360)
xx#=Cos#(a)*r1#+Cos#(a)*Cos#(b)*r2 ;berechnung der x und z-koordinate des punktes
zz#=Sin#(a)*r1#+Sin#(a)*Cos#(b)*r2
yy#=Sin#(b)*r2
x#(i)=xx#
y#(i)=yy#
z#(i)=zz#
Next

For i=Int(size/3*2) To size
r#=2;Rnd#(-r0,r0)
h#=Rnd#(-r0,r0) ;hoehe und winkel werden zufaellig gewaehlt
r#=Sin#(h#)+Sin#(h#*3)+Cos#(h#)+Cos#(h#*4)+10*Sin#(h#/2)
a#=Rnd#(0,360)
yy#=h#
rr#=Sqr(r^2-h#^2);berechnung der x und z-koordinate des punktes
xx#=Cos#(a)*rr#
zz#=Sin#(a)*rr#
x#(i)=xx#
y#(i)=yy#+5
z#(i)=zz#
Next

;xy3d wandelt einen dreidimensionalen punkt in einen zweidimensionalen
;pixel um
Function xy3d(xm#, xz#)
If xz#<>0 Then Return Int(m3d * xm# / xz#)
End Function

Graphics wd,ht,0,1
SetBuffer BackBuffer()


Repeat
;Text 0,0,u
Text 0,0,"Pixelanzahl: "+size
Text 0,20,"Auflösung: "+wd+"x"+ht
Text 0,40,"FPS: " + Str(fpscounter)

;fps berechnung
fpscounter2 = fpscounter2 + 1

If fpstimer + 1000 < MilliSecs() Then
fpscounter = fpscounter2
fpscounter2 = 0
fpstimer = MilliSecs()
End If


LockBuffer BackBuffer()

;rotation: cursor oben/unten - ebene YZ
; cursor links/rechts - ebene XZ
;If KeyDown(200) Then uu#=uu#+rspeed
;If KeyDown(208) Then uu#=uu#-rspeed
;If KeyDown(203) Then ii#=ii#+rspeed
;If KeyDown(205) Then ii#=ii#-rspeed

;zoom in/out mit linker/rechter maustaste
;If MouseDown(1) Then u#=u#-0.1
;If MouseDown(2) Then u#=u#+0.1

;autodolly
uu#=uu#+rspeed
ii#=ii#+rspeed
If u#>35 Or u#<5 Then dir=1-dir
Select dir
Case 0 u#=(u#+0.5)
Case 1 u#=(u#-0.5)
End Select

;wenn eine der variablen 360 grad ueberschreitet, wird sie
;auf 0 zurueckgesetzt, damit sie nicht ueberlaeuft
ii=ii+1 Mod 360

For i=0 To size
;sin-cos-transformationen
rx# = (Cos#(ii#) * x#(i) + Sin#(ii#) * z#(i))
rz# = (Sin#(ii#) * x#(i) - Cos#(ii#) * z#(i))
ry# = (Cos#(uu#) * y#(i) + Sin#(uu#) * rz#)
rz# = (Sin#(uu#) * y#(i) - Cos#(uu#) * rz#)
p#=rz#+u
If (p#*5)>255 Then p#=255/5
;Color 255-(p#)*5,255-(p#)*5,255-(p#)*5 ;aenderung der intensitaet
;eines pixels abhaengig von
;seiner z-koordinate
nx=xy3d(rx#,rz#+u)
ny=xy3d(ry#,rz#+u)
px=nx+wd/2
py=ny+ht/2
cond=(px>=1) And (px<=wd-1) And (py>=1) And (py<=ht-1)

If cond Then

farbe=255-(p#*5)
rgb=farbe*$10000 + farbe*$100 + farbe

WritePixelFast px,py,rgb
;Plot px,py
End If
;ein punkt wird nur dann
;gezeichnet,wenn seine z-koordinate
;>0 ist
Next


;For zby=0 To ht
; For zbx=0 To wd
;
; zbuf#(zbx,zby)=1000
; Next
; Next
UnlockBuffer BackBuffer()

Flip
Cls
Until KeyHit(1) ;
[/code:1:1471ce7ca0]

edit:arghhh! wieso funzen die code tags net?! :evil:
editedit:geht doch! :P :?: 8)
===
speed von ???
das läuft noch einen kleinen tick schneller.
aber ich hab keine ahnung wie man es weiter optimieren könnte.

[code:1:cdfe9f6e45]
size=10000 ;anzahl der punkte auf der kugeloberflaeche
Const wd=800 ;vertikale und horizontale aufloesung
Const ht=600
u#=17 ;entfernung des zentrums der kugel vom ursprung(kamera)
r0#=10 ;radius=10 einheiten
Const rspeed=3 ;rotationsgeschwindigkeit in grad pro schritt
uu#=0 ;beide winkel sind am anfang 0
ii#=0
Const m3d=500 ;multiplikator fuer die umwandlung 3d->2d

Dim x#(size)
Dim y#(size)
Dim z#(size)


;kugel
For i=0 To Int(size/3)
r#=2;Rnd#(-r0,r0)
h#=Rnd#(-r0,r0) ;hoehe und winkel werden zufaellig gewaehlt
r#=Sin#(h#)+Sin#(h#*3)+Cos#(h#)+Cos#(h#*4)+10*Sin#(h#/2)
a#=Rnd#(0,360)
yy#=h#
rr#=Sqr(r^2-h#^2) ;berechnung der x und z-koordinate des punktes
xx#=Cos#(a)*rr#
zz#=Sin#(a)*rr#
x#(i)=xx#
y#(i)=yy#-5
z#(i)=zz#
Next

;torus
For i=Int(size/3)To Int(size/3*2)
r1#=5;Rnd#(-r0,r0)
r2#=2
a#=Rnd#(0,360) ;hoehe und winkel werden zufaellig gewaehlt
b#=Rnd#(0,360)
xx#=Cos#(a)*r1#+Cos#(a)*Cos#(b)*r2 ;berechnung der x und z-koordinate des punktes
zz#=Sin#(a)*r1#+Sin#(a)*Cos#(b)*r2
yy#=Sin#(b)*r2
x#(i)=xx#
y#(i)=yy#
z#(i)=zz#
Next

For i=Int(size/3*2) To size
r#=2;Rnd#(-r0,r0)
h#=Rnd#(-r0,r0) ;hoehe und winkel werden zufaellig gewaehlt
r#=Sin#(h#)+Sin#(h#*3)+Cos#(h#)+Cos#(h#*4)+10*Sin#(h#/2)
a#=Rnd#(0,360)
yy#=h#
rr#=Sqr(r^2-h#^2);berechnung der x und z-koordinate des punktes
xx#=Cos#(a)*rr#
zz#=Sin#(a)*rr#
x#(i)=xx#
y#(i)=yy#+5
z#(i)=zz#
Next

;xy3d wandelt einen dreidimensionalen punkt in einen zweidimensionalen
;pixel um
Function xy3d(xm#, xz#)
If xz#<>0 Then Return Int(m3d * xm# / xz#)
End Function

Graphics wd,ht,16,1
SetBuffer BackBuffer()

d=1 Mod 360
Repeat
;Text 0,0,u
Text 0,0,"Pixelanzahl: "+size
Text 0,20,"Auflösung: "+wd+"x"+ht
Text 0,40,"FPS: " + Str(fpscounter)

;fps berechnung
fpscounter2 = fpscounter2 + 1

If fpstimer + 1000 < MilliSecs() Then
fpscounter = fpscounter2
fpscounter2 = 0
fpstimer = MilliSecs()
End If


LockBuffer BackBuffer()

;rotation: cursor oben/unten - ebene YZ
; cursor links/rechts - ebene XZ
;If KeyDown(200) Then uu#=uu#+rspeed
;If KeyDown(208) Then uu#=uu#-rspeed
;If KeyDown(203) Then ii#=ii#+rspeed
;If KeyDown(205) Then ii#=ii#-rspeed

;zoom in/out mit linker/rechter maustaste
;If MouseDown(1) Then u#=u#-0.1
;If MouseDown(2) Then u#=u#+0.1

;autodolly
uu#=uu#+rspeed
ii#=ii#+rspeed
If u#>35 Or u#<5 Then dir=1-dir
Select dir
Case 0 u#=(u#+0.5)
Case 1 u#=(u#-0.5)
End Select

;wenn eine der variablen 360 grad ueberschreitet, wird sie
;auf 0 zurueckgesetzt, damit sie nicht ueberlaeuft

ii=ii+d
cosii#=Cos#(ii)
sinii#=Sin#(ii)
cosuu#=Cos#(uu#)
sinuu#=Sin#(uu#)

For i=0 To size
;sin-cos-transformationen
rx# = (cosii# * x#(i) + sinii# * z#(i))
rz# = (sinii# * x#(i) - cosii# * z#(i))
ry# = (cosuu# * y#(i) + sinuu# * rz#)
rz# = (sinuu# * y#(i) - cosuu# * rz#)
p#=rz#+u
If (p#*5)>255 Then p#=51
;Color 255-(p#)*5,255-(p#)*5,255-(p#)*5 ;aenderung der intensitaet
;eines pixels abhaengig von
;seiner z-koordinate
nx=xy3d(rx#,rz#+u)
ny=xy3d(ry#,rz#+u)
px=nx+wd/2
py=ny+ht/2
cond=(px>=1) And (px<=wd-1) And (py>=1) And (py<=ht-1)

If cond Then

farbe=255-(p#*5)
rgb=farbe*$10000 + farbe*$100 + farbe

WritePixelFast px,py,rgb
;Plot px,py
End If

Next

UnlockBuffer BackBuffer()

Flip
Cls
Until KeyHit(1)
[/code:1:cdfe9f6e45]

ich habe plot benutzt, weil das am einfachsten zu handhaben ist und weil
es mir hauptsächlich um die darstellung und weniger um die geschwindigkeit ging...



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: