沿用上週
#include <GL/glut.h>
#include <stdio.h>
float vx[2000], vy[2000];///準備一堆頂點,等一下要畫!!介於-1~+1
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(int buttin, 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++;
display();
}///減一半,再減一半,y加負號
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutDisplayFunc(display);//display顯示涵式
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();//準備mouse motion 移動時的涵式
}
#include <stdio.h>
float vx[2000], vy[2000];///準備一堆頂點,等一下要畫!!介於-1~+1
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(int buttin, 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++;
display();
}///減一半,再減一半,y加負號
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutDisplayFunc(display);//display顯示涵式
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();//準備mouse motion 移動時的涵式
}
(執行如下圖)
#include <GL/glut.h>
float angle=0;
int N=0,vx[3000], vy[3000];
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清空
glPushMatrix();///備份矩陣
glRotatef(angle,0,0,1);///旋轉
glScalef(0.5,0.1,0.1);///調成細長的
glColor3f(0.3,0.3,1.0);///藍藍的
glutSolidCube(1);///方塊
glPopMatrix();///還原矩陣
glutSwapBuffers();
}
void motion (int x,int y)
{
angle++;
display();///增加後,重畫畫面
}
void keyboard(unsigned char key,int x, int y)
{
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutDisplayFunc(display);//display顯示涵式
///glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
glutMotionFunc(motion);
glutMainLoop();//準備mouse motion 移動時的涵式
}
(執行如下圖)
接著我們來試看看讓他自己轉動
可以先把細長的長方型,暫時變回正方形
#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
glColor3f(0.3,0.3,1.0);///藍藍的
glutSolidCube(1);///方塊
glPopMatrix();///還原矩陣
glutSwapBuffers();
}
void motion (int x,int y)
{
angle++;
display();///增加後,重畫畫面
}
void keyboard(unsigned char key,int x, int y)
{
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutIdleFunc(display);///idle很閒的時候,就重畫
glutDisplayFunc(display);//display顯示涵式
///glutMouseFunc(mouse);
glutMainLoop();//準備mouse motion 移動時的涵式
}
(執行如下圖)
這個步驟是來做一個手臂
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清空
glPushMatrix();///備份矩陣
glColor3f(0.3,0.3,1.0);///藍藍的
///glTranslatef(0,0,0);///把正確轉動的手臂,掛在肩上
///glRotatef(angle++,0,0,1);///(2)轉動
glTranslatef(-0.25,0,0);///(1)將旋轉中心,放在中心
glScalef(0.5,0.1,0.1);///細細長長的
glutSolidCube(1);///方塊
glPopMatrix();///還原矩陣
glutSwapBuffers();
}
void motion (int x,int y)
{
angle++;
display();///增加後,重畫畫面
}
void keyboard(unsigned char key,int x, int y)
{
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutIdleFunc(display);///idle很閒的時候,就重畫
glutDisplayFunc(display);//display顯示涵式
///glutMouseFunc(mouse);
glutMainLoop();//準備mouse motion 移動時的涵式
}
(執行如下圖)
做出一隻有關節的手臂
#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);///(2)轉動
glTranslatef(-0.25,0,0);///(1)將旋轉中心,放在中心
hand();
glPopMatrix();///還原矩陣
hand();
glutSwapBuffers();
}
void motion (int x,int y)
{
angle++;
display();///增加後,重畫畫面
}
void keyboard(unsigned char key,int x, int y)
{
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutIdleFunc(display);///idle很閒的時候,就重畫
glutDisplayFunc(display);//display顯示涵式
///glutMouseFunc(mouse);
glutMainLoop();//準備mouse motion 移動時的涵式
}
(執行如下圖)
做出一隻可以轉動還有關節的手臂
#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);///(2)轉動
glTranslatef(-0.25,0,0);///(1)將旋轉中心,放在正中心
hand();///上手臂
glPushMatrix();
glTranslatef(-0.25,0,0);///(3)把正確轉動的手肘,掛在肘關節
glRotatef(angle,0,0,1);///(2)轉動
glTranslatef(-0.25,0,0);///(1)將旋轉中心,放在正中心
hand();
glPopMatrix();
glPopMatrix();///還原矩陣
glutSwapBuffers();
angle++;
}
void motion (int x,int y)
{
angle++;
display();///增加後,重畫畫面
}
void keyboard(unsigned char key,int x, int y)
{
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutIdleFunc(display);///idle很閒的時候,就重畫
glutDisplayFunc(display);//display顯示涵式
///glutMouseFunc(mouse);
glutMainLoop();//準備mouse motion 移動時的涵式
}
(執行如下圖)
來做左右手~
#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);///(3)手臂,掛在肩上
glRotatef(angle,0,0,1);///(2)轉動
glTranslatef(-0.25,0,0);///(1)將旋轉中心,放在正中心
hand();///上手臂
glPushMatrix();
glTranslatef(-0.25,0,0);///(3)把正確轉動的手肘,掛在肘關節
glRotatef(angle,0,0,1);///(2)轉動
glTranslatef(-0.25,0,0);///(1)將旋轉中心,放在正中心
hand();///下手肘
glPopMatrix();
glPopMatrix();
glPushMatrix();///右半邊
glTranslatef(+0.25,0,0);///手臂,掛在肩上
glRotatef(-angle,0,0,1);///(2)轉動
glTranslatef(+0.25,0,0);///(1)將旋轉中心,放在正中心
hand();///上手臂
glPushMatrix();
glTranslatef(+0.25,0,0);(3)把正確轉動的手肘,掛在肘關節
glRotatef(-angle,0,0,1);(2)轉動
glTranslatef(+0.25,0,0);(1)將旋轉中心,放在正中心
hand();///下手肘
glPopMatrix();
glPopMatrix();///還原矩陣
glutSwapBuffers();
angle++;
}
void motion (int x,int y)
{
angle++;
display();///增加後,重畫畫面
}
void keyboard(unsigned char key,int x, int y)
{
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160520石雅慈"); //(視窗的名稱)
glutIdleFunc(display);///idle很閒的時候,就重畫
glutDisplayFunc(display);//display顯示涵式
///glutMouseFunc(mouse);
glutMainLoop();//準備mouse motion 移動時的涵式
}
(執行如下圖)







沒有留言:
張貼留言