week10
4/22
week10-0_sample:
week10_TRT_glutSolidCube_myBody_myArm:
先複製上周week09-2的程式碼
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(-0.6,+0.3,0);
glutSolidTeapot(0.3);
glPopMatrix();
glPushMatrix();
glTranslatef(+0.0,+0.3,0);
glutSolidCube(0.3);
glPopMatrix();
glPushMatrix();
glTranslatef(+0.6,+0.3,0);
glutSolidSphere(0.3,30,30);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09-2 glutSolid¨t¦C");
glutDisplayFunc(display);
glutMainLoop();
}
要用glutSolidCube(0.3)用兩次
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(-0.6,+0.3,0);
glColor3f(1,0,0);
glutSolidCube(0.3);
glPopMatrix();
glPushMatrix();
glTranslatef(+0.0,+0.3,0);
glColor3f(0,1,0);
glScalef(1.5,0.5,0.5);
glutSolidCube(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09-2 glutSolid¨t¦C");
glutDisplayFunc(display);
glutMainLoop();
}
貼上week10-2的程式
在glRotatef()與myArm()中間新增一行glTranslate()移動旋轉中心
#include <GL/glut.h>
void myBody(){
glColor3f(1,0,0);
glutSolidCube(0.3);
}
void myArm(){
glColor3f(0,1,0);
glScalef(1.5,0.5,0.5);
glutSolidCube(0.3);
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(-0.6,+0.3,0);
myBody();
glPopMatrix();
glPushMatrix();
///glTranslatef(+0.0,+0.3,0);
glRotatef(angle++,0,0,1);
glTranslatef(0.225,0,0);///把移度中心做移動
myArm();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09-2 glutSolid¨t¦C");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
week10-4_TRT_glTranslatef_glRotatef_glTranslatef:
#include <GL/glut.h>
void myBody(){
glColor3f(1,0,0);
glutWireCube(0.6);///變空心
}
void myArm(){
glColor3f(0,1,0);
glScalef(1.5,0.5,0.5);
glutWireCube(0.3);///變空心
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
///glTranslatef(-0.6,+0.3,0);
myBody();
glPopMatrix();
glPushMatrix();
glTranslatef(+0.3,+0.3,0);
glRotatef(angle++,0,0,1);
glTranslatef(0.225,0,0);///把移度中心做移動
myArm();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09-2 glutSolid¨t¦C");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
把week10-2的中心點移到正方形中間
#include <GL/glut.h>
void myBody()
{
glColor3f(1,0,0);
glutWireCube(0.6);///變空心
}
void myArm()
{
glPushMatrix();///要加保護機制!!
glColor3f(0,1,0);
glScalef(1.5,0.5,0.5);
glutWireCube(0.3);///變空心
glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
///glTranslatef(-0.6,+0.3,0);
myBody();
glPopMatrix();
glPushMatrix();///右手上手臂
glTranslatef(+0.3,+0.3,0);///移動整個手臂
glRotatef(angle++,0,0,1);
glTranslatef(0.225,0,0);///把移度中心做移動
myArm();
glPushMatrix();///右手下手臂
glTranslatef(+0.225,0,0);///移動整個下手臂
glRotatef(angle++,0,0,1);
glTranslatef(0.225,0,0);///把移度中心做移動
myArm();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09-2 glutSolid¨t¦C");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
用滑鼠控制
#include <GL/glut.h>
void myBody(){
glColor3f(1,0,0);
glutWireCube( 0.6 );
}
void myArm(){
glPushMatrix();
glColor3f(0,1,0);
glScalef(1.5,0.5,0.5);
glutWireCube(0.3);
glPopMatrix();
}
float angle=0;///week10-2
void motion(int x, int y) {
angle = x;
glutPostRedisplay();///重畫畫面
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
///glTranslatef(-0.6, +0.3, 0);
myBody();
glPopMatrix();
glPushMatrix();
glTranslatef(+0.3, +0.3, 0);///掛在肩上
glRotatef(angle,0,0,1);///week10-2
glTranslatef(0.225,0,0);///把旋轉中心移到正中心
myArm();///右手臂
glPushMatrix();
glTranslatef(0.225,0, 0);///掛在手肘位置上
glRotatef(angle,0,0,1);///week10-2
glTranslatef(0.225,0,0);///把旋轉中心移到正中心
myArm();///右手肘
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.3, +0.3, 0);///掛在肩上
glRotatef(-angle,0,0,1);///week10-2
glTranslatef(-0.225,0,0);///把旋轉中心移到正中心
myArm();///左手臂
glPushMatrix();
glTranslatef(-0.225,0, 0);///掛在手肘位置上
glRotatef(-angle,0,0,1);///week10-2
glTranslatef(-0.225,0,0);///把旋轉中心移到正中心
myArm();///左手肘
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week09-2 glutSolid系列");
glutDisplayFunc(display);
glutIdleFunc(display);///week10-2
glutMotionFunc(motion);
glutMainLoop();
}

沒有留言:
張貼留言