2019年3月21日 星期四

聽說台灣價值好棒棒的阿


電腦圖學
(1.)主題:旋轉Rotation
(2.)實作:glRotatef()
(3.)滑鼠轉,自動轉
1.到
http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
下載: windows.zip
          data.zip
          glut32.dll
小心,data.zip
要解成
下載\windows\data\模型
不要解成
下載\windows\data\data\模型
接著
到windows/Transformation點開
看到汽車圖片


說明glRotate
首先了解有四個值分別是(旋轉角度,以及X軸,Y軸,和Z軸)




教了茶壺旋轉的程式
#include <GL/glut.h>
float angle=0;
void display()
{///沒有使用glClear()去清畫面,會有殘影
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///Push輩分保護Matrix
        glRotatef(angle,0,1,0);
        glutSolidTeapot(0.3);
    glPopMatrix();///Pop還原Matrix
    glutSwapBuffers();
    angle+=3;///每次執行到這行,才加角度
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week05 rotate");
    glutDisplayFunc(display);
    glutIdleFunc(display);///Idle閒閒沒事就重畫
    glutMainLoop();

}
讓滑鼠點滑茶壺

#include <GL/glut.h>

float angle=0;

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,1,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
       ///angle+=3;原本自動轉的註解掉
}
void motion(int x,int y)
{
    angle=x;
    display();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week05 rotate");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}
把滑鼠全部的動作打到程式裡
0是滑鼠左鍵,1是滑鼠中鍵,2是滑鼠右鍵
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,1,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
    ///angle+=3;
}
void motion(int x,int y)
{
    angle=x;
    display();
}
#include <stdio.h>
void mouse(int button,int state,int x,int y)
{
    printf("%d %d %d %d\n",button,state,x,y);
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week05 rotate");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMotionFunc(motion);
    glutMouseFunc(mouse);
    glutMainLoop();
}






沒有留言:

張貼留言