2020年4月21日 星期二

翰翰的日記8

我應該是第8周
首先改了甜甜圈的厚度:
glutSolidTorus(厚度,0.8,slices,stacks);
改這行程式碼就變這樣
Sphere:圓形
Cone:圓錐
Torus:甜甜圈狀
再來再來:
會旋轉的長方體
#include <Gl/glut.h>
void upper_arm()
{
    glPushMatrix();
    glScalef(1,03.,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glRotatef(angle, 0,0,1);
    upper_arm();
    glPopMatrix();
    angle++;
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();

}
會繞著中心點旋轉的長方體多家一行程式碼
#include <Gl/glut.h>
void upper_arm()
{
    glPushMatrix();
    glScalef(1,0.3,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glRotatef(angle, 0,0,1);
    glTranslatef(0.25, 0, 0);//就這行會移動的
    upper_arm();
    glPopMatrix();
    angle++;
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}
結果如圖:
接下來老師在講考試的東西
#include <Gl/glut.h>
void upper_arm()
{
    glPushMatrix();
    glScalef(1,0.3,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glTranslatef(0.5, 0.5, 0);//把下面正在以手肘為中心,轉動的手,掛到右上角去
    glRotatef(angle, 0,0,1);//對z軸旋///再對正中心做轉動,讓手肘好像時針一樣,掛在中心轉
    glTranslatef(0.25,0,0);//把手肘(旋轉中心)放到畫面正中心
    upper_arm();畫手
    glPopMatrix();
    angle++;
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}
老師之後又講了機器人手臂
#include <Gl/glut.h>
void arm()
{
    glPushMatrix();
    glScalef(1,0.3,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glTranslatef(0.2, 0, 0);
    glRotatef(angle, 0,0,1);
    glTranslatef(0.25,0,0);
    glColor3f(1,0,0);arm();

    glPushMatrix();
    glTranslatef(0.25, 0, 0);
    glRotatef(angle, 0,0,1);
    glTranslatef(0.25,0,0);
    glColor3f(1,1,0);arm();
    glPopMatrix();
    glPopMatrix();

    glPushMatrix();
    glTranslatef(-0.2, 0, 0);
    glRotatef(-angle, 0,0,1);
    glTranslatef(-0.25,0,0);
    glColor3f(1,0,0);arm();

    glPushMatrix();
    glTranslatef(-0.25, 0, 0);
    glRotatef(-angle, 0,0,1);
    glTranslatef(-0.25,0,0);
    glColor3f(1,1,0);arm();
    glPopMatrix();
    glPopMatrix();


   /// upper_arm();
    ///glPopMatrix();
    angle++;
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}
以下為說明與結果
上圖的機器手會繞圈圈
但我們讓他在某個地方就停下來
所以得新增加下列程式碼:
#include <Gl/glut.h>
void arm()
{
    glPushMatrix();
    glScalef(1,0.3,0.3);
    glutSolidCube(0.5);
    glPopMatrix();
}
float angle=0;
int dx;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glTranslatef(0.2, 0, 0);
    glRotatef(angle, 0,0,1);
    glTranslatef(0.25,0,0);
    glColor3f(1,0,0);arm();

    glPushMatrix();
    glTranslatef(0.25, 0, 0);
    glRotatef(angle, 0,0,1);
    glTranslatef(0.25,0,0);
    glColor3f(1,1,0);arm();
    glPopMatrix();
    glPopMatrix();

    glPushMatrix();
    glTranslatef(-0.2, 0, 0);
    glRotatef(-angle, 0,0,1);
    glTranslatef(-0.25,0,0);
    glColor3f(1,0,0);arm();

    glPushMatrix();
    glTranslatef(-0.25, 0, 0);
    glRotatef(-angle, 0,0,1);
    glTranslatef(-0.25,0,0);
    glColor3f(1,1,0);arm();
    glPopMatrix();
    glPopMatrix();


   /// upper_arm();
    ///glPopMatrix();
    angle+=dx;
    if(angle>60) dx=-1;
    if(angle<10) dx=+1;
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}
手就會打開又在合起來了










沒有留言:

張貼留言