Grafik-Algos

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Smily

Betreff: Grafik-Algos

BeitragMi, Jan 03, 2007 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hiho,
Mit diesem Threat möchte ich einmal nicht nur selber einen Code vorstellen, sondern nebenbei auch gleich mal eure Phantasie anregen

Und zwar geht es um Codes und Algorhytmen, welche interessante Farbliche Effekte produzieren.
Also hier ist erstmal ein Beispiel von mir, damit ihr seht, was ich meine:

BlitzBasic: [AUSKLAPPEN]
GX = 1600
GY = 1200

XM = GX/2
YM = GY/2
Graphics GX,GY,32,2
SetBuffer FrontBuffer()
LockBuffer FrontBuffer()
For X = 0 To GX
For Y = 0 To GY
C = Abs(XM-X)^2+Abs(YM-Y)^2
I=(C / 255)
C = C Mod 255
If I Mod 2 = 1 Then C=255-C
F = (I+2)/2 Mod 6 + 1
If F And 4 CR = C
If F And 2 CG = C
If F And 1 CB = C
Cges = CR*256^2+CG*256+CB
WritePixelFast X,Y, Cges
Next
If Not KeyDown(1)
UnlockBuffer FrontBuffer()
Flip
LockBuffer FrontBuffer()
End If
Next
FlushKeys
SaveBuffer(FrontBuffer(), "gfx.bmp")
WaitKey()


Wie man im Code lesen kann, wird der Farbwert eines Pixels anhand seines Abstands vom Mittelpunkt berrechnet.

Ergebnis:
http://blitzmaker.chat-blitz.de/michi/gfx.jpg

Ein ganz anderer Ansatz für einen Grafikalgo wäre z.B. wenn man eine "Ameise" auf einer Bestimmten Startposition setzt. Bei der Position der Ameise wird ein Bildpunkt gesetzt und sie Bewegt sich dann eine Richtung, welche mithilfe eines Algos berechnet wird.

So und jetzt seit ihr gefragt ^^
Mich interessieren einfach mal, was man Grafiktechnich allein durch algos noch so realisieren kann.
Falls ihr ähnliche Codeschnipsel habt zeigt sie doch mal her Wink

Gruß, Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
  • Zuletzt bearbeitet von Smily am Mi, Jan 03, 2007 21:23, insgesamt einmal bearbeitet
 

Todeskop

BeitragMi, Jan 03, 2007 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
ich krieg da MAV ind er zeile :
Code: [AUSKLAPPEN]
WritePixelFast X,Y, Cges

Smily

BeitragMi, Jan 03, 2007 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
versuchs mal so:
BlitzBasic: [AUSKLAPPEN]
GX = 1600
GY = 1200

XM = GX/2
YM = GY/2
Graphics GX,GY,32,2
SetBuffer FrontBuffer()
For X = 0 To GX
For Y = 0 To GY
C = Abs(XM-X)^2+Abs(YM-Y)^2
I=(C / 255)
C = C Mod 255
If I Mod 2 = 1 Then C=255-C
F = (I+2)/2 Mod 6 + 1
If F And 4 CR = C
If F And 2 CG = C
If F And 1 CB = C
Color CR,CG,CB
Plot X,Y
Next
If KeyHit(57) End
If Not KeyDown(1)
Flip
End If
Next
FlushKeys
SaveBuffer(FrontBuffer(), "gfx.bmp")
WaitKey()
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

ToeB

BeitragMi, Jan 03, 2007 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mia muss man GX und GY änder auf 800*600...
Kommt aba das gleiche bei raus, bis auf das das es größer dargestellt wrid...
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Black Spider

BeitragMi, Jan 03, 2007 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiss nicht ob 3d auch erwünscht ist, doch man kann mit Cel Shading schöne effekte realisieren, wenn man n bisserl mit rumspielt:

Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

cam = CreateCamera()
PositionEntity cam,0,0,-15

shad = CreateTexture(256,4,16)
SetBuffer TextureBuffer(shad)
For x=0 To TextureWidth(shad)
For y=0 To TextureHeight(shad)
red# = (red + 10*Sin(x)) Mod 255
green# = (green + 10*Sin(y)) Mod 255
blue# = (blue + 5*Cos(x+y)) Mod 255
Color red, green, blue
Plot x, y
Next
Next

gran = CreateCube()
MoveEntity gran,-10,0,5
ScaleEntity gran,2,2,2
UpdateNormals gran
EntityTexture gran,shad
EntityFX gran,1
o2 = CreateSphere()
MoveEntity o2,-16,3,5
ScaleEntity o2,3,3,3
UpdateNormals o2
EntityTexture o2,shad
EntityFX o2,1
o3 = CreateCone()
MoveEntity o3,-7,-5,5
ScaleEntity o3,2,2,2
UpdateNormals o3
EntityTexture o3,shad
EntityFX o3,1
Global Licht = CreatePivot()
PositionEntity licht,3,3,-3


While Not(KeyHit(1))
TurnEntity gran,.5,.5,.5
TurnEntity o2,.1,1,.3
TurnEntity o3,.1,.1,.5
PointEntity cam,gran
Crazy_Render(o3,Licht)
Crazy_Render(o2,Licht)
Crazy_Render(gran,Licht)
RenderWorld
Flip
Wend
End

Function Crazy_Render(obj,licht)
Local surfaces, surf, s
Local vert, v
Local LVX#, LVY#, LVZ#
Local NVX#, NVY#, NVZ#
Local Skalar#
TFormVector 1,1,0,licht,obj
LVX# = TFormedX()
LVY# = TFormedY()
LVZ# = TFormedZ()
For s = 1 To CountSurfaces(obj)
surf = GetSurface(obj,s)
vert = CountVertices(surf)
For v = 0 To vert-1
NVX# = VertexNX#(surf,v)
NVY# = VertexNY#(surf,v)
NVZ# = VertexNZ#(surf,v)
TFormVector NVX,NVY,NVZ,obj,0
NVX# = TFormedX()
NVY# = TFormedY()
NVZ# = TFormedZ()
Skalar# = SkalarProdukt#(NVX,NVY,NVZ,LVX,LVY,LVZ)
SK2# = (Skalar# / Sqr(NVX#*NVX#+NVY#*NVY#+NVZ#*NVZ#) / Sqr(LVX#*LVX#+LVY#*LVY#+LVZ#*LVZ#))
If Sk2# < 0 Then Sk2# = 0
VertexTexCoords surf,v,SK2*.5,0
Next
Next
End Function

Function SkalarProdukt#(X1#, Y1#, Z1#, X2#, Y2#, Z2#)
Return ((X1#*X2#)+(Y1#*Y2#)+(Z1#*Z2#))
End Function
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif
 

Todeskop

BeitragDo, Jan 04, 2007 10:17
Antworten mit Zitat
Benutzer-Profile anzeigen
@Smily0412 danke so funktioniert es

d-bug

BeitragDo, Jan 04, 2007 10:24
Antworten mit Zitat
Benutzer-Profile anzeigen
@Smily0412

Code: [AUSKLAPPEN]
...

For X = 0 To GX - 1                          ;<--
 For Y = 0 To GY - 1                         ;<--
  C = Abs(XM-X)^2+Abs(YM-Y)^2

...usw...


hätte das Problem auch behoben.

Du hast mit ql:WritePixelFast über den Buffer hinaus Pixel gesetzt (0 bis 1600 = 1601).
Das funktioniert bei manchen, aber meistens sorgt es für einen MAV.

cheers

Smily

BeitragFr, Mai 11, 2007 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
um den Threat mal wieder hochzuholen ^^

Code: [AUSKLAPPEN]
Graphics 800,600,16,2

For y = 0 To 800
   c = (y) Mod 50
   If ((y / 50) Mod 2) c = 50-c
   c = 3*c
   Color c,0,0
   For x = 0 To 800
      ny = y + Sin(x*3)*20 - 100
      Plot x,ny
   Next
Next
flip

For y = 0 To 800
   c = (y) Mod 50
   If ((y / 50) Mod 2) c = 50-c
   c = 3*c
   For x = 0 To 800
      ny = y+Sin(x*4)*20-100
      GetColor x,ny
      Color ColorRed(), c, ColorBlue()
      Plot x,ny
   Next
Next

flip
For y = 0 To 800
   c = (y) Mod 50
   If ((y / 50) Mod 2) c = 50-c
   c = 3*c
   For x = 0 To 800
      ny = y+Sin(x*5)*20-100
      GetColor x,ny
      Color ColorRed(), ColorGreen(), c
      Plot x,ny
   Next
Next
flip
WaitKey()
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Mai 11, 2007 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier sowas änliches wie ein Plasma-Effekt-Code: [AUSKLAPPEN]
Graphics 80,60,0,3
SetBuffer BackBuffer()

While Not KeyHit(1)
 z1#=z1+.4
 z2#=z2+.8
 z3#=z3+.6
 LockBuffer BackBuffer()
  For y=0 To 59 Step 1
   For x=0 To 79 Step 1
    f1=120-Abs(Sin(x+z1+Sin(y*4+z1)*120)*120)
    f2=120-Abs(Cos(y-z2+Sin(x*4-z1)*120)*120)
    f3=Int(120-Abs(Sin(x*4+z2+Sin(x+y+z3)*40)*120))*256
    f4=Int(120-Abs(Cos(y*4-z2+Sin(x-y-z1)*40)*120))*256
    f5=Int(120-Abs(Sin(y*4+z1+Sin(x-y+z2)*40)*120))*65536
    f6=Int(120-Abs(Cos(x*4-z1+Sin(x+y-z2)*40)*120))*65536
    WritePixelFast x+0,y+0,f1+f2+f3+f4+f5+f6
   Next
  Next
 UnlockBuffer BackBuffer()
 Flip
Wend
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

FWeinb

ehemals "ich"

BeitragFr, Mai 11, 2007 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr sehr Geil Hectic also das sieht super aus aber auch der Effeckt von Smily ist gut
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group