在main()裡
#include <stdio.h>
void timer(int t)
{
glutTimerFunc(100,timer,t+1);
angle++;
glutPostRedisplay();
}
glutTimerFunc(2000,timer,0);

把函式拉出去
讓程式變清爽
drawBody()
drawArm0()
drawArm1()


例子:
void drawBody()
{
glPushMatrix( ); ///body
glTranslatef(0,0.1,0);///T
glRotatef(90,0,0,1);///R
glRotatef(90,0,1,0);
glRotatef(90,0,0,1);
glRotatef(180,1,0,0);
glTranslatef(0,0.5,0);///T
glScalef(0.3,0.3,0.3);
glmDraw(pmodel3, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
}
void drawArm0()
{
glPushMatrix( ); ///left hand arm
glTranslatef(-0.25,0.1,0);///T
glRotatef(45,0,0,1);///R
glTranslatef(0,0.2,0);///T
glScalef(0.25,0.25,0.25);
glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
}
void drawArm1()
{
glPushMatrix( ); ///left hand
glTranslatef(-0.25,0,0);///T
glRotatef(90,0,0,1);///R
glTranslatef(-0.1,0.25,0);///T
glScalef(0.25,0.25,0.25);
glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
}
void drawRArm()
{
glPushMatrix( ); ///Right hand arm
glTranslatef(0.25,0.1,0);///T
glRotatef(180,0,0,1);///R
glRotatef(180,1,0,0);
glRotatef(45,0,0,1);
glTranslatef(0,0.2,0);///T
glScalef(0.25,0.25,0.25);
glmDraw( pmodel, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix( );
}
void drawRhand()
{
glPushMatrix( ); ///Right hand
glTranslatef(0.5,0,0);///T
glRotatef(180,0,0,1);///R
glRotatef(180,1,0,0);
glRotatef(90,0,0,1);
glTranslatef(-0.1,0,0);///T
glScalef(0.25,0.25,0.25);
glmDraw( pmodel2, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix( );
}
void drawHead()
{
glPushMatrix( ); ///head
glTranslatef(0,1,0);///T
glTranslatef(0,-0.3,0);///T
glScalef(0.3,0.3,0.3);
glmDraw( pmodel4, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix( );
}
void drawRleg()
{
glPushMatrix( ); ///Right Leg up
glTranslatef(-0.15,-0.3,0);///T
//glTranslatef(0,-0.2,0);///T
glScalef(0.3,0.5,0.3);
glmDraw( pmodel5, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix( );
}
void drawLleg()
{
glPushMatrix( ); ///Left Leg up
glTranslatef(0.15,-0.3,0);///T
//glTranslatef(0,-0.2,0);///T
glScalef(0.3,0.5,0.3);
glmDraw( pmodel6, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix( );
}
void drawRfoot()
{
glPushMatrix( ); ///Right Leg low
glTranslatef(-0.2,-0.65,0);///T
glRotatef(180,0,1,0);
//glTranslatef(0,-0.2,0);///T
glScalef(0.5,0.75,0.5);
glmDraw( pmodel7, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix( );
}
void drawLfoot()
{
glPushMatrix( ); ///Left Leg low
glTranslatef(0.2,-0.65,0);///T
glRotatef(180,0,1,0);
//glTranslatef(0,-0.2,0);///T
glScalef(0.5,0.75,0.5);
glmDraw( pmodel8, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix( );
}
開始旋轉製作





glPushMatrix();
//drawBody();
glutSolidTeapot(0.03);
glPushMatrix();///Left Part
glTranslatef(-0.22, +0.35, 0);///(3) 最後,把它掛在對的位置
glRotatef(-angle, 0,0,1); ///(1) 先轉動
glTranslatef(0.22, -0.35, 0);///(2) move the rotate center to center
drawArm0();
glTranslatef(-0.48, +0.1, 0);///(3) 最後,把它掛在對的位置
glRotatef(-angle, 0,0,1);///(1) 先轉動
glTranslatef(0.48, -0.1, 0);///(2) 接著將旋轉中心,放到真的中心, 記得把樓上先註解掉
drawArm1();
glPopMatrix();
glPushMatrix();///Right Part
glTranslatef(+0.2, +0.36, 0);///3
glRotatef(angle, 0,0,1); ///(1)
glTranslatef(-0.2, -0.36, 0);///(2)
drawRArm();
glTranslatef(+0.48, +0.1, 0);///(3)
glRotatef(angle, 0,0,1);///(1)
glTranslatef(-0.48, -0.1, 0);///(2)
drawRhand();
glPopMatrix();
glPopMatrix();
drawHead();
drawRleg();
drawRfoot();
drawLleg();
drawLfoot();
glPopMatrix( );
glutSwapBuffers( );
}









滑鼠操作程式碼
int oldX=0, oldY=0;
void mouse(int button, int state, int x, int y)
{
oldX=x; oldY=y;
glutPostRedisplay();
}
void motion(int x, int y)
{
angle += (x-oldX);
oldX=x;
glutPostRedisplay();
}
在int main裡面要加
glutMouseFunc(mouse);
之後在int oldX=0,oldY=0;底下加鍵盤設定
void keyboard(unsigned char key, int x, int y)
{
if(key=='0')now=0;
if(key=='1')now=1;
if(key=='2')now=2;
if(key=='3')now=3;
if(key=='4')now=4;
}
角度處理
float angle[20] = {} ;變為函數
之後為了鍵盤設定
在int main底下加
glutKeyboardFunc(keyboard);









沒有留言:
張貼留言