OpenGL

来源:互联网 发布:淘宝toto真假 编辑:程序博客网 时间:2024/06/16 04:15

这个是书上的代码,就是一个茶壶加上光照。以后学深了再补。


运行效果:
这里写图片描述


代码如下:

#include<cstdio>#include<GL\glut.h>#include<Windows.h>#include<algorithm>using namespace std;void init(){    GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };    GLfloat mat_shininess[] = { 50.0 };    GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };    GLfloat white_light[] = { 1.0, 1.0, 1.0, 1.0 };    GLfloat Light_Model_Ambient[] = { 0.2, 0.2, 0.2, 1.0 };    glClearColor(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, Light_Model_Ambient);    glEnable(GL_LIGHTING);    glEnable(GL_LIGHT0);    glEnable(GL_DEPTH_TEST);}void display(){    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    glutSolidTeapot(0.8);    glFlush();}void reshape(int w, int h){    glViewport(0, 0, w, h);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    if (w <= h)        glOrtho(-1.5, 1.5, -1.5*h / w, 1.5*h / w, -10, 10);    else        glOrtho(-1.5*w / h, 1.5*w / h, -1.5, 1.5, -10, 10);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();}void initWindow(int &argc, char *argv[], int width, int height, char *title){    glutInit(&argc, argv);    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);    glutInitWindowPosition((GetSystemMetrics(SM_CXSCREEN) - width) >> 1, (GetSystemMetrics(SM_CYSCREEN) - height) >> 1);       //指定窗口位置    glutInitWindowSize(width, height);       //指定窗口大小    glutCreateWindow(title);}int main(int argc,char** argv){    initWindow(argc, argv, 1000, 500, "光照实验");    init();    glutDisplayFunc(display);    glutReshapeFunc(reshape);    glutMainLoop();    return 0;}
原创粉丝点击