2024年3月7日 星期四

周氏齊日記week3

 1.複製week01十行程式碼再修改做出mouse

#include <GL/glut.h>
void display()
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();

}
int main(int argc,char*argv[])
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week03_mouse");
    glutDisplayFunc(display);
    glutMainLoop();
}















2.用滑鼠寫程式












3.到https://jsyeh.org/3dcg10/下載windows和data

在model區按右鍵能改圖案

可以調整xyz












4.用範例上與moouse的程式碼寫出:

#include <GL/glut.h>

#include <stdio.h>

float teapotX=0, teapotY=0;

void mouse(int button, int state, int x, int y)

{

    teapotX=(x-150)/150.0;

    teapotY=-(y-150)/150.0;

}

void display()

{


    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

    glPopMatrix();

        glTranslatef(teapotX, teapotY, 0);

    glutSolidTeapot( 0.3 );

    glutSwapBuffers();

}


int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week03_mouse");

    glutDisplayFunc(display);

    glutMouseFunc(mouse);

    glutMainLoop();

}




















5.轉動
右手比讚,轉動軸就是拇指,轉動方向是其他手指的轉動方向\
對x軸轉拇指向右
對y軸轉比讚
對負y軸轉比倒讚
對z軸轉拇指指向鼻子
👍👎 

6.讓茶壺旋轉
用上一個移動的程式碼修改:
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;
float angle=0;
void mouse(int button, int state, int x, int y)
{
    teapotX=(x-150)/150.0;
    teapotY=-(y-150)/150.0;
}
void display()
{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glPopMatrix();
        ///glTranslatef(teapotX, teapotY, 0);
        glRotatef(angle, 0, 0, 1);
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
void motion(int x, int y)
{
    angle=x;
    display();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03_mouse");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop();
}
用滑鼠拖曳即可讓茶壺旋轉



















7.讓茶壺旋轉,按w e控制
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;
float angle=0;
int method=1;
int oldX=0, oldY=0;
void mouse(int button, int state, int x, int y)
{
    oldX=x;///teapotX=(x-150)/150.0;
    oldY=y;///teapotY=-(y-150)/150.0;
}
void display()
{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glPopMatrix();
        glTranslatef(teapotX, teapotY, 0);
        glRotatef(angle, 0, 0, 1);
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
void motion(int x, int y)
{
    if(method==1){
            angle+=x-oldX;
    }else if(method==2){
        teapotX+=(x-oldX)/150.0;
        teapotY-=(y-oldY)/150.0;
    }
    oldX=x;
    oldY=y;
    display();
}
void keyboard(unsigned char key, int x, int y)
{
    if(key=='e')    method=1;
    if(key=='w')    method=2;
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03_mouse");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}





沒有留言:

張貼留言