先用第五周的程式碼
#include <GL/glut.h>
#include <stdio.h>
float vx[2000],vy[2000];//準備很多頂點 畫圖用的
int N=0;//N個頂點
void display(){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_LINE_LOOP);
for(int i=0;i<N;i++){
glVertex2f(vx[i],vy[i]);
}
glEnd();
glutSwapBuffers();
}
void mouse_event(int button,int state,int x,int y){
}
void motion(int x,int y){
printf("%d %d\n",x,y);//紀錄頂點
vx[N]=(x-150)/150.0;
vy[N]=-(y-150)/150.0;
N++;//做完N++後會去做display
display();
}
int main(int argc,char**argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("08160723week05");
glutDisplayFunc(display);//等一下顯示的函式
glutMotionFunc(motion);//mouse motion拖曳or->在畫
glutMainLoop();
}
改成
#include <GL/glut.h>
#include <stdio.h>
float vx[2000],vy[2000];//準備很多頂點 畫圖用的
int N=0;//N個頂點
void display(){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_LINE_LOOP);
for(int i=0;i<N;i++){
glVertex2f(vx[i],vy[i]);
}
glEnd();
glutSwapBuffers();
}
void mouse_event(int button,int state,int x,int y){
}
void motion(int x,int y){
printf("%d %d\n",x,y);//紀錄頂點
vx[N]=(x-150)/150.0;
vy[N]=-(y-150)/150.0;
N++;//做完N++後會去做display
display();
}
int main(int argc,char**argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("08160723week06");
glutDisplayFunc(display);//按下去彈起來
glutMotionFunc(motion);//mouse motion拖曳or->在畫
glutMainLoop();
}
進行縮減
#include <GL/glut.h>
float angle=0;
void display(){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();//備份矩陣
glRotatef(angle++,0,0,1);//轉動angle每次做就angle++
glutSolidCube(1);//方形
glPopMatrix();//還原矩陣
glutSwapBuffers();
}
int main(int argc,char**argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("08160723week06");
glutIdleFunc(display);//一直畫
glutDisplayFunc(display);//等一下顯示的函式
glutMainLoop();
}
再修改
#include <GL/glut.h>
float angle=0;
void display(){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();//備份矩陣
//glTranslatef(0,0,0);//把正確轉動的手臂掛在肩上
//glRotatef(angle++,0,0,1);//轉動angle每次做就angle++
glTranslatef(-0.25,0,0);//將旋轉中心放在正中央
glScalef(0.5,0.1,0.1);//調大小變細長
glutSolidCube(1);//方形
glPopMatrix();//還原矩陣
glutSwapBuffers();
}
int main(int argc,char**argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("08160723week06");
glutIdleFunc(display);//一直畫
glutDisplayFunc(display);//等一下顯示的函式
glutMainLoop();
}
#include <GL/glut.h>
float angle=0;
void hand()
{
glPushMatrix();
glScalef(0.5,0.1,0.1);//細細長長的
glutSolidCube(1);//方塊
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(-0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(-0.25,0,0);
hand();//上手臂
glPushMatrix();//備份矩陣
glTranslatef(-0.25,0,0);//把正確轉動的手臂掛在肩上
glRotatef(angle,0,0,1);//轉動angle每次做就angle++
glTranslatef(-0.25,0,0);//將旋轉中心放在正中央
hand();//下手肘
glPopMatrix();//還原矩陣
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc,char**argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("08160723week06");
glutIdleFunc(display);//一直畫
glutDisplayFunc(display);//等一下顯示的函式
glutMainLoop();
}
#include <GL/glut.h>
float angle=0;
void hand()
{
glPushMatrix();
glScalef(0.5,0.1,0.1);//細細長長的
glutSolidCube(1);//方塊
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();//左半邊
glTranslatef(-0.25,0,0);//手臂掛上肩關節
glRotatef(angle,0,0,1);//轉動
glTranslatef(-0.25,0,0);//將旋轉中心放在正中央
hand();//上手臂
glPushMatrix();//備份矩陣
glTranslatef(-0.25,0,0);//把正確轉動的手臂掛在肩上
glRotatef(angle,0,0,1);//轉動angle每次做就angle++
glTranslatef(-0.25,0,0);//將旋轉中心放在正中央
hand();//下手肘
glPopMatrix();//還原矩陣
glPopMatrix();
glPushMatrix();//右半邊
glTranslatef(+0.25,0,0);//手臂掛上肩關節
glRotatef(-angle,0,0,1);//轉動
glTranslatef(+0.25,0,0);//轉動
hand();//上手臂
glPushMatrix();//備份矩陣
glTranslatef(+0.25,0,0);//把正確轉動的手臂掛在肩上
glRotatef(-angle,0,0,1);//轉動angle每次做就angle++
glTranslatef(+0.25,0,0);//將旋轉中心放在正中央
hand();//下手肘
glPopMatrix();//還原矩陣
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc,char**argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("08160723week06");
glutIdleFunc(display);//一直畫
glutDisplayFunc(display);//等一下顯示的函式
glutMainLoop();
}





沒有留言:
張貼留言