MetallTextureMaker -_-
Übersicht

![]() |
HolzchopfMeisterpackerBetreff: MetallTextureMaker -_- |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dieses kleine Programm erstellt eine Textur oder ein Bild einer Metalloberfläche. Man kann aber nicht nur Metall "erstellen" sondern auch ganz andere Dinge, zb: Grashalme, Glastexturen, Sand etc...
Einfach mit den Parametern rumspielen, ich glaub ich habe sie genug dokumentiert und auskommentiert. Code: [AUSKLAPPEN] Graphics 400,300,32,2 AppTitle "MTM (MetallTextureMaker -_- ) - by Holzchopf" SeedRnd MilliSecs() ;************************************************ ; Soll die erstellte Textur Kachelbar sein? Kachelbar = True ; Soll die erstellte Textur gespeichert werden? Speichern = False ; Wenn ja, wohin? Pfad$ = "Metalltextur.bmp" ; RGB-Werte der Grundfarben RGB_Rot = 128 RGB_Gruen = 128 RGB_Blau = 128 ; ± Toleranz der Farbe, welche die einzelnen ; Streifen haben dürfen ( > Je weniger, umso ; feiner wirken die "Kratzer" ) RGB_Toleranz = 2 ; Mindest- und Höchstwerte, welche die Farben ; erreichen dürfen RGB_Rot_Min = 0 RGB_Rot_Max = 256 RGB_Gruen_Min = 0 RGB_Gruen_Max = 256 RGB_Blau_Min = 0 RGB_Blau_Max = 256 ; Mindest- und Maximallänge der Streifen Laenge_Min = 5 Laenge_Max = 40 ; Winkel der Streifen Winkel = 0 ; ± Toleranz des Winkels Winkel_Tol = 0 ; Form der Streifen ( > Parameter: ; 0 = Gerade ; 1 = Rund ( Mittelpunkt beachten ) Form = 0 ; Mittelpunkt, wenn Form = 1 Zentr_X = 0 Zentr_Y = 0 ; Radiusbereich ( Entfernung ) der Streifen zum ; Mittelpunkt bei Form = 1 Radius_Min = 0 Radius_Max = 100 ; Winkelbereich der Streifen bei Form = 1 Winkel_Min = 90 Winkel_Max = 180 ; Dimensionen des Bildes Breite = 128 Hoehe = 128 ; Anzahl Streifen ( > Je weniger, umso glatter ; wirkt die Oberfläche ) ANZ_Streifen = 10000 ;************************************************* bild = CreateImage( Breite, Hoehe ) bild_buf = ImageBuffer( bild ) SetBuffer bild_buf ; Den Bereich grundieren Color RGB_Rot, RGB_Gruen, RGB_Blau Rect 0,0, Breite, Hoehe LockBuffer bild_buf ; Alle Streifen bearbeiten For i = 0 To ANZ_Streifen ; Die Länge im angegeben Bereich festlegen Laenge = Rand( Laenge_Min, Laenge_Max ) ; Die Startposition des Streifens festlegen XPos = Rand( 0, Breite - 1 ) YPos = Rand( 0, Hoehe - 1 ) ; Die Farbabweichung des Streifens festlegen Abweichung = Rand( -RGB_Toleranz, RGB_Toleranz ) If Form = 0 ; Die Winkelabweichung festlegen wnk = Winkel + Rand( -Winkel_Tol, Winkel_Tol ) Else ; Den Radius und Startwinkel festlegen wnk = Rand( Winkel_Min, Winkel_Max - Laenge ) radius = Rand( Radius_Min, Radius_Max ) EndIf ; Den Streifen malen For l = 0 To Laenge If Form = 0 ; X- und Y-Position unter Winkel berechnen x = XPos + Cos( wnk ) * l y = YPos + Sin( wnk ) * l Else ; X- und Y-Position unter Winkel und Radius ; ausgehend vom Zentrum berechnen x = Zentr_X + Cos( wnk ) * radius y = Zentr_Y + Sin( wnk ) * radius ; Den Winkel um 1 erhöhen ( sonst gibts keine ; Kreise ) wnk = wnk + 1 EndIf If Kachelbar = 1 ; X und Y bei Über- resp. Unterlauf auf die ; Andere Seite setzen x = ( x + Breite ) Mod Breite y = ( y + Hoehe ) Mod Hoehe EndIf ; Pixel nur bearbeiten wenn Position innerhalb ; der Bildgrösse liegt ( bei Kachelbar = 0 kann ; dies vorkommen ) If x => 0 And x < Breite And y => 0 And y < Hoehe ; Pixel auslesen und die einzelnen Farb- ; anteile ausrechnen RGB = ReadPixelFast( x, y ) Rot = ( RGB And $FF0000 ) Shr 16 Gruen = ( RGB And $00FF00 ) Shr 8 Blau = ( RGB And $0000FF ) ; Die einzelnen Farbanteile mit der Abweichung ; verfälschen und sie im Toleranzfeld halten Rot = Rot + Abweichung If Rot > RGB_Rot_Max Then Rot = RGB_Rot_Max If Rot < RGB_Rot_Min Then Rot = RGB_Rot_Min Gruen = Gruen + Abweichung If Gruen > RGB_Gruen_Max Then Gruen = RGB_Gruen_Max If Gruen < RGB_Gruen_Min Then Gruen = RGB_Gruen_Min Blau = Blau + Abweichung If Blau > RGB_Blau_Max Then Blau = RGB_Blau_Max If Blau < RGB_Blau_Min Then Blau = RGB_Blau_Min ; RGB zusammenrechnen und Pixel zeichnen RGB = ( Rot Shl 16 ) + ( Gruen Shl 8 ) + Blau WritePixelFast x, y, RGB EndIf Next Next UnlockBuffer bild_buf ;************************************************* If Speichern Then SaveImage( Bild, Pfad ) ;************************************************* SetBuffer BackBuffer() While Not KeyHit(1) Cls DrawImage Bild, 0, 0 Flip Wend End Eine Idee - die Geschwindigkeit zu optimieren - wäre natürlich, statt direkt Pixel zu lesen und zu schreiben, alles zuerst in eine Bank speichern und danach erst malen. Aber das hier ist ja kein Geschwindigkeitswettbewerb ![]() |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
- Zuletzt bearbeitet von Holzchopf am So, Feb 06, 2005 21:39, insgesamt einmal bearbeitet
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
garnicht mal schlecht. mit handgefertigten texturen natürlich nicht zu vergleichen...aber für einen algorythmus nicht schlecht ![]() interessante settings sind auch: - rgb 100-200 - laenge_max = 400 - form = 1 - radius_max = 100 in einer funktion, fertig zum includen währe das sicher eine feine sache... ![]() |
||
Bolo Loco |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Verdammt - das ding ist gut !!!! Glückwunsch !
Ich habe nur kurz mit den Parametern ein bißchen rumgespielt und habe schon eine ganze handvoll an Texturen ,die man ganz hervorragend als Layer benutzen kann. Also an deiner Stelle würde ich das ganze noch ausbauen: - nette GUI - abspeichern von Einstellungen - weitere Algorithmen ( Perlin Noise ? ) Tja,ich sage ersteinmal : Vielen Dank ! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group