Jump to content

  • Log In with Google      Sign In   
  • Create Account

FREE SOFTWARE GIVEAWAY

We have 4 x Pro Licences (valued at $59 each) for 2d modular animation software Spriter to give away in this Thursday's GDNet Direct email newsletter.


Read more in this forum topic or make sure you're signed up (from the right-hand sidebar on the homepage) and read Thursday's newsletter to get in the running!


Random glClearColor values


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 lucaswrk   Members   -  Reputation: 108

Like
0Likes
Like

Posted 05 August 2012 - 01:17 PM

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, 05 August 2012 - 01:19 PM.


Sponsor:

#2 jouley   Members   -  Reputation: 801

Like
0Likes
Like

Posted 05 August 2012 - 01:30 PM

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

Your alpha value is 1.0. You probably meant 255 Posted Image.

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, 05 August 2012 - 01:44 PM.


#3 lucaswrk   Members   -  Reputation: 108

Like
0Likes
Like

Posted 05 August 2012 - 01:57 PM


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

Your alpha value is 1.0. You probably meant 255 Posted Image.

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


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!




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS