week10電腦圖學
##week10-0_sample
0.安裝freeglut, 改libfreeglut.a複製成libglut32.a
1.File-New-Project ,GLUT專案,week10-0_sample
##week10-1_TRT_glutSolidCube_myBody_myArm
1.File-New-Project ,GLUT專案,week10-1_TRT_glutSolidCube_myBody_myArm
2.貼上上週的week09-2的程式
3.藥用glutSolidCube(0.3)用兩次,紅色的身體,綠色手臂
目標:用方塊,放到void myBody() 函式裡
- 把身體的程式,放到void myBody()函示
- 把手臂的程式,放到void myArm()函示
#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();
}
##week10-2_TRT_glutIdleFunc_rotate
1.File-New-Project ,GLUT專案,week10-2_TRT_glutIdleFunc_rotate
2.貼上week10-1的程式
3.加上float angle=0; 加上glRotatef(angle++,0,0,1); glutIdelFunc(display);
#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);
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-3_TRT_glRotatef_glTranslatef:
貼上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();
}
1.File-New-Project ,GLUT專案,week10-5_TRT_two_layers
2.貼上week10-4程式
3.在畫手臂的下一行
#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();
##week10-6_TRT_left_right
1.File-New-Project ,GLUT專案,week10-6_TRT_left_right
2.貼上week10-5的程式
沒有留言:
張貼留言