PDA

View Full Version : Drawing Circle doesnt work (check Code)



Tyvan
09-18-2009, 07:20 AM
Hi GL'ers,

im trying to draw a circle step by step. In while loop a container is filled with proper coordinates of circle, after each add into the container the content of the container is drawn. So every step i should see a circle being build up.
But i see nothing. Whats wrong with this code? Checked many websites and tutorials, looks ok.



int main(int argc, char *argv[])
{
SDL_Event event;
SDL_Surface* screen;

if( SDL_Init(SDL_INIT_VIDEO) != 0 ) {
printf("Unable to initialize SDL: %s\n", SDL_GetError());
return 1;
}

screen = SDL_SetVideoMode( 640, 480, 16, SDL_OPENGL );
if ( !screen ) {
printf("Unable to set video mode: %s\n", SDL_GetError());
return 1;
}

glClearColor( 0, 0, 0, 0 );
glViewport( 0, 0, 640, 480);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();

glOrtho( 0, 640, 480, 0, -1, 1 );
glMatrixMode( GL_MODELVIEW);
glLoadIdentity();

if( glGetError() != GL_NO_ERROR ) {
std::cout << "Error in GL\n";
}

bool quit = true;
int currentDegree = 0;
PointContainer con(0);

while( quit) {

while( SDL_PollEvent( &amp;event)) {
if( event.type == SDL_KEYDOWN) {
if( event.key.keysym.sym == SDLK_ESCAPE) {
quit = false;
}
}
}

if( currentDegree > 360) {
currentDegree = 0;
con.clear();
}

//manage pointcontainer
float degInRad = currentDegree*DEG2RAD;
Point2D p2;
p2.x = cos( degInRad)*50;
p2.y = sin( degInRad)*50;
con.add( p2);
currentDegree += 1;

// Clear the screen before drawing
glClear( GL_COLOR_BUFFER_BIT );
glBegin( GL_LINES );
glColor3i( 255, 0, 0);
for( int i=0; i<con.size(); i++) {
glVertex3f( con.get(i).x, con.get( i).y, 0);
}
glEnd();
SDL_GL_SwapBuffers();
SDL_Delay( 20);
}

SDL_Quit();
return 0;
}

MarkS
09-18-2009, 11:32 AM
What are you using to offset the circle? It is centered at the bottom-left corner of the viewport. Also, with a delay of 20 (milliseconds?), the circle is being drawn and cleared so fast you may never actually see it. Try increasing the delay and see what happens.