今天知道了GLUT的基本形狀
glutSolidSphere(1,slices,stacks);///實心圓形
glutSolidCone(1,1,slices,stacks);///實心甜筒
glutSolidTorus(0.2,0.8,slices,stacks);///實心甜甜圈
glutWireSphere(1,slices,stacks);///空心的圓形
---------------------------------------------------------------------------------------------
機器人手臂
先用cube做出上手臂,然後讓他轉動
#include <GL/glut.h>
void upperarm(){
glPushMatrix();///備份
glScalef(1,0.3,0.3);///x不變,y,z都變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);///對z軸旋轉
upperarm();///呼叫函式
glPopMatrix();
angle++;
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("wk9");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
上一個程式是以中心點做旋轉。
為了要讓手臂可以在對的點來旋轉,
在Rotate後面加入glTranslatef(0.25,0,0);,
讓他可以正確地轉動
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);
upperarm();
glPopMatrix();
angle++;
glutSwapBuffers();
}
移動手臂到右上角
float angle=0;
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.45,0.45,0);///把手臂掛到到右上角
glRotatef(angle,0,0,1):
glTranslatef(0.3,0,0);
upperarm();
glPopMatrix();
angle++;
glutSwapBuffers();
}
做出完整的手臂並做出兩隻手
前臂跟著上臂旋轉,並自己再旋轉
float angle=0;
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///Right upper arm
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
glColor3f(1,0,0);
arm();
glPushMatrix();///Right lower arm
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
glColor3f(1,1,0);
arm();
glPopMatrix();
glPopMatrix();
glPushMatrix();///Left upper arm
glTranslatef(-0.2,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0,0);
glColor3f(1,0,0);
arm();
glPushMatrix();///Left lower arm
glTranslatef(-0.2,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0,0);
glColor3f(1,1,0);
arm();
glPopMatrix();
glPopMatrix();
angle++;
glutSwapBuffers();
}
float angle=0,dx=1;
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///Right upper arm
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
glColor3f(1,0,0);
arm();
glPushMatrix();///Right lower arm
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
glColor3f(1,1,0);
arm();
glPopMatrix();
glPopMatrix();
glPushMatrix();///Left upper arm
glTranslatef(-0.2,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0,0);
glColor3f(1,0,0);
arm();
glPushMatrix();///Left lower arm
glTranslatef(-0.2,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0,0);
glColor3f(1,1,0);
arm();
glPopMatrix();
glPopMatrix();
angle+=dx;
if(angle>60) dx=-1;
if(angle<0) dx=+1;
glutSwapBuffers();
}
讓手臂可以以正常的方式來動
float angle=0,dx=1;
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///Right upper arm
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
glColor3f(1,0,0);
arm();
glPushMatrix();///Right lower arm
glTranslatef(0.2,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
glColor3f(1,1,0);
arm();
glPopMatrix();
glPopMatrix();
glPushMatrix();///Left upper arm
glTranslatef(-0.2,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0,0);
glColor3f(1,0,0);
arm();
glPushMatrix();///Left lower arm
glTranslatef(-0.2,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0,0);
glColor3f(1,1,0);
arm();
glPopMatrix();
glPopMatrix();
angle+=dx;
if(angle>60) dx=-1;
if(angle<0) dx=+1;
glutSwapBuffers();
}





沒有留言:
張貼留言