Seite 1 von 1

Farbverlauf

Verfasst: 06.01.2005 20:29
von Andreas21
Hei,

hat jemand eine idee wie man einen Farbverlauf mit 4 Farben machen kann?

Einen Farbverlauf mit 2 Farben habe ich schon im Code Archive gefunden.

Mit 4 Farben meine ich das man 4 RGB Farben angeben kann die dann von allen 4 Ecken eines Fenster zur Mitte verlauffen.

Ich hoffe das ist verständlich

Verfasst: 06.01.2005 21:10
von GPI
Selber zeichen:

Code: Alles auswählen

Clu_red=255
Clu_green=255
Clu_blue=255

Cru_red=255
Cru_green=0
Cru_blue=0

Clb_red=0
Clb_green=255
Clb_blue=0

Crb_red=0
Crb_green=0
Crb_blue=255

Width=200:Height=200
CreateImage(0,Width,Height)
StartDrawing(ImageOutput())
For y=0 To Height-1
  CLeft_red  =Clu_red   + (Clb_red  -Clu_red  )*y/(Height-1)
  CLeft_green=Clu_green + (Clb_green-Clu_green)*y/(Height-1)
  CLeft_blue =Clu_blue  + (Clb_blue -Clu_blue )*y/(Height-1)
  
  CRight_red  =Cru_red   + (Crb_red  -Cru_red  )*y/(Height-1)
  CRight_green=Cru_green + (Crb_green-Cru_green)*y/(Height-1)
  CRight_blue =Cru_blue  + (Crb_blue -Cru_blue )*y/(Height-1)
  
  For x=0 To Width-1
    C_red  =CLeft_red   + (CRight_red  -CLeft_red  )*x/(Width-1)
    C_green=CLeft_green + (CRight_green-CLeft_green)*x/(Width-1)
    C_blue =CLeft_blue  + (CRight_blue -CLeft_blue )*x/(Width-1)
    Plot(x,y,RGB(C_red,C_green,C_blue))
  Next
Next
StopDrawing()






If OpenWindow(1,0,0,200,200,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Test")
  If CreateGadgetList(WindowID())
    ImageGadget(0,0,0,Width,Height,ImageID())
    Repeat
      event=WaitWindowEvent()
      
    Until event=#PB_Event_CloseWindow
  EndIf
EndIf

Verfasst: 06.01.2005 21:15
von DarkDragon
So:

Code: Alles auswählen

#WindowWidth = 500
#WindowHeight = 400
#WindowFlags = #PB_Window_TitleBar | #PB_Window_MaximizeGadget | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered
Version.f = 1.0

Global hWnd.l, Event

Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents
  If Message = #WM_SIZE
    glViewport_(0, 0, WindowWidth(), WindowHeight())
    Result = 1
  EndIf
  ProcedureReturn Result
EndProcedure

If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, #WindowFlags, "OpenGL Scene "+StrF(Version, 1))

SetWindowCallback(@MyWindowCallback())

hWnd = WindowID(0)
hDC = GetDC_(hWnd)

;Initialize OpenGL
pfd.PIXELFORMATDESCRIPTOR
pfd\nSize        = SizeOf(PIXELFORMATDESCRIPTOR)
pfd\nVersion     = 1
pfd\dwFlags      = #PFD_SUPPORT_OPENGL | #PFD_DOUBLEBUFFER | #PFD_DRAW_TO_WINDOW
pfd\iLayerType   = #PFD_MAIN_PLANE
pfd\iPixelType   = #PFD_TYPE_RGBA
pfd\cColorBits   = 24
pfd\cDepthBits   = 32
pixformat = ChoosePixelFormat_(hDC, pfd)
SetPixelFormat_(hDC, pixformat, pfd)
hrc = wglCreateContext_(hDC)
wglMakeCurrent_(hDC, hrc)

SwapBuffers_(hDC)
glEnable_($0B71)
glShadeModel_($1D01)

Repeat
  glClear_($00004000 | $00000100)
  glLoadIdentity_()
  glBegin_($0007)
  glColor3f_(1.0, 0.0, 0.0) : glVertex2f_(-1.0,-1.0)
  glColor3f_(0.0, 1.0, 0.0) : glVertex2f_( 1.0,-1.0)
  glColor3f_(1.0, 1.0, 0.0) : glVertex2f_( 1.0, 1.0)
  glColor3f_(0.0, 0.0, 1.0) : glVertex2f_(-1.0, 1.0)
  glEnd_()
  SwapBuffers_(hDC)
  
  Event = WindowEvent()
Until Event = #PB_Event_CloseWindow
End
EndIf
Gehts auch :allright:

Verfasst: 06.01.2005 22:48
von Andreas21
Danke für eure beispeile.

OpenGL kann ich leider nicht gebrauchen aber das von GPI ist super :-D

Das mit den 2 Farben habe ich ja begriffen. Ich habe es nur nicht geschaft es mit 4 Farben zu machen. Danke.