2019年5月30日 星期四

比利安娜工作室-balaboom_Week15

2019/05/30 Week15
(1)主題:攝影機、運鏡
(2)主題:投影、矩陣
(3)複習:位置移動 vs 轉動
(4)複習:背景貼圖
(5)期末作品

運鏡:http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/跟之前一樣的動作,開起網站下載必要的檔案,將檔案為至放置好就可以開始了~

接下來要用CodeBlocks開啟奇怪的大叔
(1)先下載source,copy裡面projection程式碼
(2)在CodeBlocks裡開啟glut專案,步驟之前都有教過
(3)在glut理add file=>glm.h及glm,c改成glm.cpp
(4)記得到目的地放入data資料夾
================================================================
#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;
}
這是加了燈光的大叔
=====================================================================
#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;
}
會旋轉的大叔
====================================================================
#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
{

    glMatrixMode(GL_PROJECTION); ///NOW4
    glLoadIdentity(); ///NOW4
glOrtho(-1, +1,  -1,+1, -10,+10); ///NOW4 你可以看到 -10...+10範圍


    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;
}
多加了NOW4程式碼=>垂直投影
======================================================================
#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=2, eyeY=0, eyeZ=0; ///NOW3
void timer(int t)///NOW3
{

    glMatrixMode(GL_PROJECTION); ///NOW4
    glLoadIdentity(); ///NOW4
///glOrtho(-1, +1,  -1,+1, -10.0,10.0); ///NOW4 你可以看到 -10...+10範圍
gluPerspective(60, 1.0, 0.001, 1000);///NOW5


    float angle = (t/180.0)*3.1415926; ///NOW3
    eyeX=2*cos(angle); ///NOW3
    eyeZ=2*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;
}
透視投影





沒有留言:

張貼留言