Bei color y,y,y Farbe = gelb?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Kruemelator

Betreff: Bei color y,y,y Farbe = gelb?

BeitragSo, Mai 24, 2009 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mal so aus Spaß rumgecodet.
Dann ist mir was passiert was ich nicht verstehe.
Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

fpsrate = CreateTimer(120)
While Not KeyHit(1)
WaitTimer(fpsrate)



Oval 400-x#,300-x#,x#*2,x#*2,0
x# = x# + 0.1

y# = a+1*(x#-4)^2
Color y#,y#,y#


Flip
Wend
End

DaysShadow

BeitragSo, Mai 24, 2009 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir ist das ganze weiß und nicht gelb, vielleicht hast du seltsame Einstellungen an deinem Monitor, jedenfalls kein gelb in Sicht.

MfG DaysShadow
Blessed is the mind too small for doubt

BladeRunner

Moderator

BeitragSo, Mai 24, 2009 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Du setzt rot, grün und blauanteil jeweils auf den selben wert, das sollte graustufen ergeben, es sei denn dein y# wird grösser als 255.0 und provoziert so nen Überlauf.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Eingeproggt

BeitragSo, Mai 24, 2009 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist gelb, ja... und ich kann nur vermuten warum... weil für die rgb-werte gibt man Farben von 0-255 an, bei deiner Berechnung kommt jedenfalls ne größere Zahl raus.
Aber zu deinem Code:
Timer + Flip=Schwachsinn. Flip 0 ist das Zauberwort
Was bringt sich a+1* in der Berechnung? a ist 0 und eine Zahl mal 1 ist immer diese Zahl.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Mai 24, 2009 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
liegt daran das Y# größer als 255 wird!

mit diesem Beispiel kannst du die Farbwerte im Debugfenster ausgeben (mit Space)
Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

fpsrate = CreateTimer(120)
While Not KeyHit(1)
WaitTimer(fpsrate)



Oval 400-x#,300-x#,x#*2,x#*2,0
x# = x# + 0.1

y# = a+1*(x#-4)^2
Color y#,y#,y#

If KeyHit (2) Then  RGBAuslesen( y + y*$100 + y *$10000) 

Flip
Wend
End

Function RGBAuslesen(RGB%)

   Alpha% =  (RGB% Shr 24) And $ff
   R% = (RGB% Shr 16) And $ff
   G% = (RGB% Shr 8) And $ff
   B% = RGB% And $ff
   DebugLog "RGB%   " + RSet(Alpha%,5) + RSet(R%,5) + RSet(G%,5) + RSet(B%,5)
End Function Graphics 800,600,16,2
SetBuffer BackBuffer()

fpsrate = CreateTimer(120)
While Not KeyHit(1)
WaitTimer(fpsrate)



Oval 400-x#,300-x#,x#*2,x#*2,0
x# = x# + 0.1

y# = a+1*(x#-4)^2
Color y#,y#,y#

If KeyHit (2) Then  RGBAuslesen( y + y*$100 + y *$10000) 

Flip
Wend
End

Function RGBAuslesen(RGB%)

   Alpha% =  (RGB% Shr 24) And $ff
   R% = (RGB% Shr 16) And $ff
   G% = (RGB% Shr 8) And $ff
   B% = RGB% And $ff
   DebugLog "RGB%   " + RSet(Alpha%,5) + RSet(R%,5) + RSet(G%,5) + RSet(B%,5)
End Function
[BB2D | BB3D | BB+]
 

Kruemelator

BeitragSo, Mai 24, 2009 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
@Eingeproggt: Ist die Grundform einer Scheitelpunktsform einer quadratischen Funktion.
Aber warum gelb? Der r-,g- und b-Anteil ist doch immer gleich.
Später wirds auch noch rot.

Gruß Kruemelator

Edit: Warum macht Color den aus ein und der selben Zahl 3 unterschiedliche?

Smily

BeitragSo, Mai 24, 2009 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
lass dir mal y ausgeben. das liegt über 255

wie schon gesagt, damit provuzierst du einen überlauf.
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

Holzchopf

Meisterpacker

BeitragSo, Mai 24, 2009 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie gesagt, wegen Überlauf.

Deine Werte werden grösser als 255, d.h. dass das, was beim Blauanteil überläuft, zum Grünanteil hinzuaddiert wird, und das, was beim Grünanteil zu gross ist, wird beim Rotanteil hinzuaddiert. Drum wirds zuerst gelb und später sogar rot.

Dieses Verhalten kann man sich übrigens zunutze machen, zB bei einfachen Hex-Farbangaben:
Code: [AUSKLAPPEN]
Color 0,0,$FF00FF
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Mai 24, 2009 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Code geht auch ''geringfügig'' (so um ~10'000 mal) schneller:

Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

Local X%,Y%,F%,C#,B%=BackBuffer()

LockBuffer B

For Y=0 To 299
   For X=0 To 399
      
      C=Sqr((399.5-X)^2+(299.5-Y)^2)
      F=(C*C/6.0) Mod 256
      
      WritePixelFast     X,    Y,F+F*256+F*65536,B
      WritePixelFast     X,599-Y,F+F*256+F*65536,B
      WritePixelFast 799-X,    Y,F+F*256+F*65536,B
      WritePixelFast 799-X,599-Y,F+F*256+F*65536,B
   Next
Next

UnlockBuffer B

WaitKey

Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Silver_Knee

BeitragSo, Mai 31, 2009 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
color macht sogesehen aus 3 zahlen eine.

Dabei sieht das halt so aus

$RRGGBB
und wenn du eben einen blau wert >255 angibst passiert

$FFFFFF+1= $1000000 und das passt nicht mehr ins Schema $RRGGBB. Dass es dann zu irgendwas abartigen kommt ist klar

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group