Advertisement

Please help

Started by October 03, 2006 08:11 AM
0 comments, last by todi1856 18 years, 1 month ago
I have done a simple chess board,my problem waa when i debug,it displayed on window,but when i maximun the windows the square all gone leaving the red color background only. #include<windows.h> #include<gl/gl.h> #include<gl/glu.h> #include<gl/glut.h> #include<math.h> //called to draw a scene void DisplayScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_QUADS); glColor3f(0.0f,0.0f,1.0f); // Draw A Quad glVertex3f(-80.0f, 80.0f, 0.0f); // Top Left glVertex3f( 80.0f, 80.0f, 0.0f); // Top Right glVertex3f( 80.0f,-80.0f, 0.0f); // Bottom Right glVertex3f(-80.0f,-80.0f, 0.0f); // Bottom Left static GLfloat xF=-60.0; static GLfloat yS=-40.0; static GLfloat xF1=-40.0; static GLfloat yS1=-60.0; static GLfloat a=80.0f; static GLfloat b=80.0f; static GLfloat c=60.0f; static GLfloat d=60.0f; static GLfloat xFF=-80.0; static GLfloat ySS=-60.0; static GLfloat xF2=-60.0; static GLfloat yS2=-80.0; static GLfloat a1=60.0f; static GLfloat b1=60.0f; static GLfloat c1=40.0f; static GLfloat d1=40.0f; for(int i=0;i<8;i++) { if(i%2==0) { for(int j=0;j<4;j++) { glColor3f(1.0f,1.0f,0.0f); glVertex3f(xF, a, 0.0f); glVertex3f(yS, b, 0.0f); glVertex3f(xF1,c, 0.0f); glVertex3f(yS1,d, 0.0f); xF+=40.0f; yS+=40.0f; xF1+=40.0f; yS1+=40.0f; } xF=-60.0f; yS=-40.0f; xF1=-40.0f; yS1=-60.0f; a-=40.0f; b-=40.0f; c-=40.0f; d-=40.0f; } else { for(int j=0;j<4;j++) { glColor3f(1.0f,1.0f,0.0f); glVertex3f(xFF, a1, 0.0f); glVertex3f(ySS, b1, 0.0f); glVertex3f(xF2,c1, 0.0f); glVertex3f(yS2,d1, 0.0f); xFF+=40.0f; ySS+=40.0f; xF2+=40.0f; yS2+=40.0f; } xFF=-80.0f; ySS=-60.0f; xF2=-60.0f; yS2=-80.0f; a1-=40.0f; b1-=40.0f; c1-=40.0f; d1-=40.0f; } } glEnd(); glutSwapBuffers(); glLoadIdentity(); } //this Function does any neede initialization on the rendering context void MyInit() { //black background glClearColor(1.0f,0.0f,0.0f,1.0f); //set drawing color to green glColor3f(0.0f,0.0f,0.0f); } void ChangeSize(int w, int h) { GLfloat nRange=100.0f; //prevent a divide by zero if(h==0) h=1; //set viewport to window dimensions glViewport(0,0,w,h); //reset projection matrix stack glMatrixMode(GL_PROJECTION); glLoadIdentity(); //establish clipping volume(left,right,bottom,top,near,far) if(w<=h) glOrtho(-nRange,nRange, -nRange*w/h,nRange*h/w,-nRange,nRange); else glOrtho(-nRange*w/h,nRange*w/h, -nRange,nRange,-nRange,nRange); //reset model view matrix stack glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc, char* argv[]) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutCreateWindow("PONT EXMAPLE"); glutReshapeFunc(ChangeSize); glutDisplayFunc(DisplayScene); MyInit(); glutMainLoop(); return 0; }
I think you don't understand how word "static" works in c++

You declare variables like this, but you're changing them while drawing your checkboard.

	static GLfloat xF=-60.0; 	static GLfloat yS=-40.0;	static GLfloat xF1=-40.0; 	static GLfloat yS1=-60.0; 	static GLfloat a=80.0f; 	static GLfloat b=80.0f;	static GLfloat c=60.0f; 	static GLfloat d=60.0f; 	static GLfloat xFF=-80.0; 	static GLfloat ySS=-60.0;	static GLfloat xF2=-60.0; 	static GLfloat yS2=-80.0; 	static GLfloat a1=60.0f; 	static GLfloat b1=60.0f;	static GLfloat c1=40.0f; 	static GLfloat d1=40.0f; 


When the DisplayScene() is executed again, values of those variables have been changed from the previous frame

Change to this and everything will be ok

	 GLfloat xF=-60.0; 	 GLfloat yS=-40.0;	 GLfloat xF1=-40.0; 	 GLfloat yS1=-60.0; 	 GLfloat a=80.0f; 	 GLfloat b=80.0f;	 GLfloat c=60.0f; 	 GLfloat d=60.0f; 	 GLfloat xFF=-80.0; 	 GLfloat ySS=-60.0;	 GLfloat xF2=-60.0; 	 GLfloat yS2=-80.0; 	 GLfloat a1=60.0f; 	 GLfloat b1=60.0f;	 GLfloat c1=40.0f; 	 GLfloat d1=40.0f; 

This topic is closed to new replies.

Advertisement