Sign in to follow this  
lucaswrk

OpenGL Random glClearColor values

Recommended Posts

hello everyone, i'm new to opengl and im having trouble to generate glClearColor random values... if i set it manually, works well but with rand()%256 it not. Whats going on ?

os: ubuntu 12.04
io/window library: sdl

heres my code:

[CODE]
#include <iostream>
#include "SDL/SDL.h"
#include "SDL/SDL_opengl.h"
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
srand(time(NULL));
SDL_Init(SDL_INIT_EVERYTHING);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_WM_SetCaption("Our first game", NULL);
SDL_SetVideoMode(600, 400, 32, SDL_OPENGL);
glClearColor(255,255,255,255); //rgba
glViewport(0, 0, 600, 400); // top-left bottom-right viewport range
glShadeModel(GL_SMOOTH); // gradient

glMatrixMode(GL_PROJECTION); // 2d
glLoadIdentity();
glDisable(GL_DEPTH_TEST);
bool isRunning = true;
SDL_Event event;
while(isRunning)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
isRunning = false;
break;
}
if(event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_ESCAPE)
{
isRunning = false;
break;
}
if(event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_r)
{
glClearColor(rand()%256, rand()%256, rand()%256, 1.0);
break;
}
}
//rendering
glClear(GL_COLOR_BUFFER_BIT);
SDL_GL_SwapBuffers();
}
SDL_Quit();
return 0;
}
[/CODE]

thank you. Edited by lucaswrk

Share this post


Link to post
Share on other sites
[quote name='lucaswrk' timestamp='1344194233' post='4966437']
glClearColor(rand()%256, rand()%256, rand()%256, 1.0);
[/quote]
Your alpha value is 1.0. You probably meant 255 [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img].

Edit: It's also possible that glClearColor expects floats clamped to 1.0, in which case it's highly likely you're always getting white since [tt]rand()%256[/tt] will usually be nonzero. Try dividing the results of that calculation by 255.0f to find out. (Or check the documentation... either way, don't mix clamped floats and integer formats.) Edited by jouley

Share this post


Link to post
Share on other sites
[quote name='jouley' timestamp='1344195027' post='4966442']
[quote name='lucaswrk' timestamp='1344194233' post='4966437']
glClearColor(rand()%256, rand()%256, rand()%256, 1.0);
[/quote]
Your alpha value is 1.0. You probably meant 255 [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img].

Edit: It's also possible that glClearColor expects floats clamped to 1.0, in which case it's highly likely you're always getting white since [tt]rand()%256[/tt] will usually be nonzero. Try dividing the results of that calculation by 255.0f to find out. (Or check the documentation... either way, don't mix clamped floats and integer formats.)
[/quote]

yeah, that was the problem! x >= 1.0 will be the color max value, that's why my screen was getting white every time. Exactly as you said.
heres the correct code (with jouley's hint), if someone is interested..

[CODE]
float r = rand()%256 / 255.0f;
float g = rand()%256 / 255.0f;
float b = rand()%256 / 255.0f;
glClearColor(r, g, b, 1.0);
[/CODE]

thank you @jouley!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this