顯示具有 08160732_陳品宏 標籤的文章。 顯示所有文章
顯示具有 08160732_陳品宏 標籤的文章。 顯示所有文章

2021年6月16日 星期三

week 17 總複習 期末作業挫青賽

基本的程式碼 

#include <GL/glut.h>

void display(){

    glClearColor( 1,0,0,0);///用來Clear的Color 用紅色

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glColor3f( 1,1,0 );

        glutSolidTeapot( 0.3 );

    glutSwapBuffers();

}

以下是打光

const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };

const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };


const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };

const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };

const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat high_shininess[] = { 100.0f };

int main( int argc, char ** argv )

{

    glutInit( &argc, argv);

    glutInitWindowSize(300,300);

    glutInitWindowPosition(700,200);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week17 review");


    glutDisplayFunc(display);

    以下是打光

    glEnable(GL_DEPTH_TEST);

    glDepthFunc(GL_LESS);


    glEnable(GL_LIGHT0);

    glEnable(GL_NORMALIZE);

    glEnable(GL_COLOR_MATERIAL);

    glEnable(GL_LIGHTING);


    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);

    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);

    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);

    glLightfv(GL_LIGHT0, GL_POSITION, light_position);


    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);

    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);

    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);

    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);


    glutMainLoop();

}







































1


2021年6月9日 星期三

第十六週 早餐是巧克力草莓吐司加杏仁茶敖嗚~~~~~

 早上老師教了googlemeet的用法聽起來真的有夠方便,之後就是把上週的程式碼先貼上

然後就加新東西囉!

先偷偷用一下老師的圖






















用新x減掉舊X獲得向量 再加上程式碼讓茶壺可以用滑鼠跟1230數字鍵進行操作
                                                                                                      (這個上週就可以了)

第5行:int oldX=0;
10-20行:
void mouse(int button, int state, int x, int y)
{
    oldX = x;
}

void motion (int x, int y)
{
     angle[angleID] += x-oldX;
     oldX = x;
    glutPostRedisplay();///現在這個比較好, 以前會用 display()重畫
}
66-67行:
glutMouseFunc(mouse);
    glutMotionFunc(motion);























接下來再加一點程式碼可以讓檔案記下你移動的位置及座標

第六行: FILE * fout = NULL;

22-26行:
if(fout==NULL) fout=fopen("angle.txt", "w+");
    for(int i=0 ; i<20 ; i++) fprintf( fout, "%.1f",angle[i]);
    fprintf( fout, "\n");///以上兩行寫到檔案
    for(int i=0 ; i<20 ; i++) printf( "%.1f",angle[i]);
    printf("\n");///以上兩行印到小黑視窗

第七行:
剛剛是不是記下了位置及座標接下來就是把座標結合作成一個移動動畫!!!
FILE * fin = NULL;///播放動畫的檔案指標
void timer( int t ){
    glutTimerFunc( 30, timer, t+1 );///現在要用他撥動畫
    if (fin==NULL) fin=fopen("angle.txt", "r");
    for(int i=0 ; i<20 ; i++) fscanf( fin, "%f", & angle[i]);
    glutPostRedisplay();///播放動畫,重製畫面
}
































2021年6月2日 星期三

week15 忙到肚子好餓

 教新東西!!!!!!!!!

用code創文字檔

#include <stdio.h>

int main(int argc, char**argv)

{

    FILE * fout = NULL;///檔案指標

    fout = fopen("檔名.txt","w+" );///用w+模式開檔

    printf("Hello Worid\n");

    fprintf(fout,"Hello Worid\n");


}

看起來沒啥不過你的資料夾當中除現了名叫檔名的資料夾囉


















之後改專案設定的cbp檔




之後去(檔名)的資料夾裡讀取hello world

#include <stdio.h>

int main(int argc, char**argv)

{

        FILE * fin = NULL;

        fin = fopen("檔名.txt","r");


        char line[100];

        fscanf(fin, "%s", line);

        printf("讀到字串: %s\n", line);

         fscanf(fin, "%s", line);

        printf("讀到字串: %s\n", line);

}












老朋友出現了

#include <stdio.h>///可割可棄

#include <GL/glut.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glutSolidTeapot( 0.3 );///身體

        glutSolidTeapot( 0.3 );///左手臂(重疊了)

        glutSolidTeapot( 0.3 );///左手肘(重疊了)

    glutSwapBuffers();

}

int main( int argc, char ** argv )

{

    glutInit( &argc, argv );

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week15 file");


    glutDisplayFunc(display);

    glutMainLoop();

}













又來到該死的旋轉了 茶壺旋轉我!!!

#include <stdio.h>

#include <GL/glut.h>

float angle=0,diff=2;

void timer(int t)

{

    glutTimerFunc(30,timer,t+1);

    angle+=diff;

    if(angle>90)diff=-2;

    if(angle<0)diff=+2;

    glutPostRedisplay();

}

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        ///glutSolidTeapot(0.3);

        glPushMatrix();

            glTranslatef(-0.3,0,0);

            glRotatef(angle,0,0,1);

            glTranslatef(-0.3,0,0);

            glutSolidTeapot(0.3);

            glPushMatrix();

            ///glutSolidTeapot(0.3);

            glPopMatrix();

            glPopMatrix();

    glPopMatrix();

    glutSwapBuffers();

}

int main(int argc, char** argv)

{

    glutInit( &argc, argv );

    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );

    glutCreateWindow(" Week15 file ");

    glutTimerFunc(0,timer,0);


    glutDisplayFunc(display);


    glutMainLoop();

}























之後就如法泡泡製兩次
程式碼如下
只有void display()裡面的程式碼

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glutSolidTeapot(0.3);///身體
        glPushMatrix();
            glTranslatef(-0.3,0,0);///掛上肩膀
            glRotatef(angle,0,0,1);///轉動
            glTranslatef(-0.3,0,0);///旋轉中心
            glutSolidTeapot(0.3);///零一個茶壺
            glPushMatrix();
                glTranslatef(-0.3,0,0);///掛上肩膀
                glRotatef(angle,0,0,1);///轉動
                glTranslatef(-0.3,0,0);///旋轉中心
                glutSolidTeapot(0.3);///零一個茶壺
            glPopMatrix();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();





















最後最後
把angle改成陣列 這樣就可以用鍵盤控制轉動
#include <stdio.h>
#include <GL/glut.h>
float angle[20]={},diff=2;
int angleID=0;
void timer(int t)
{
    glutTimerFunc(30,timer,t+1);
    angle[angleID]+=diff;
    if(angle[angleID]>90)diff=-2;
    if(angle[angleID]<0)diff=+2;
    glutPostRedisplay();
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')angleID=1;
    if(key=='0')angleID=0;
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glutSolidTeapot(0.3);
        glPushMatrix();
            glTranslatef(-0.3,0,0);
            glRotatef(angle[0],0,0,1);
            glTranslatef(-0.3,0,0);
            glutSolidTeapot(0.3);
            glPushMatrix();
                glTranslatef(-0.3,0,0);
                glRotatef(angle[1],0,0,1);
                glTranslatef(-0.3,0,0);
                glutSolidTeapot(0.3);
            glPopMatrix();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow(" Week15 file ");
    glutKeyboardFunc(keyboard);
    glutTimerFunc(0,timer,0);


    glutDisplayFunc(display);

    glutMainLoop();
}
























































8














1


2021年5月26日 星期三

早上吃起司醬油蛋吐司配綠茶好爽

 上個禮拜還不習慣沒有很跟得上,但我相信這禮拜我可以的拉

首先打開02的程式碼檔複習上禮拜丟打光、貼圖、讀模型的跟等等要丟的程式碼













阿下面的程式碼有些是老朋友了,自己要記得蝦

 

#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();

}

void timer(int t){///timer響起就做

    glClearColor(1,0,0,0);///背景 現在是紅色

    display();///重劃畫面

}

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week14 timer");


    glutDisplayFunc(display);

    glutTimerFunc(3000,timer,0);

    glutMainLoop();

}



  glutSolidSphere(0.3,30,30);這行的數字是啥

0.3半徑30縱切30橫切

 glutTimerFunc(3000,timer,0);     等待的時間


void timer(int t){///timer響起就做

    glClearColor(1,0,0,0);///背景 現在是紅色

    display();///重劃畫面

}  時間到做以上的事













下面是進階版 時間到就轉起來

程式碼: 

#include <GL/glut.h>

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glRotatef(angle, 0, 0, 1);

        glutSolidCube(0.3);///方塊

    glPopMatrix();

    glutSwapBuffers();

}

void timer(int t){ ///響起就做

    glutTimerFunc(30, timer, t+1);

    glClearColor(1,0,0,0);///顏色

    angle++;///旋轉我!

    display();///這行加了才會跑

}

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week14 timer");


    glutDisplayFunc(display);

    glutTimerFunc( 3000, timer, 0 );///等待的時間

    glutMainLoop();

}












下面這行呢只有一點點不一樣 用圖表現不出來所以用講的

#include <GL/glut.h>

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glRotatef(angle, 0, 0, 1);

        glutSolidCube(0.3);///方塊

    glPopMatrix();

    glutSwapBuffers();

}

int diff=2;

void timer(int t){ ///響起就做

    glutTimerFunc(30, timer, t+1);

    glClearColor(1,0,0,0);///顏色

    if(angle>90) diff=-2;                            這段就是一直往左加角度

    if(angle<0) diff=+2;    如果到90度了就扣角度轉回    然後一直重複   

    angle += diff;

    display();///這行加了才會跑

}

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week14 timer");


    glutDisplayFunc(display);

    glutTimerFunc( 3000, timer, 0 );///等待的時間

    glutMainLoop();

}

下面這個只是變成白方塊固定,左邊加綠長

方形讓他轉動 新增的程式碼不多我就不全

貼了

#include <GL/glut.h>

float angle=0;

void drawArml(){

    glPushMatrix();

        glScalef(1,0.5,0.5);///細長的手臂

        glColor3f(0,1,0);glutSolidCube(0.2);///綠色手臂

    glPopMatrix();

}

void display()

{

    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);///旋轉中心(關節)移到畫面中心

            drawArml();///畫手臂

        glPopMatrix();

    glPopMatrix();

    ///glutSolidSphere(0.3,30,30);

    ///glutWireSphere(0.3,30,30);

    glutSwapBuffers();

}






2021年5月19日 星期三

在家學習好想睡嗚嗚嗚 week13

在家先把opencv跟glut搞好



















然後打開codeblocks的setting裡面的compiler
設定以下東東
































1





























然後程式碼帶入
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
GLuint id1, id2; ///TODO:增加2個 貼圖ID
int myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
    GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
    glGenTextures(1, &id); /// 產生Generate 貼圖ID
    glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
    return id;
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBindTexture(GL_TEXTURE_2D, id1);
    glutSolidTeapot(0.3);

    glBindTexture(GL_TEXTURE_2D, id2);
    glBegin(GL_POLYGON);
       glTexCoord2f(0,1); glVertex2f(-1,-1);
        glTexCoord2f(1,1); glVertex2f(+1,-1);
        glTexCoord2f(1,0); glVertex2f(+1,+1);
        glTexCoord2f(0,0); glVertex2f(-1,+1);

    glEnd();
    glutSwapBuffers();
}
int main(int argc, char** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow(" Week08 ");
    glutDisplayFunc(display);

    id1 = myTexture("diffuse.jpg");
    id2 = myTexture("bg.jpg");
    glEnable(GL_DEPTH_TEST);
    glutMainLoop();
}


2021年5月12日 星期三

week12 你說鋼誰? 鋼彈。 你說想鋼啥? 鋼彈。

 













把老師給的(3DEXPLOR181.EXE)跟(gundam還沒切開.zipgundam還沒切開.zip)拿出來

3D的下載 gundam解壓縮 然後用3D打開匯入鋼彈記得要改成cpp檔

然後下拉選單選單選sample app就會跑出下面兩個咚咚











然後打開codeblocks的open gl 檔














把裡面的main.cpp檔替換成Gumdam.cpp的檔案(關鍵字 remove add)












打開之後前面定義域加兩行程式碼

#define GL_BGR_EXT 0x80E0

#define GL_BGRA_EXT 0x80E1

再讓16105跟16106這兩行被消失












然後你就會看到一個很愉悅的東東












阿不過吼 因為原本的程式碼會讓他抽羊癲瘋瘋狂亂轉放大縮小 所以得讓旋轉跟縮放的程式碼被消失加上正常旋轉跟適當大小就會變下面這樣(16251到16256行)













接下來麻煩了要開maya把鋼彈分肢 不過老師早給了哈哈哈

界下來就來打開老朋友glut 該改的改一改 之後一樣程式碼全刪貼下列程式碼

#include <GL/glut.h>

void display()

{

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    glutSolidTeapot( 0.3 );

    glutSwapBuffers();

}

///下面是從 GLUT專案main.cpp剪貼來的

const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };

const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };


const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };

const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };

const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat high_shininess[] = { 100.0f };


int main( int argc, char** argv )

{

    glutInit( &argc, argv );

    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);

    glutCreateWindow("week12 hw4");


    glutDisplayFunc(display);


    ///下面是從 GLUT專案main.cpp剪貼來的

    glEnable(GL_DEPTH_TEST);

    glDepthFunc(GL_LESS);


    glEnable(GL_LIGHT0);

    glEnable(GL_NORMALIZE);

    glEnable(GL_COLOR_MATERIAL);

    glEnable(GL_LIGHTING);


    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);

    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);

    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);

    glLightfv(GL_LIGHT0, GL_POSITION, light_position);


    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);

    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);

    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);

    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);


    glutMainLoop();

}

就會跑出打光水壺

















7

8

9

10


2021年5月5日 星期三

week11東西有點多歐

 要把目斗的source.zip解壓縮

然後會看到

glm.h glm.c和transformation.c

把他們放到你新開的glut專案的lib裡面

記得glm.c要改成glm.cpp!!













然後再把transformation 的程式碼拿來貼在maincpp的程式碼裡面 啊原本maincpp 的程式碼要刪掉歐!


最後再把data解壓縮過後的資料夾放在bin裡面(不是你開的新專案是原本的freeglut)

那個怪怪的東西就會出現啦



















之後再把main.cpp裡面的程式碼改成下列
#include "glm.h"
GLMmodel* pmodel = NULL;
void drawmodel(void)
{
    if (!pmodel) {
    pmodel = glmReadOBJ("data/porsche.obj");
    if (!pmodel) exit(0);
    glmUnitize(pmodel);
    glmFacetNormals(pmodel);
    glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    drawmodel();
    glutSwapBuffers();
}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160732 week11");
    glutDisplayFunc(display);
    glutMainLoop();
}
就會變成這樣























打光時間!!!
先把車換成胖子





















然後貼上以下程式碼
#include "glm.h"
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()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(180,0,1,0);
        drawmodel();
    glutSwapBuffers();
}
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };

const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160732 week11");
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
    glutDisplayFunc(display);
    glutMainLoop();
}
打完就會變成下面這個胖子






























這邊是opencv的部分

#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
GLuint id1, id2; ///TODO:增加2個 貼圖ID
int myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
    GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
    glGenTextures(1, &id); /// 產生Generate 貼圖ID
    glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
    return id;
}
#include "glm.h"
GLMmodel * pmodel = NULL;
void drawmodel(void)
{
    if (!pmodel) {
pmodel = glmReadOBJ("Gundam.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_TEXTURE );
}
void display()
{
    glClearColor(1,0,0,0);///加上紅色背景後,突然看到黑色的Gundam
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glPushMatrix();
        glRotatef( 180, 0,1,0);///轉動180度
        drawmodel();///glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
int main(int argc, char** argv)///全部剪貼 github blog
{
    glutInit( &argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 我的3D模型");

    glEnable(GL_DEPTH_TEST);///若少了 3D深度測試,就會畫錯而破圖
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    glutDisplayFunc(display);

    id1=myTexture("Diffuse.jpg");

    glutMainLoop();
}

9
9
9



















456

2021年4月28日 星期三

week10 下雨天了怎麼辦好想在家


 #include <windows.h>

int main()

{

    PlaySound("music.wav", NULL, SND_SYNC);

}

撥音樂喇 阿要記得只能用wav檔歐啾咪






















可以放多個音檔連續撥放但會有中間空檔























用按鍵去控制要發出啥音階但要記得案enter蛤但是一次只能發一個音
























#include <windows.h>
#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')PlaySound("do.wav",NULL,SND_ASYNC);
    if(key=='2')PlaySound("re.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySound("mi.wav",NULL,SND_ASYNC);
    if(key=='4')PlaySound("fa.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySound("so.wav",NULL,SND_ASYNC);
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Wee10 Sound");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}
你猜怎麼著 林北可以連續撥放拉
























#include <windows.h>
#include <GL/glut.h>
#include "CMP3_MCI.h"
CMP3_MCI mp3;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')PlaySound("do.wav",NULL,SND_ASYNC);
    if(key=='2')PlaySound("re.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySound("mi.wav",NULL,SND_ASYNC);
    if(key=='4')PlaySound("fa.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySound("so.wav",NULL,SND_ASYNC);
}
int main(int argc,char**argv)
{
    mp3.Load("music.mp3");
    mp3.Play();
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Wee10 Sound");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}
更厲害的? 沒問題 現在可以編播音樂邊彈鋼琴囉

#include "CMP3_MCI.h"
CMP3_MCI mp3;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')PlaySound("do.wav",NULL,SND_ASYNC);
    if(key=='2')PlaySound("re.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySound("mi.wav",NULL,SND_ASYNC);
    if(key=='4')PlaySound("fa.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySound("so.wav",NULL,SND_ASYNC);
}
void mouse (int button,int state,int x,int y)
{
    if(state==GLUT_DOWN)PlaySound("shot.wav",NULL,SND_ASYNC);
}
int main(int argc,char**argv)
{
    mp3.Load("music.mp3");
    mp3.Play();
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Wee10 Sound");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);
    glutMainLoop();
}
彈鋼琴彈到一半突然想扣板機? 你說的算 參考上述程式碼 滑鼠一按你就是johnwick


2021年4月14日 星期三

week09

 












加背景囉!!

#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可

#include <opencv/cv.h>

#include <GL/glut.h>

GLuint id1, id2; ///TODO:增加2個 貼圖ID

int myTexture(char * filename)

{

    IplImage * img = cvLoadImage(filename); ///OpenCV讀圖

    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)

    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能

    GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID

    glGenTextures(1, &id); /// 產生Generate 貼圖ID

    glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);

    return id;

}

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    glBindTexture(GL_TEXTURE_2D, id1);

    glutSolidTeapot(0.3);


    glBindTexture(GL_TEXTURE_2D, id2);

    glBegin(GL_POLYGON);

        glTexCoord2f( 1, 1 ); glVertex2f( -1, -1 );

        glTexCoord2f( 1, 0 ); glVertex2f( -1, +1 );

        glTexCoord2f( 0, 0 ); glVertex2f( +1, +1 );

        glTexCoord2f( 0, 1 ); glVertex2f( +1, -1 );

    glEnd();

    glutSwapBuffers();

}

int main(int argc, char** argv)

{

    glutInit( &argc, argv );

    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );

    glutCreateWindow(" Week08 ");

    glutDisplayFunc(display);


    id1 = myTexture("1.jpg");

    id2 = myTexture("2.jpg");

    glEnable(GL_DEPTH_TEST);

    glutMainLoop();

}

是不是看膩平面圖了??????
來打光變成立體的拉
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };

const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };

這些放在int main前面
glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
這些呢放在第56行
就是最後一個框框的glEnable(GL_DEPTH_TEST);後面

2021年4月7日 星期三

week07

 https://openprocessing.org/sketch/1157158

互動遊戲!!















opcv注意事項!

(1)Search directories新增:
  •  Compiler:  C:\OpenCV2.1\include
  •  Linker: C:\OpenCV2.1\lib
(2)Linker settings新增:
  •  cv210  ,cxcore210  ,highgui210



找一張圖片要記得存在freeglut/bin

#include <opencv/highgui.h>

int main(int argc, char**grav)

{///大寫I小寫pl大寫I

    IplImage*img = cvLoadImage("bear.jpg");

    cvShowImage("bear photo", img);

    cvWaitKey(0);

}

圖片忘記存但反正就是一張照片的拉



#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可

#include <opencv/cv.h>

#include <GL/glut.h>

void init()

{

    IplImage * img = cvLoadImage("1.jpg"); ///OpenCV讀圖

    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)

    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能

    GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID

    glGenTextures(1, &id); /// 產生Generate 貼圖ID

    glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);

}   ///最後一行最難/最重要, 所貼圖影像的資料都設定好

static void display(void)

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidTeapot(0.3);

    glutSwapBuffers();

}



int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("加油");

    glutDisplayFunc(display);


    init();

    glutMainLoop();

}




















把圖片加進球型裡面轉動

記得程式碼是angle++!!!


#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可

#include <opencv/cv.h>

#include <GL/glut.h>

GLUquadric * quad;///TODO: Quad

void init()///copy 自 http://hackmd.io/@jsyeh/opengl

{

    IplImage * img = cvLoadImage("1.jpg"); ///OpenCV讀圖

    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)

    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能

    GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID

    glGenTextures(1, &id); /// 產生Generate 貼圖ID

    glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);

    quad = gluNewQuadric();///TODO: Quad

}   ///最後一行最難/最重要, 所貼圖影像的資料都設定好

float angle=0;///TODO:

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///自動轉很帥///TODO:

        glRotatef(90, 1,0,0);///TODO:

        glRotatef(angle, 0,0,1);///自動轉很帥///TODO:

        gluQuadricTexture(quad, 1);///TODO:

        gluSphere(quad, 0.5, 30, 30);///glutSolidTeapot(0.3);///TODO:

    glPopMatrix();///自動轉很帥///TODO:

    ///glutSolidTeapot(0.3);

    glutSwapBuffers();

    angle++;///TODO:

}

int main(int argc, char** argv)

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week07 texture");

    glutDisplayFunc(display);

    glutIdleFunc(display);///TODO:

    glEnable(GL_DEPTH_TEST);///TODO: 有3D的深度測試(前面會蓋掉後面)

    init();///上面把OpenGL都設好後, 才設定 OpenCV 的貼圖到 OpenGL上面

    glutMainLoop();

}






















地球儀!!!!!!!!!!!!




距地表面160 Week11

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