人物往右下移動,中心是人物本身,因此旋轉時是自轉
中心在視窗正中間,人物像公轉一樣,繞著中心轉
先畫一個茶壺並打光
茶壺以視窗中間點為中心公轉T:右邊茶壺掛到中間茶壺(旋轉中心)
R:旋轉
T:右邊的茶壺依照中心點旋轉
Teap():右邊的茶壺
Teap():中間的茶壺
程式碼:
#include <GL/glut.h>float angle=0, oldX=0, oldY=0;
void drawArm()
{
glPushMatrix();
glScalef(0.5, 0.15, 0.15);
glutSolidCube(1);
glPopMatrix();
}
void drawBody()
{
glPushMatrix();
glTranslatef(0, -0.5, 0);///將身體往下移0.5
glRotatef(-90, 1, 0, 0);
glutSolidCone(0.3, 0.8, 30, 30);
glPopMatrix();
}
void display()
{
{///打光的程式6行
GLfloat pos[]= {0.0, 0.0, -1.0, 0.0};
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
glPushMatrix();
glTranslatef(0.15, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
drawArm();///右手1
glPushMatrix();
glTranslatef(0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
drawArm();///右手2
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.15, 0, 0);
glRotatef(-angle, 0, 0, 1);
glTranslatef(-0.25, 0, 0);
drawArm();///左手1
glPushMatrix();
glTranslatef(-0.25, 0, 0);
glRotatef(-angle, 0, 0, 1);
glTranslatef(-0.25, 0, 0);
drawArm();///左手2
glPopMatrix();
glPopMatrix();
drawBody();
glFlush();
}
void timer (int t)
{
glutTimerFunc(20, timer, 0);
//angle++;
glutPostRedisplay();
}
void mouse(int button, int state, int x, int y)///滑鼠
{
if(state==GLUT_DOWN)
{
oldX=x; oldY=y;
}
}
void motion(int x, int y)///移動
{
angle+= ( x-oldX );
oldX= x;
}
int main(int argc, char**argv)///主程式
{
glutInit(&argc, argv);
glutCreateWindow("TRT 3D");
glutDisplayFunc(display);
glutTimerFunc(20, timer, 0);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
沒有留言:
張貼留言