一.上週作業
(1)開起自己的檔案
(2)並用NotePad++開啟,把include和lib目錄設對,working目錄設"."(句點)
二.讓機器人動
三.Timer計時器
#include <stdio.h>
void timer(int t)
{
printf("我現在起床了,t是%d...",t);
glutTimerFunc(100,timer,t+1);
printf("我撥了一個新的timer...");
angle++;
glutPostRedisplay();
printf("記得重畫畫面喔!我睡了,bye\n");
}
glutTimerFunc(2000,timer,0); ///睡前,先設定一個鬧鐘,2秒後會叫
四.鍵盤滑鼠控制
#include <string.h>
#include <stdlib.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel = NULL;
float angle[20]={}; ///全家都是零
int now=0;
void drawhead()
{
glPushMatrix();//head
glTranslatef(0,0.75,0);
glRotatef(0,0,0,0);
glScalef(0.25,0.25,0.25);
glmDraw(pmodel, GLM_SMOOTH |GLM_MATERIAL );
glPopMatrix();
}
void drawbody()
{
glPushMatrix();//body
glTranslatef(0,0.12,0);
glRotatef(0,0,0,0);
glScalef(0.2,0.5,0.2);
glmDraw(pmodel, GLM_SMOOTH |GLM_MATERIAL );
glPopMatrix();
}
void drawRighthand0()
{
glPushMatrix();//right hand
glTranslatef(0.28,0.35,0);
glRotatef(45,0,0,1);
glScalef(0.1,0.2,0.1);
glmDraw(pmodel, GLM_SMOOTH |GLM_MATERIAL );
glPopMatrix();
}
void drawRighthand1()
{
glPushMatrix();//right hand
glTranslatef(0.55,0.08,0);
glRotatef(45,0,0,1);
glScalef(0.1,0.2,0.1);
glmDraw(pmodel, GLM_SMOOTH |GLM_MATERIAL );
glPopMatrix();
}
void drawLefthand0()
{
glPushMatrix();//left hand
glTranslatef(-0.28,0.35,0);
glRotatef(-45,0,0,1);
glScalef(0.1,0.2,0.1);
glmDraw(pmodel, GLM_SMOOTH |GLM_MATERIAL );
glPopMatrix();
}
void drawLefthand1()
{
glPushMatrix();//left hand
glTranslatef(-0.55,0.08,0);
glRotatef(-45,0,0,1);
glScalef(0.1,0.2,0.1);
glmDraw(pmodel, GLM_SMOOTH |GLM_MATERIAL );
glPopMatrix();
}
void drawRightleg0()
{
glPushMatrix();//right leg
glTranslatef(0.17,-0.45,0);
glRotatef(20,0,0,1);
glScalef(0.1,0.2,0.1);
glmDraw(pmodel, GLM_SMOOTH |GLM_MATERIAL );
glPopMatrix();
}
void drawRightleg1()
{
glPushMatrix();//right leg
glTranslatef(0.3,-0.8,0);
glRotatef(20,0,0,1);
glScalef(0.1,0.2,0.1);
glmDraw(pmodel, GLM_SMOOTH |GLM_MATERIAL );
glPopMatrix();
}
void drawLeftleg0()
{
glPushMatrix();//left leg
glTranslatef(-0.17,-0.45,0);
glRotatef(-20,0,0,1);
glScalef(0.1,0.2,0.1);
glmDraw(pmodel, GLM_SMOOTH |GLM_MATERIAL );
glPopMatrix();
}
void drawLeftleg1()
{
glPushMatrix();//left leg
glTranslatef(-0.3,-0.8,0);
glRotatef(-20,0,0,1);
glScalef(0.1,0.2,0.1);
glmDraw(pmodel, GLM_SMOOTH |GLM_MATERIAL );
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
//angle++;
//glRotatef(angle, 0,1,0);
if (!pmodel) {
pmodel = glmReadOBJ("data/soccerball.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}
glPushMatrix();
glutSolidTeapot(0.1);
glTranslatef(-0.18,0.45,0);///(3)最後,把它掛在對的位置//left hand
glRotatef(angle[0],0,0,1); ///(1)先轉動
glTranslatef(0.18,-0.45,0); ///(2)把旋轉中心點放到真的中心點
drawLefthand0();
//glTranslatef(-0.18,0.45,0);//right hand
glRotatef(angle[1],0,0,1);
glTranslatef(0.18,-0.45,0);
drawLefthand1();
glPopMatrix();
drawhead();
//drawbody();
drawRighthand0();
drawRighthand1();
//drawLefthand0();
//drawLefthand1();
drawRightleg0();
drawRightleg1();
drawLeftleg0();
drawLeftleg1();
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 };
#include <stdio.h>
void timer(int t)
{
printf("我現在起床了,t是%d...",t);
glutTimerFunc(100,timer,t+1);
printf("我撥了一個新的timer...");
//angle++;
//glutPostRedisplay();
printf("記得重畫畫面喔!我睡了,bye\n");
}
int oldX=0, oldY=0;
void Keyboard(unsigned char key,int x, int y)
{
if(key=='0') now=0;
if(key=='1') now=1;
if(key=='2') now=2;
}
void mouse(int button,int state, int x,int y)
{
oldX=x;oldY=y;
glutPostRedisplay();
}
void motion(int x,int y)
{
angle[now]+=(x-oldX);
oldX=x;
glutPostRedisplay();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
glutCreateWindow("Yes, 3D Model Here");
glutDisplayFunc(display);
///glutIdleFunc(display);
///glutTimerFunc(2000,timer,0); ///睡前,先設定一個鬧鐘,2秒後會叫
glutKeyboardFunc(Keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glClearColor(1,1,1,1);
//glEnable(GL_CULL_FACE);
//glCullFace(GL_BACK);
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();
}



沒有留言:
張貼留言