Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
hue rotation error/problem
#1
I'm trying to code some sort of mystify (the screensaver)

but when it comes to the hue rotation stuff there's an error somewhere
and I can't find it.
Can someone look through my code and help me out?


Code:
TYPE vertex
        x AS SINGLE
        y AS SINGLE
        xm AS SINGLE
        ym AS SINGLE
END TYPE
DIM p1 AS vertex
DIM p2 AS vertex
DIM clr AS SINGLE
DIM colorstep AS SINGLE
DIM colornumber AS LONG



xmax = 639
ymax = 479
colors = 16
colorstep = .3
screenmode = 12
movementstep = 5
movementrandrange = 4

'color number = (65536 * blue/n+1) + (256 * green/n+1) + (red/n+1)




RANDOMIZE TIMER
SCREEN screenmode
r = 63: b = 63

FOR n = 0 TO colors - 1
        PALETTE n, (65536 * b / (n + 1)) + (256 * g / (n + 1)) + (r / (n + 1))
NEXT

p1.x = RND * xmax
p1.y = RND * ymax
p2.x = RND * xmax
p2.y = RND * ymax
p1.xm = (movementstep + (RND * movementrandrange) - (movementrandrange / 2))
p1.ym = (movementstep + (RND * movementrandrange) - (movementrandrange / 2))
p2.xm = (movementstep + (RND * movementrandrange) - (movementrandrange / 2))
p2.ym = (movementstep + (RND * movementrandrange) - (movementrandrange / 2))

IF INT(RND) THEN p1.xm = -p1.xm
IF INT(RND) THEN p1.xm = -p1.xm
IF INT(RND) THEN p1.xm = -p1.xm
IF INT(RND) THEN p1.xm = -p1.xm

clr = 0
DO
        IF p1.x <= 0 AND p1.xm <= 0 THEN p1.xm = movementstep + (RND * movementrandrange) - (movementrandrange / 2)
        IF p1.x >= xmax AND p1.xm >= 0 THEN p1.xm = -movementstep + (RND * movementrandrange) - (movementrandrange / 2)
        IF p1.y <= 0 AND p1.ym <= 0 THEN p1.ym = movementstep + (RND * movementrandrange) - (movementrandrange / 2)
        IF p1.y >= ymax AND p1.ym >= 0 THEN p1.ym = -movementstep + (RND * movementrandrange) - (movementrandrange / 2)

        IF p2.x <= 0 AND p2.xm <= 0 THEN p2.xm = movementstep + (RND * movementrandrange) - (movementrandrange / 2)
        IF p2.x >= xmax AND p2.xm >= 0 THEN p2.xm = -movementstep + (RND * movementrandrange) - (movementrandrange / 2)
        IF p2.y <= 0 AND p2.ym <= 0 THEN p2.ym = movementstep + (RND * movementrandrange) - (movementrandrange / 2)
        IF p2.y >= ymax AND p2.ym >= 0 THEN p2.ym = -movementstep + (RND * movementrandrange) - (movementrandrange / 2)

        IF clr >= 0 THEN colorstep = -colorstep
        IF clr <= colors - 1 THEN colorstep = -colorstep

        clr = clr + colorstep

        LINE (p1.x, p1.y)-(p2.x, p2.y), clr

        p1.x = p1.x + p1.xm
        p1.y = p1.y + p1.ym
        p2.x = p2.x + p2.xm
        p2.y = p2.y + p2.ym
        
        SELECT CASE phase
                CASE IS = 0: b = b - 1
                        IF b = 0 THEN phase = 1
                CASE IS = 1: g = g + 1
                        IF g = 63 THEN phase = 2
                CASE IS = 2: r = r - 1
                        IF r = 0 THEN phase = 3
                CASE IS = 3: b = b + 1
                        IF b = 63 THEN phase = 4
                CASE IS = 4: g = g - 1
                        IF g = 0 THEN phase = 5
                CASE IS = 5: r = r + 1
                        IF r = 63 THEN phase = 0
        END SELECT
      
        
      
      
        FOR n = 0 TO colors - 1
                PALETTE n, (65536 * b / (n + 1)) + (256 * g / (n + 1)) + (r / (n + 1))
        NEXT
        





LOOP WHILE INKEY$ = ""
/post]
Reply
#2
I had to develop an exact HSV conversion to get rid of these issues...

http://mandelbrot.dazibao.free.fr/Tclib/Tclib13.zip

You'll have to adapt the code to 256 colours instead of true colours, but that should fit.

You can download the TC-Lib and search the HSV routines. There is a ShiftHue sub, but also two different HSVtoRGB conversions : the exact one and the hexacone based simple model. There is also a reverse RGBtoHSV routine...

Hope this will help
hink Global, Make Symp' All ! ®
[Image: Banner.gif]
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)