week06
轉手
開啟GLUT專案
複製上週的程式week05-2
旋轉茶壺
week06-1
*讓茶壺繞著中心點旋轉
glutSolidSphere加入白色小圓點
#include <GL/glut.h>
float angle = 0;
void myCube()
{
glPushMatrix();
glScalef(0.5, 0.2, 0.2);
glutSolidCube(1);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.01, 30, 30);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
glTranslatef(0.45, 0, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char* argv[] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week06");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
旋轉茶壺2
week06-2
*移到其他地方轉
glTranslatef(0.5, 0.5, 0);茶壺往右上角移動0.5
#include <GL/glut.h>
float angle = 0;
void myCube()
{
glPushMatrix();
glScalef(0.5, 0.2, 0.2);
glutSolidCube(1);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.01, 30, 30);
glPushMatrix();
glTranslatef(0.5, 0.5, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.45, 0, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char* argv[] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week06");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
長方形
*先畫出一個長方形
week06-3
*中心點在長方形裡面
#include <GL/glut.h>
float angle = 0;
void myCube()
{
glPushMatrix();
glScalef(1, 0.3, 0.3);
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.01, 30, 30);
glPushMatrix();
///glTranslatef(0.5, 0.5, 0);
///glRotatef(angle, 0, 0, 1);
///glTranslatef(0.45, 0, 0);
myCube();
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char* argv[] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week06");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
week06-4
*中心點在旁邊
#include <GL/glut.h>
float angle = 0;
void myCube()
{
glPushMatrix();
glScalef(1, 0.3, 0.3);///大小
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.01, 30, 30);
glPushMatrix();
glTranslatef(0.25, 0, 0);///決定掛在哪裡
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
myCube();
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char* argv[] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week06");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
雙節棍
week06-5
再畫出另一個長方形
#include <GL/glut.h>
float angle = 0;
void myCube()
{
glPushMatrix();
glScalef(1, 0.3, 0.3);
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.01, 30, 30);
glPushMatrix();
glTranslatef(0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
myCube();
glPushMatrix();
glTranslatef(0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
myCube();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char* argv[] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week06");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
兩隻手
week06-6
*左右各有兩個旋轉的手
#include <GL/glut.h>
float angle = 0;
void myCube()
{
glPushMatrix();
glScalef(1, 0.3, 0.3);///大小
glutSolidCube(0.5);///正方塊
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.01, 30, 30);
glPushMatrix();///右邊的
glTranslatef(0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
myCube();///上手臂
glPushMatrix();
glTranslatef(0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
myCube();///下手肘
glPopMatrix();
glPopMatrix();
glPushMatrix();///左邊的
glTranslatef(-0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(-0.25, 0, 0);
myCube();///上手臂
glPushMatrix();
glTranslatef(-0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(-0.25, 0, 0);
myCube();///下手肘
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char* argv[] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week06");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
用滑鼠轉
week06-7
*利用滑鼠做旋轉
#include <GL/glut.h>
float angle = 0;
void myCube()
{
glPushMatrix();
glScalef(1, 0.3, 0.3);
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.01, 30, 30);
glPushMatrix();
glTranslatef(0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
myCube();
glPushMatrix();
glTranslatef(0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
myCube();
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.25, 0, 0);
glRotatef(angle, 0, 0, 1);///如果是-angle可以變成同手
glTranslatef(-0.25, 0, 0);
myCube();///上手臂
glPushMatrix();
glTranslatef(-0.25, 0, 0);
glRotatef(angle, 0, 0, 1);///如果是-angle可以變成同手
glTranslatef(-0.25, 0, 0);
myCube();///下手肘
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
///angle++;
}
void motion(int x, int y)
{
angle = x;
}
int main(int argc, char* argv[] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week06");
glutMotionFunc(motion);///新加的
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
///程式練習 https://jsyeh.org/gl









沒有留言:
張貼留言