此程序中没有错误,但在CodeBlockIDE 17.12上显示白色:
# include <stdio.h>
# include <math.h>
# include<GL/gl.h>
# include <GL/glut.h>
# include <windows.h>
# include<GL/glext.h>
# include<GL/glu.h>
# include<stdlib.h>
# define pi 3.142
static GLfloat angle = 0;
static int submenu;
static int mainmenu;
static int value = -1;
void init()
{
gluOrtho2D(-1000, 1000, -1000, 1000);
}
void circle(float rad)
{
glBegin(GL_POINTS);
glColor3f(2, 0, 0);
for (float i = 0; i < (2 * pi); i += 0.00001)
{
glVertex2i(rad * cos(i), rad * sin(i));
}
glEnd();
}
void drawString(float x, float y, float z, char *string)
{
glColor3f(1, 1, 1);
glRasterPos3f(x, y, z);
for (char *c = string; *c != '\0'; c++)
{
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, *c);
}
}
void drawhead(float x, float y, float z, char *string)
{
glColor3f(1, 1, 1);
glRasterPos3f(x, y, z);
for (char *c = string; *c != '\0'; c++)
{
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, *c);
}
}
void drawsubhead(float x, float y, float z, char *string)
{
glColor3f(1, 1, 1);
glRasterPos3f(x, y, z);
for (char *c = string; *c != '\0'; c++)
{
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, *c);
}
}
void nuc(float rad)
{
glBegin(GL_POLYGON);
glColor3f(0, 0, 1);
for (float i = 0; i < (2 * pi); i = i + 0.00001)
{
glVertex2f(rad * cos(i), rad * sin(i));
}
glEnd();
}
void eleright(float rad)
{
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
for (float i = 0; i < (2 * pi); i += 0.00001)
{
glVertex2i(rad + 20 * cos(i), 20 * sin(i));
}
glEnd();
}
void eleleft(float rad)
{
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
for (float i = 0; i < (2 * pi); i += 0.00001)
{
glVertex2i(-(rad + 20 * cos(i)), 20 * sin(i));
}
glEnd();
}
void eletop(float rad)
{
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
for (float i = 0; i < (2 * pi); i += 0.00001)
{
glVertex2i(20 * cos(i), rad + 20 * sin(i));
}
glEnd();
}
void eledown(float rad)
{
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
for (float i = 0; i < (2 * pi); i += 0.00001)
{
glVertex2i(20 * cos(i), -(rad + 20 * sin(i)));
}
glEnd();
}
void eletr(float rad)
{
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
for (float i = 0; i < (2 * pi); i += 0.00001)
{
glVertex2i(((rad - 175) + 20 * cos(i)), ((rad - 175) + 20 * sin(i)));
}
glEnd();
}
void eletl(float rad)
{
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
for (float i = 0; i < (2 * pi); i += 0.00001)
{
glVertex2i(-((rad - 175) + 20 * cos(i)), ((rad - 175) + 20 * sin(i)));
}
glEnd();
}
void eledl(float rad)
{
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
for (float i = 0; i < (2 * pi); i += 0.00001)
{
glVertex2i(-((rad - 175) + 20 * cos(i)), -((rad - 175) + 20 * sin(i)));
}
glEnd();
}
void eledr(float rad)
{
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
for (float i = 0; i < (2 * pi); i += 0.00001)
{
glVertex2i(((rad - 175) + 20 * cos(i)), -((rad - 175) + 20 * sin(i)));
}
glEnd();
}
void display()
{
glClearColor(0, 0, 0.1, 0.9);
if (value == -1)
{
char cn[] = "GOVERNMENT ENGINEERING COLLEGE RAMANAGAR";
drawhead(-620, 900, 0, cn);
char pn[] = "B.M.ROAD,RAMANAGARA-562159";
drawsubhead(-300, 850, 0, pn);
char dn[] = "DEPARTMENT OF COMPUTER SCIENCE & ENGINEERING";
drawhead(-650, 650, 0, dn);
char prn[] = "A Mini Project On";
drawsubhead(-150, 450, 0, prn);
char pro[] = "ATOM SIMULATION";
drawhead(-250, 350, 0, pro);
char pb[] = "PROJECT BY: ";
drawhead(-690, -150, 0, pb);
char p1[] = "ADARSH.N";
drawhead(-690, -250, 0, p1);
char p1u[] = "1GG18CS002";
drawsubhead(-690, -300, 0, p1u);
char p2[] = "NITHIN KUMAR B";
drawhead(-690, -400, 0, p2);
char p2u[] = "1GG18CS028";
drawsubhead(-690, -450, 0, p2u);
char gb[] = "GUIDED BY: ";
drawhead(290, -150, 0, gb);
char g1[] = "Dr.SRI RAMACHANDRA L";
drawhead(290, -250, 0, g1);
char d1[] = "Professor, Dept. Of CSE, GECR";
drawsubhead(290, -300, 0, d1);
//char g2[] = "Sunil G L";
//drawhead(290, -400, 0, g2);
//char d2[] = "Assistant Professor, Dept. of CSE, SVIT";
//drawsubhead(290, -450, 0, d2);
char in[] = "Press enter to Continue";
drawhead(-250, -700, 0, in);
glutSwapBuffers();
glutDetachMenu(GLUT_RIGHT_BUTTON);
}
if (value != -1)
{
nuc(250);
char n[] = "NUCLEUS";
drawString(-80, 20, 0, n);
char d[] = "(NEUTRON + PROTON)";
drawString(-155, -30, 0, d);
if (value == 0)
{
char nu[] = "SELECT THE ELEMENT USING MENU";
drawhead(-490, 900, 0, nu);
}
}
if (value == 1)
{
char n[] = "HYDROGEN";
drawhead(-100, 900, 0, n);
circle(400);
char o[] = "ORBIT";
drawString(410, 0, 0, o);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
eleright(400);
char e[] = "ELECTRON";
drawString(420, 0, 0, e);
glPopMatrix();
glutSwapBuffers();
}
if (value == 2)
{
char n[] = "HELIUM";
drawhead(-100, 900, 0, n);
circle(400);
char o[] = "ORBIT";
drawString(410, 0, 0, o);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
eleright(400);
eleleft(400);
char e[] = "ELECTRON";
drawString(420, 0, 0, e);
glPopMatrix();
glutSwapBuffers();
}
if (value == 3)
{
char n[] = "LITHIUM";
drawhead(-100, 900, 0, n);
circle(400);
circle(600);
char o[] = "ORBIT";
drawString(610, 0, 0, o);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
eleright(400);
eleleft(400);
eletop(600);
char e[] = "ELECTRON";
drawString(0, 620, 0, e);
glPopMatrix();
glutSwapBuffers();
}
if (value == 4)
{
char n[] = "BERYLLIUM";
drawhead(-100, 900, 0, n);
circle(400);
circle(600);
char o[] = "ORBIT";
drawString(610, 0, 0, o);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
eleright(400);
eleleft(400);
eletop(600);
eledown(600);
char e[] = "ELECTRON";
drawString(0, 620, 0, e);
glPopMatrix();
glutSwapBuffers();
}
if (value == 5)
{
char n[] = "BORON";
drawhead(-100, 900, 0, n);
circle(400);
circle(600);
char o[] = "ORBIT";
drawString(610, 0, 0, o);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
eleright(400);
eleleft(400);
eletop(600);
eledown(600);
eletr(600);
char e[] = "ELECTRON";
drawString(0, 620, 0, e);
glPopMatrix();
glutSwapBuffers();
}
if (value == 6)
{
char n[] = "CARBON";
drawhead(-100, 900, 0, n);
circle(400);
circle(600);
char o[] = "ORBIT";
drawString(610, 0, 0, o);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
eleright(400);
eleleft(400);
eletop(600);
eledown(600);
eletr(600);
eledl(600);
char e[] = "ELECTRON";
drawString(0, 620, 0, e);
glPopMatrix();
glutSwapBuffers();
}
if (value == 7)
{
char n[] = "NITROGEN";
drawhead(-100, 900, 0, n);
circle(400);
circle(600);
char o[] = "ORBIT";
drawString(610, 0, 0, o);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
eleright(400);
eleleft(400);
eletop(600);
eledown(600);
eletr(600);
eledl(600);
eletl(600);
char e[] = "ELECTRON";
drawString(0, 620, 0, e);
glPopMatrix();
glutSwapBuffers();
}
if (value == 8)
{
char n[] = "OXYGEN";
drawhead(-100, 900, 0, n);
circle(400);
circle(600);
char o[] = "ORBIT";
drawString(610, 0, 0, o);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
eleright(400);
eleleft(400);
eletop(600);
eledown(600);
eletr(600);
eledl(600);
eletl(600);
eledr(600);
char e[] = "ELECTRON";
drawString(0, 620, 0, e);
glPopMatrix();
glutSwapBuffers();
}
if (value == 9)
{
char n[] = "FLUORINE";
drawhead(-100, 900, 0, n);
circle(400);
circle(600);
char o[] = "ORBIT";
drawString(610, 0, 0, o);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
eleright(400);
eleleft(400);
eletop(600);
eledown(600);
eletr(600);
eledl(600);
eletl(600);
eledr(600);
eleleft(600);
char e[] = "ELECTRON";
drawString(0, 620, 0, e);
glPopMatrix();
glutSwapBuffers();
}
if (value == 10)
{
char n[] = "NEON";
drawhead(-100, 900, 0, n);
circle(400);
circle(600);
char o[] = "ORBIT";
drawString(610, 0, 0, o);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
eleright(400);
eleleft(400);
eletop(600);
eledown(600);
eletr(600);
eledl(600);
eletl(600);
eledr(600);
eleleft(600);
eleright(600);
char e[] = "ELECTRON";
drawString(0, 620, 0, e);
glPopMatrix();
glutSwapBuffers();
}
glutSwapBuffers();
}
void rotate()
{
angle = angle + 1.0;
if (angle > 360)
{
angle = angle - 360;
}
glClear(GL_COLOR_BUFFER_BIT);
glutPostRedisplay();
}
void mouseControl(int button, int state, int x, int y)
{
switch (button)
{
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
glutIdleFunc(rotate);
break;
default:
break;
}
}
void keyboard(unsigned char key, int x, int y)
{
if (key == 13)
{
value = 0;
glClear(GL_COLOR_BUFFER_BIT);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutPostRedisplay();
}
else if (key == 's')
{
glutIdleFunc(NULL);
}
else if (key == 32)
{
glutIdleFunc(rotate);
}
else if (key == 'q' || key == 'Q')
{
exit(0);
}
else if (key == 27)
{
glutReshapeWindow(700, 700);
}
}
void fkey(int key, int x, int y)
{
if (key == GLUT_KEY_F10)
{
glutReshapeWindow(glutGet(GLUT_SCREEN_WIDTH), glutGet(GLUT_SCREEN_HEIGHT));
}
}
void menu(int option)
{
if (option == 13)
{
exit(0);
}
else if (option == 11)
{
glutIdleFunc(rotate);
}
else if (option == 12)
{
glutIdleFunc(NULL);
}
else if(option==14){
value=-1;
}
else
{
value = option;
}
glClear(GL_COLOR_BUFFER_BIT);
glutPostRedisplay();
}
void createMenu(void)
{
submenu = glutCreateMenu(menu);
glutAddMenuEntry("HYDROGEN", 1);
glutAddMenuEntry("HELIUM", 2);
glutAddMenuEntry("LITHIUM", 3);
glutAddMenuEntry("BERILIUM", 4);
glutAddMenuEntry("BORON", 5);
glutAddMenuEntry("CARBON", 6);
glutAddMenuEntry("NITROGEN", 7);
glutAddMenuEntry("OXYGEN", 8);
glutAddMenuEntry("FLUORINE", 9);
glutAddMenuEntry("NEON", 10);
mainmenu = glutCreateMenu(menu);
glutAddSubMenu("SELECT THE ELEMENT", submenu);
glutAddMenuEntry("START SIMULATION", 11);
glutAddMenuEntry("STOP SIMULATION", 12);
glutAddMenuEntry("GOTO HOME SCREEN",14);
glutAddMenuEntry("EXIT", 13);
glutAttachMenu(GLUT_RIGHT_BUTTON);
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitWindowPosition(100, 100);
glutInitWindowSize(700, 700);
glutCreateWindow("ATOM SIMULATION");
init();
glutDisplayFunc(display);
glutMouseFunc(mouseControl);
glutKeyboardFunc(keyboard);
glutSpecialFunc(fkey);
createMenu();
glutMainLoop();
return 0;
}
如何显示输出?应该更正什么?
1条答案
按热度按时间7rtdyuoh1#
你从来没有真正清除帧缓冲区。你只设置了清晰的颜色,但这就像把刷子浸入一桶油漆,而不是去粉刷墙壁。
按如下方式更改显示功能: