顯示具有 06160070_蕭邑安 標籤的文章。 顯示所有文章
顯示具有 06160070_蕭邑安 標籤的文章。 顯示所有文章

2019年5月31日 星期五

ㄟOWOㄏ - Week15

{\__/}
( • - •)
❤️ < \

\先來動手調調看鏡頭/


有三種不同的鏡頭喔//



 STEP 1 → 開啟GLUT專案
 STEP 2 → 去>>>http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/<<<下載source
 STEP 3 → 將以下三個檔案拉進專案的資料夾裡面(glm.c檔記得改成glm.cpp檔)



 STEP 4 → 將glm.cpp檔以add file的方式加入專案
 STEP 5 → 將main.cpp的程式碼都刪掉,輸入新的
 STEP 6 → 記得將模型的檔案拉入bin資料夾裡


\來看看程式碼/

#include <GL/glut.h>
#include "glm.h" ///for glmReadOBJ(), glmDraw(), glmUnitized()....
GLMmodel * pmodel=NULL;///NOW
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>
float eyeX=1, eyeY=0, eyeZ=0;
void timer(int t)///NOW3
{
    glutTimerFunc(33, timer, t+1);///NOW3
    float angle=t/180.0*3.1415926;///NOW3 算出一個角度
    eyeX=cos(angle); eyeZ=sin(angle);///NOW3

    glMatrixMode(GL_PROJECTION);///NOW4
    glLoadIdentity();///NOW4
    gluPerspective(60, 1, 0.001, 1000);///NOW5
///glOrtho(-1,+1, -1,+1, -10,+10);///NOW4 可以看到範圍比較大的投影法

    glMatrixMode(GL_MODELVIEW);///NOW3
    glLoadIdentity();///NOW3
    gluLookAt(eyeX, eyeY, eyeZ, ///NOW3 LookAt的 eye
              0.0, 0.6, 0.0, ///NOW3 LookAt的 center
              0, 1, 0);///NOW3 LookAt的 up

    glutPostRedisplay();///NOW3 Re-display
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);
    glutCreateWindow("week15");

    glutDisplayFunc(display);
    glutTimerFunc(33, timer, 0);///NOW3

    GLfloat light_pos[] = { 0.0, 0.0, 1.0, 0.0 };///NOW2 打光的位置
    glEnable(GL_DEPTH_TEST);///NOW2 有立體的功能
    glEnable(GL_LIGHT0);    ///NOW2 打光後變立體的彩色的
    glEnable(GL_LIGHTING);  ///NOW2 打光後變立體的彩色的
    glLightfv(GL_LIGHT0, GL_POSITION, light_pos);///NOW2 打光的位置

    glutMainLoop();
}







2019年5月24日 星期五

ㄟOWOㄏ - Week14

{\__/}
( • - •)
❤️ < \

\今天要來做計時器/


開啟GLUT專案


以下為計時器的程式碼//


#include <GL/glut.h>
#include <mmsystem.h>///NOW (0)發聲音
#include <stdio.h>///NOW3 for printf()
float angle=0;///NOW4
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///NOW4
        glRotatef(angle, 0, 0, 1);///NOW4
        glutSolidTeapot( 0.3 );///NOW4
    glPopMatrix();///NOW4
    glutSwapBuffers();
}
void timer(int t)///NOW (2)
{
    glutTimerFunc(30, timer, t+1);///NOW4 ///NOW3 一起床,馬上撥下一個鬧鐘, 時間才會準
    printf("現在的 timer(t)的t是: %d\n", t);///NOW3
    angle = t;///NOW4
    glutPostRedisplay();///NOW4 要更新畫面
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);///大一點
    glutCreateWindow("week14 timer");

    glutDisplayFunc(display);
    glutTimerFunc(1000, timer, 0);///NOW (1)

    glutMainLoop();
}

\再來看看內插公式/


\再把內插公式寫入CodeBlocks裡/




#include <GL/glut.h>
#include <mmsystem.h>///NOW (0)發聲音
#include <stdio.h>///NOW3 for printf()
float angle=0;///NOW4
float nowX=0;///內插公式

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///NOW4
        //glRotatef(angle, 0, 0, 1);///NOW4
        glTranslatef(nowX,0,0);///NOW5
        glutSolidTeapot( 0.3 );///NOW4
    glPopMatrix();///NOW4
    glutSwapBuffers();
}

void timer(int t)///NOW (2)
{
    glutTimerFunc(33, timer, t+1);///NOW4 ///NOW3 一起床,馬上撥下一個鬧鐘, 時間才會準
    printf("現在的 timer(t)的t是: %d\n", t);///NOW3
    float alpha = (t%30)/30.0;///內插公式
    nowX=alpha*1.0+(1-alpha)* -1.0;///內插公式
    glutPostRedisplay();///NOW4 要更新畫面
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);///大一點
    glutCreateWindow("week14 timer");

    glutDisplayFunc(display);
    glutTimerFunc(1000, timer, 0);///NOW (1)

    glutMainLoop();
}









2019年5月17日 星期五

ㄟOWOㄏ - Week13

{\__/}
( • - •)
❤️ < \

\先來看看開啟檔案並在檔案中印出的程式碼/
用貝殼專案開啟







#include <stdio.h>
FILE * fout=NULL;

int main()
{
    fout = fopen("filename.txt","w+");
    for(int i=0;i<20;i++){
        fprintf(fout,"Hello world!\n");
    }
}


\現在來看看如何轉動吧/
用GLUT專案開啟



///NOW5為讀取之前轉動的動作,一直按r就可以看到之前所做的動作


#include <stdio.h> ///(0)  ///NOW4
#include <GL/glut.h>
FILE * fout=NULL;///(1) ///NOW4
FILE * fin =NULL;///(1) ///NOW5
float angle[20];///NOW
int angleID=1;///第幾個要轉動的關節 ///NOW3
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///body
        glColor3f(1,1,1);///white
        glutSolidTeapot( 0.3 );///body

        glPushMatrix();///right Arm
            glTranslatef(0.18, 0, 0);///(3)掛到肩上
            glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
            glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心

            glColor3f(1,0,0);///red
            glutSolidTeapot( 0.2 );///right upper arm

            glPushMatrix();///NOW2 長出下手臂
                glTranslatef(0.18, 0, 0);///(3)掛到肘上
                glRotatef(angle[2], 0,0,1);///(2)轉動 ///NOW
                glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心

                glColor3f(1,0,0);///red
                glutSolidTeapot( 0.2 );///right lower arm

            glPopMatrix();
        glPopMatrix();

        glPushMatrix();///left Arm
            glTranslatef(-0.18, 0, 0);///(3)掛到肩上
            glRotatef(angle[3], 0,0,1);///(2)轉動 ///NOW
            glTranslatef(-0.18, 0, 0);///(1)改變旋轉中心,放到中心

            glColor3f(1,0,0);///red
            glutSolidTeapot( 0.2 );///left upper arm

            glPushMatrix();///NOW2 長出下手臂
                glTranslatef(-0.18, 0, 0);///(3)掛到肘上
                glRotatef(angle[4], 0,0,1);///(2)轉動 ///NOW
                glTranslatef(-0.18, 0, 0);///(1)改變旋轉中心,放到中心

                glColor3f(1,0,0);///red
                glutSolidTeapot( 0.2 );///left lower arm

            glPopMatrix();
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();
}
int oldX;///NOW
void mouse(int button, int state, int x, int y)///NOW
{
    oldX = x;///NOW
}
void motion(int x, int y)///NOW
{
    angle[angleID] += (x-oldX);///NOW ///NOW3
    oldX = x;///NOW
    if(fout==NULL) fout=fopen("motion.txt", "w+");///NOW4
    for(int i=0; i<20; i++){///NOW4
        printf( "%.1f ", angle[i]);///NOW4
        fprintf( fout, "%.1f ", angle[i]);///NOW4
    }
    printf("\n");///NOW4
    fprintf(fout, "\n");///NOW4
    display();///NOW
}
void keyboard(unsigned char key, int x, int y)///NOW3
{
    if(key=='1') angleID=1;///NOW3
    if(key=='2') angleID=2;///NOW3
    if(key=='3') angleID=3;///NOW3
    if(key=='4') angleID=4;///NOW3
    if(key=='w' || key=='W'){///NOW4 小寫的 w
        if(fout==NULL) fout=fopen("motion.txt", "w+");///NOW4
        for(int i=0; i<20; i++){///NOW4
            printf( "%.1f ", angle[i]);///NOW4
            fprintf( fout, "%.1f ", angle[i]);///NOW4
        }
        printf("\n");///NOW4
        fprintf(fout, "\n");///NOW4
    }
    if(key=='r'){///NOW5
        if(fin==NULL) fin = fopen("motion.txt", "r");///NOW5
        for(int i=0; i<20;i++){///NOW5
            fscanf(fin, "%f", &angle[i]);///NOW5
        }///NOW5
    }
    glutPostRedisplay();///和 display()很像,但更好 ///NOW5
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    ///glutInitWindowSize(600,600);///我們可以開很大的視窗
    glutCreateWindow("week 13 motion TRT angle file");
    glutKeyboardFunc(keyboard);///NOW3
    glutMouseFunc(mouse);///NOW
    glutMotionFunc(motion);///NOW
    glutDisplayFunc(display);

    glutMainLoop();

}


\成品圖/
















2019年5月10日 星期五

ㄟOWOㄏ - Week12

{\__/}
( • - •)
❤️ < \

\今天要來加入聲音/
STEP 1 → 先開CodeBlocks,並開啟新專案,選擇Console application。




STEP 2 → 對專案按右鍵,選取紅框。


STEP 3 → 到Linker settings按Add增加winmm。




STEP 4 → 加上程式碼就完成拉 ! 

#include <windows.h>
#include <mmsystem.h>

int main()
{
    PlaySoundA("C:\\Users\\user\\Downloads\\wind.wav",NULL,SND_SYNC);
    return 0;
}


\再來就加上鍵盤應用做個小鋼琴吧/


STEP 1 → 開啟GLUT專案。
STEP 2 → 在原本專案大概90幾行的static void key(unsigned char key, int x, int y)裡加上
if(key=='1') PlaySoundA("C:\\Users\\user\\Downloads\\DO.wav",NULL,SND_ASYNC);
以上那行程式碼,所有需變動再自行調整。


\注意事項/
1.記得加#include <mmsystem.h>
2.記得檢查音檔是wav檔
3.注意檔案位置是否正確

\讀入MP3檔/

在最前面加上
#include "CMP3_MCI.h"
CMP3_MCI myMP3;
int a;
float b;
char c;
double d;

在後面的int main裡面加上
myMP3.Load("C:\\Users\\user\\Downloads\\POPSTARS.mp3");
myMP3.Play();

特別注意 ! mp3的檔名裡不可有空白鍵!















2019年5月3日 星期五

ㄟOWOㄏ - Week11

{\__/}
( • - •)
❤️ < \

\實作TRT成品圖/



注意事項 : 同一隻手的上下臂要放在同個glPushMatrix和glPopMatrix的中間才會連在一起,不同隻手就要分開,不然第二隻手會不見 !




\來看看程式碼/


#include <GL/glut.h>
float angle1=0, angle2=0, angle3=0, angle4=0;///NOW ///NOW6 配合鍵盤
int jointID=1;///NOW6 配合鍵盤
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.5, 0.15, 0);///(3) 掛在身體的右肩
        glRotatef(angle1, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂

        glPushMatrix();///NOW2
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(angle2, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2

    glPopMatrix();

    glPushMatrix();///左邊手臂
        glTranslatef(-0.45, 0.15, 0);///(3) 掛在身體的左肩
        glRotatef(angle3, 0,0,-1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///左手臂

        glPushMatrix();///NOW3
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的左肘///NOW3
            glRotatef(angle4, 0,0,-1);///(2) 旋轉///NOW3
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW3

            glColor3f(1,0,0);///紅色的///NOW3
            glutSolidTeapot( 0.15 );///左下手臂///NOW3
        glPopMatrix();///NOW3

    glPopMatrix();

    glPushMatrix();///右邊腳
        glTranslatef(0.15, -0.25, 0);///(3) 掛在身體的右腳
        glRotatef(angle1, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右腳

        glPushMatrix();///NOW4
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的右膝///NOW4
            glRotatef(angle2, 0,0,1);///(2) 旋轉///NOW4
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW4

            glColor3f(1,0,0);///紅色的///NOW4
            glutSolidTeapot( 0.15 );///右小腿///NOW4
        glPopMatrix();///NOW4

    glPopMatrix();

    glPushMatrix();///左邊腳
        glTranslatef(-0.15, -0.25, 0);///(3) 掛在身體的左腳
        glRotatef(angle3, 0,0,-1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///左腳

        glPushMatrix();///NOW5
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的左膝///NOW5
            glRotatef(angle4, 0,0,-1);///(2) 旋轉///NOW5
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW5

            glColor3f(1,0,0);///紅色的///NOW5
            glutSolidTeapot( 0.15 );///左小腿///NOW5
        glPopMatrix();///NOW5

    glPopMatrix();

    glutSwapBuffers();
    //angle++;///NOW//變成滑鼠旋轉
}
int oldX,oldY;
void motion(int x, int y)///NOW3 用滑鼠mouse來控制angle
{
    if(jointID==1) angle1 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤
    if(jointID==2) angle2 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤
    if(jointID==3) angle3 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤
    if(jointID==4) angle4 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤
    oldX=x;///NOW5
    display();///NOW3 用滑鼠mouse來控制angle
}

void mouse(int button,int state,int x,int y)
{
    oldX=x;
    oldY=y;
}

void keyboard(unsigned char key, int x, int y)///NOW6 配合鍵盤
{
    if(key=='1') jointID=1;///NOW6 配合鍵盤
    if(key=='2') jointID=2;///NOW6 配合鍵盤
    if(key=='3') jointID=3;///NOW6 配合鍵盤
    if(key=='4') jointID=4;///NOW6 配合鍵盤
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);
    glutMotionFunc(motion);///NOW3 用滑鼠mouse來控制angle

    glutKeyboardFunc(keyboard);///NOW6 配合鍵盤
    glutMainLoop();
}