2019年5月30日 星期四

ˊ_>ˋ_Week15



(1)主題:攝影機/運鏡


了解投影各種投影法裡參數改變會對圖像造成什麼影響
gluPerspective(__,__,__,__)  透視投影法
glFrustum(__,__,__,__) 
glOrtho(__,__,__,__) 垂直投影法

gluLookAt( __,__,__,<--Eye (人物是主角,鏡頭不會離開主角)--//環繞主角使用第一個參數//
__,__,__,<--Center (視角是主角,主角有可能消失)
__,__,__<--Up ( 相機角度,可以左右傾斜、上下顛倒 )
)

最左邊的參數-->左右變動
中間參數-->上下變動
右邊-->Z軸

------------------------------------------------------------------------------
第一步模型先出來:

#include <GL/glut.h>///GLUT 外掛
#include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized()
GLMmodel * pmodel=NULL;///指標
void drawmodel(void)
{
    if (!pmodel) {
pmodel = glmReadOBJ("data/al.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    drawmodel();
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
    glutInitWindowSize(512,512);
    glutInitWindowPosition(50, 50);
    glutCreateWindow("week15");

//    glutReshapeFunc(reshape);
    glutDisplayFunc(display);

    glutMainLoop();

    return 0;
}

第二步模型打光:

#include <GL/glut.h>///GLUT 外掛
#include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized()
GLMmodel * pmodel=NULL;///指標
void drawmodel(void)
{
    if (!pmodel) {
pmodel = glmReadOBJ("data/al.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    drawmodel();
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
    glutInitWindowSize(512,512);
    glutInitWindowPosition(50, 50);
    glutCreateWindow("week15");

//    glutReshapeFunc(reshape);
    glutDisplayFunc(display);

    GLfloat light_pos[] = { 0.0, 0.0, -1.0, 0.0 };
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
    glutMainLoop();

    return 0;

}

第三步Timer 函式 運鏡
#include <GL/glut.h>///GLUT 外掛#include "glm.h"
///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized()
GLMmodel * pmodel=NULL;///指標
void drawmodel(void){    
    if (!pmodel) {
        pmodel = glmReadOBJ("data/al.obj");
        if (!pmodel) exit(0);
  glmUnitize(pmodel);
        glmFacetNormals(pmodel);
        glmVertexNormals(pmodel, 90.0);
        }    
    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
void display(void){    
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    
    drawmodel();    
    glutSwapBuffers();
    }

#include <math.h>///for sin() cos() ///NOW3
    float eyeX=0.5, eyeY=0, eyeZ=0; ///NOW3
    void timer(int t)///NOW3{    
        float angle = (t/180.0)*3.1415926; ///NOW3    
        eyeX=0.5*cos(angle); ///NOW3    
        eyeZ=0.5*sin(angle); ///NOW3
        glutTimerFunc(33, timer, t+1);///NOW3    
        glMatrixMode(GL_MODELVIEW);///NOW3    
        glLoadIdentity();///NOW3    
        gluLookAt( eyeX, eyeY, eyeZ,///eye ///NOW3            
                            0, 0, 0,///center ///NOW3               0, 1, 0);///up    ///NOW3
        glutPostRedisplay();
///NOW3
        }
int main(int argc, char** argv){    
    glutInit(&argc, argv);    
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);    
    glutInitWindowSize(512,512);           
    glutInitWindowPosition(50, 50);    
    glutCreateWindow("week15");
//  glutReshapeFunc(reshape);    
    glutDisplayFunc(display);    
    glutTimerFunc(33, timer, 0);///NOW3
    GLfloat light_pos[] = { 0.0, 0.0, 1.0, 0.0 };    
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING);    
    glEnable(GL_LIGHT0);    
    glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
    glutMainLoop();
    return 0;}

(2)主題:投影矩陣

timer函式裡增加這三行
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1,+1,-1,+1,-10,+10);

/// -10和+10就像是眼鏡,範圍不夠大,身體會斷東斷西

gluPerspective(60, 1.0, 0.001, 1000);

(3)複習:位置移動 v.s 轉動

(4)複習:背景貼圖
(5)期末作品


沒有留言:

張貼留言