2020年4月7日 星期二

week05_light

#include <cstdio>
#include <GL/glut.h>
float X=0,Y=0;
int x=0,y=0;
float R=0,RC=0;
int tpye=0;
int OX=0;
float big=0.3;
void b(int a,int b,int c,int d )
{
    if(a==2)
    {
    tpye=1;
    printf("%d\n",tpye);
    }
    else{
            tpye=0;
    x=c;
    y=d;}
    if(a==3&&big>0.05){printf("%g\n",big);


            big-=0.05;
            glutPostRedisplay();}

    if(a==4&&big<0.95){big+=0.05;glutPostRedisplay();}
    printf("%d %d %d %d \n",a,b,c,d);
}
void c(int a,int b)
{
    if(tpye==1)
    {
        R+=a-x;
        x=a;
        glutPostRedisplay();
    }
    else
    {
    X+=a-x;
    Y-=b-y;
    x=a;
    y=b;
    OX+=a-x;
    printf("%d %d %d\n",x,y,OX);
    glutPostRedisplay();
    }
}
void a()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();

    glTranslatef(X/250.0,Y/250.0,0);
    glRotated(R,RC,-1,0);
    glutSolidTeapot(big);///由上往下
    glPopMatrix();
    glutSwapBuffers();
}
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };

const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };


int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(500,500);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT Shapes");

    glutDisplayFunc(a);
glutMotionFunc(c);
glutMouseFunc(b);
 glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    glutMainLoop();

    return EXIT_SUCCESS;
}
看得懂算你厲害

沒有留言:

張貼留言