2021年6月6日 星期日

嘎嘎烏拉-(電腦圖學)Week14電腦圖學筆記

 

首先備份177行程式碼,接著使用glutSolidSphere來做出打光模型
然後加入glutWireSphere如上圖
程式碼如下:

#include <GL/glut.h>
void display()
{


    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   // glutSolidSphere(0.3, 30, 30);
    glutWireSphere(0.3, 30, 30);
    glutSwapBuffers();
}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week14 timer");

    glutDisplayFunc(display);
    glutMainLoop();
}
接著加入glutTimerFunc(等多久,timer,t)/ void timer(int t)!!如下圖~:
加入glRotatef使其旋轉並加上glutSolidCube(0.3);///實心方塊,使畫面變成紅底白色方塊旋轉
如下圖~:
稍微變形成細長的綠色手臂,如下圖:
程式碼如下:
#include <GL/glut.h>
float angle=0;
void drawArm1()
{
    glPushMatrix();
        glScalef(1,0.5,0.5);///細長手臂
    glColor3f(0,1,0); glutSolidCube(0.2);///綠色手臂
    glPopMatrix();
}
void display(void)
{


    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///要小心!不要寫錯~
        glColor3f(1,1,1); glutSolidCube(0.4);///白色身體
        glPushMatrix();
            glTranslatef(-0.2,0.2,0);
            glRotatef(angle, 0, 0, 1);
            glTranslatef(-0.1,0,0);///旋轉中心移到畫面中心
            drawArm1();///綠色手臂
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
}
int diff=2;
void timer(int t)///timer響起時,做需要做的事
{///20:50fps,    30:33fps,   50:20fps,   100:10fps,設太小沒用因為不可能
    glutTimerFunc(30,timer,t+1);///起床,先設新鬧鐘
    if( angle>90 ) diff=-2;
    if( angle<0 ) diff=+2;
    angle+=diff;
    display();///重畫畫面
}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week14 timer");

    glutDisplayFunc(display);
    glutTimerFunc(3000,timer,0);///(0,0等多久)
    glutMainLoop();
}









沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...