Skip to main content
GameDev.net gamedev.net
🔒 Locked

Random glClearColor values

Started by lucaswrk Aug 5, 2012 at 7:17 PM 1 replies 4k views
Original Post
lucaswrk
lucaswrk
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:


#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;
}


thank you.
jouley
jouley

glClearColor(rand()%256, rand()%256, rand()%256, 1.0);

Your alpha value is 1.0. You probably meant 255 smile.png.

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 rand()%256 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.)
lucaswrk
lucaswrk

[quote name='lucaswrk' timestamp='1344194233' post='4966437']
glClearColor(rand()%256, rand()%256, rand()%256, 1.0);

Your alpha value is 1.0. You probably meant 255 smile.png.

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 rand()%256 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..


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


thank you @jouley!

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.