2021年6月16日 星期三

林裕宸電腦圖學week17

利用滑鼠位置變化使目標達成位移效果 

#include <GL/glut.h>

float angle=90;

float oldX=0;

void mouse(int button, int state, int x, int y){

    oldX = x;

}

void motion( int x, int y ){

    angle += x-oldX;

    oldX = x;

    glutPostRedisplay();///重畫畫面

}

void display(){

    glClearColor( 1,0,0,0);///用來Clear的Color 用紅色

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glColor3f( 1,1,0 );

        glutSolidTeapot( 0.3 );///身體先註解掉身體,只看手臂

        glPushMatrix();

            glTranslatef(-.3, 0, 0);///(3)再把轉動中的手臂,掛到肩上

            glRotatef(angle, 0,0,1);///(2)再轉動它

            glTranslatef(-.3, .1, 0);///(1)移動旋轉中心,放正中心

            glutSolidTeapot(0.3);///左手臂

        glPopMatrix();

    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(300,300);

    glutInitWindowPosition(700,200);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week17 review");


    glutMouseFunc(mouse);

    glutMotionFunc(motion);

    glutDisplayFunc(display);


    glEnable(GL_DEPTH_TEST);

    glDepthFunc(GL_LESS);


    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();

}


沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...