绘制球体

#include <GL/glut.h> 
#include<stdio.h>
#include <math.h>






void cube(){
glClear(GL_COLOR_BUFFER_BIT);
glutWireSphere(1,100,100);
//glutSolidSphere(1,100,100);
glFlush();

}


void init (void)

{

    glClearColor (0.0, 0.0, 0.0, 0.0); 

    glMatrixMode (GL_PROJECTION);      

    glOrtho (-1,1,-1,1,-1,1);

}

 


void main (int argc, char** argv)

{

    glutInit (&argc, argv);                        

       glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); 

    glutInitWindowPosition (100, 100);  

    glutInitWindowSize (480, 480);     

    glutCreateWindow("一个圆");
	init();                           

    glutDisplayFunc (cube);      

    glutMainLoop ( );                  

}


另外由于glOrtho的参数分别是左右下上前后,但是看opengl坐标系的话发现前面应该是正哈,但是细细深究就会发现摄像机的镜头其实是朝向z轴负方向的。

添加了光照效果的

#include <GL/glut.h>

void init(void)

{

    GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0};

    GLfloat mat_shininess[] = {50.0};

    GLfloat light_position[] = {1.0, 1.0f, 1.0, 0.0};

    GLfloat white_light[] = {1.0, 1.0, 1.0, 1.0};

    GLfloat lmodel_ambient[] = {0.1, 0.1, 0.1, 1.0};

    glClearColor(0.0, 0.0, 0.0, 0.0);

    glShadeModel(GL_SMOOTH);

    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light);

    glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);

    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);

    glEnable(GL_LIGHTING);

    glEnable(GL_LIGHT0);

    glEnable(GL_DEPTH_TEST);

   

}

void display(void)

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidSphere(1.0, 20, 16);

    glFlush();

}

void reshape(int w, int h)

{

    glViewport(0, 0, (GLsizei)w, (GLsizei)h);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    if (w <= h)

        glOrtho(-1.5, 1.5, -1.5 * (GLfloat)h/(GLfloat)w, 1.5 * (GLfloat)h/(GLfloat)w, -10.0, 10.0);

    else

        glOrtho(-1.5*(GLfloat)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

}

int main(int argc, char **argv)

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

    glutInitWindowSize(500, 500);

    glutInitWindowPosition(100, 100);

    glutCreateWindow(argv[0]);

    init();

    glutDisplayFunc(display);

    glutReshapeFunc(reshape);

    glutMainLoop();

    return 0;

}


你可能感兴趣的:(OpenGL)