Jump to content
  • Advertisement
Sign in to follow this  
lucaswrk

OpenGL Random glClearColor values

This topic is 2147 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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:


#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. Edited by lucaswrk

Share this post


Link to post
Share on other sites
Advertisement

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.) Edited by jouley

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);

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!

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!