顯示具有 08160873_邱義勝 標籤的文章。 顯示所有文章
顯示具有 08160873_邱義勝 標籤的文章。 顯示所有文章

2021年6月19日 星期六

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

 課堂一開始複習老師教的,先做一個茶壺,程式碼如下:

#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(); } int main( int argc, char ** argv ) { glutInit( &argc, argv); glutInitWindowSize(500,500);///視窗大小 glutInitWindowPosition(0,0);///視窗位置 glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH); glutCreateWindow("week17 review"); glutDisplayFunc(display); glutMainLoop();

   }

接著打光,如下圖,程式碼也如下:


#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 };///打光的程式要放在main之前


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(450 ,450);///視窗大小


    glutInitWindowPosition(0,0);///視窗位置


    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);


    glutCreateWindow("week17 review");




    glutDisplayFunc(display);


    glEnable(GL_DEPTH_TEST);///深度偵測要開


    glDepthFunc(GL_LESS);///要放在main loop之前




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

}

接下來的任務是!!!!加入一個茶壺,並且讓滑鼠可以跟著轉動,其程式碼如下:

#include <GL/glut.h>
float angle=90;
float oldX=0;
void mouse(int button, int state, int x, int y){
    oldX = x;
}
void motion( int x, int y ){
    angle += x-oldX;
    oldX = x;
    glutPostRedisplay();///重畫畫面
}
void display(){
    glClearColor( 1,0,0,0);///用來Clear的Color 用紅色
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glColor3f( 1,1,0 );
        glutSolidTeapot( 0.3 );///身體先註解掉身體,只看手臂
        glPushMatrix();
            glTranslatef(-.3, 0, 0);///(3)再把轉動中的手臂,掛到肩上
            glRotatef(angle, 0,0,1);///(2)再轉動它
            glTranslatef(-.3, .1, 0);///(1)移動旋轉中心,放正中心
            glutSolidTeapot(0.3);///左手臂
        glPopMatrix();
    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 )
{
    glutInit( &argc, argv);
    glutInitWindowSize(300,300);
    glutInitWindowPosition(700,200);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week17 review");

    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    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();
}
下個步驟就是加入按數字,可以控制關節,程式碼如下:
#include <GL/glut.h>
#include <stdio.h>
FILE * fout = NULL;
FILE * fin = NULL;
float angle[20]={};///先都設成0
int angleID=0;///現在要動的關節是誰?
void keyboard(unsigned char key, int x, int y){
    if(key=='0') angleID=0;
    if(key=='1') angleID=1;
    if(key=='2') angleID=2;
    if(key=='3') angleID=3;
    if(key=='4') angleID=4;
    if(key=='5') angleID=5;
    if(key=='6') angleID=6;
    if(key=='s'){///存檔
        if( fout==NULL ) fout = fopen("angle.txt", "w+");
        for(int i=0; i<20; i++) fprintf(fout, "%.2f ", angle[i]);
        fprintf(fout, "\n");
        printf("save angle.txt\n");
    }else if(key=='r'){///讀檔 (不能和存檔同時做,因angle.txt不能開2次)
        if( fin==NULL ) fin = fopen("angle.txt", "r");
        for(int i=0; i<20; i++) fscanf(fin, "%f", &angle[i]);
        glutPostRedisplay();///重畫畫面
        printf("read angle.txt\n");
    }
}///如果關節很多, 可能要用迴圈來讓程式只要2行 for(int i=0; i<10; i++)
///可能也要用到英文字母
float oldX=0;
void mouse(int button, int state, int x, int y){
    oldX = x;
}
void motion( int x, int y ){
    angle[angleID] += x-oldX;///0: angle[0], 1: angle[1]..
    oldX = x;
    glutPostRedisplay();///重畫畫面
}
void display(){
    glClearColor( 1,0,0,0);///用來Clear的Color 用紅色
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glColor3f( 1,1,0 );
        glutSolidTeapot( 0.3 );///身體先註解掉身體,只看手臂
        glPushMatrix();///左半邊
            glTranslatef(-.3, 0, 0);///(3)再把轉動中的手臂,掛到肩上
            glRotatef(angle[0], 0,0,1);///(2)再轉動它
            glTranslatef(-.3, .1, 0);///(1)移動旋轉中心,放正中心
            glutSolidTeapot(0.3);///左手臂
            glPushMatrix();
                glTranslatef(-.3, 0, 0);///(3)再把轉動中的手臂,掛到肩上
                glRotatef(angle[1], 0,0,1);///(2)再轉動它
                glTranslatef(-.3, 0, 0);///(1)移動旋轉中心,放正中心
                glutSolidTeapot(0.3);///左手肘
            glPopMatrix();
        glPopMatrix();
        glPushMatrix();///右半邊
            glTranslatef(+.3, 0, 0);///(3)再把轉動中的手臂,掛到肩上
            glRotatef(angle[2], 0,0,1);///(2)再轉動它
            glTranslatef(+.3, .1, 0);///(1)移動旋轉中心,放正中心
            glutSolidTeapot(0.3);///右手臂
            glPushMatrix();
                glTranslatef(+.3, 0, 0);///(3)再把轉動中的手臂,掛到肩上
                glRotatef(angle[3], 0,0,1);///(2)再轉動它
                glTranslatef(+.3, 0, 0);///(1)移動旋轉中心,放正中心
                glutSolidTeapot(0.3);///右手肘
            glPopMatrix();
        glPopMatrix();
    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 )
{
    glutInit( &argc, argv);
    glutInitWindowSize(300,300);
    glutInitWindowPosition(700,200);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week17 review");

    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    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();
}















2021年6月10日 星期四

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

 這是第一次的遠距上課,有些不習慣,但應該很快就可以適應拉!!

這次上課的課程是沿用第八周的打光程式碼:

#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <GL/glut.h>
GLuint id1, id2;
int myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename);
    cvCvtColor(img,img, CV_BGR2RGB);
    glEnable(GL_TEXTURE_2D);
    GLuint id;
    glGenTextures(1, &id);
    glBindTexture(GL_TEXTURE_2D, id);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    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, 0 ); glVertex2f( -1, -1 );
        glTexCoord2f( 0, 1 ); glVertex2f( -1, +1 );
        glTexCoord2f( 1, 1 ); glVertex2f( +1, +1 );
        glTexCoord2f( 1, 0 ); glVertex2f( +1, -1 );
    glEnd();
    glutSwapBuffers();
}
int main(int argc, char** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow(" Week13 ");
    glutDisplayFunc(display);

    id1 = myTexture("Diffuse.jpg");
    id2 = myTexture("bg.jpg");
    glEnable(GL_DEPTH_TEST);
    glutMainLoop();
}
使用Notepad++改cbp檔:
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel = NULL;
GLuint id1, id2; ///TODO:增加2個 貼圖ID
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);
}
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);
    drawmodel();///glutSolidTeapot(0.3);
    glBindTexture(GL_TEXTURE_2D, id2);
    glBegin(GL_POLYGON);
        glTexCoord2f( 0, 0 ); glVertex2f( -1, -1 );
        glTexCoord2f( 0, 1 ); glVertex2f( -1, +1 );
        glTexCoord2f( 1, 1 ); glVertex2f( +1, +1 );
        glTexCoord2f( 1, 0 ); glVertex2f( +1, -1 );
    glEnd();
    glutSwapBuffers();
}
int main(int argc, char** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow(" Week13 ");
    glutDisplayFunc(display);
    id1 = myTexture("diffuse.jpg");
    id2 = myTexture("bg.jpg");
    glEnable(GL_DEPTH_TEST);
    glutMainLoop();
}


2021年6月9日 星期三

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

 把15周的程式碼拿來作使用

再來讀入"angle.txt" ,程式碼如下:圖1

#include <stdio.h>

#include <GL/glut.h>

float angle[20]={},diff=2;

int angleID=0; ///現在要改第幾個角度

int oldx=0;

FILE*fout = NULL;

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

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();///播放動畫,重畫畫面

}

void mouse (int button,int state,int x,int y)

{

    oldx=x;///mouse按下去時,記下位置

}

void motion(int x,int y)

{

    angle[angleID]+=x-oldx;

    oldx=x;///更新位置

    glutPostRedisplay();


    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");

}

void keyboard(unsigned char key,int x,int y)

{

    if (key == '0') angleID=0;

    if (key == '1') angleID=1;

    if (key == '2') angleID=2;

    if (key == '3') angleID=3;

}

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glutSolidTeapot( 0.3 );///身體

        glPushMatrix();///左半邊

            glTranslatef(-0.3,0,0);///(3)掛在正確的地方

            glRotatef(angle[0],0,0,1);///(2)旋轉

            glTranslatef(-0.3,0,0);///(1)把關節放到正中心

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

                glPushMatrix();

                    glTranslatef(-0.3,0,0);///(3)掛在正確的地方

                    glRotatef(angle[1],0,0,1);///(2)旋轉

                    glTranslatef(-0.3,0,0);///(1)把關節放到正中心

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

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

                glPopMatrix();

        glPopMatrix();

        glPushMatrix();///右半邊

            glTranslatef(+0.3,0,0);///(3)掛在正確的地方

            glRotatef(angle[2],0,0,1);///(2)旋轉

            glTranslatef(+0.3,0,0);///(1)把關節放到正中心

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

                glPushMatrix();

                    glTranslatef(+0.3,0,0);///(3)掛在正確的地方

                    glRotatef(angle[3],0,0,1);///(2)旋轉

                    glTranslatef(+0.3,0,0);///(1)把關節放到正中心

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

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

                glPopMatrix();

        glPopMatrix();

    glPopMatrix();

    glutSwapBuffers();

}

int main( int argc, char ** argv )

{

    glutInit( &argc, argv );

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week15 file");


    glutMotionFunc(motion);

    glutDisplayFunc(display);

    glutKeyboardFunc(keyboard);

    glutMouseFunc(mouse);

    glutTimerFunc(0,timer,0);

    glutMainLoop();

}

圖1:




接著要做的事情:使用按鍵來讀入!!!!

///把新專案 week16 的程式刪掉

///再把 Week15_file 的 main.cpp 拿來用

#include <stdio.h>

#include <GL/glut.h>

float angle[20]={}, diff=2;///Step05 本來只有1個角度,現在有很多個,初始為0

int angleID=0; ///Step05 現在要改第幾個角度!!!

int oldX=0;

FILE * fout = NULL;

FILE * fin = NULL;///Step02-2 播放動畫,檔案指標fin

void timer( int t ){

//    glutTimerFunc( 30, timer, t+1 );///Step02-2 播放動畫

//    if( fin==NULL ) fin = fopen( "angle.txt", "r" );///Step02-2

//    for(int i=0; i<20; i++) fscanf( fin, "%f", & angle[i] );///Step02-2

//    glutPostRedisplay();///Step02-2 播放動畫 重畫畫面

}

void mouse(int button, int state, int x, int y){

    oldX = x;///當mouse按下去時,記下位置

}

void motion(int x, int y){///當我motion動

    angle[angleID] += x - oldX;///用x-oldX

    oldX = x;///再更新位置

    glutPostRedisplay();///現在這個比較好, 以前會用 display()重畫


//    if(fout==NULL) fout=fopen("angle.txt", "w+");

//    for(int i=0; i<20; i++) fprintf( fout, "%.1f ", angle[i]);

//    fprintf( fout, "\n");///以上2行,寫到檔案

//    for(int i=0; i<20; i++) printf( "%.1f ", angle[i]);

//    printf( "\n");///以上2行,印到畫面 (讓你知道印了什麼資料)

}

void keyboard( unsigned char key, int x, int y){ ///Step05

    if(key=='0') angleID=0; ///Step05

    if(key=='1') angleID=1; ///Step05

    if(key=='2') angleID=2; ///Step05

    if(key=='3') angleID=3; ///Step05

    if(key=='s'){///save存檔, 把所有的動作存檔後,要關掉

        if(fout==NULL) fout=fopen("angle.txt", "w+");

        for(int i=0; i<20; i++) fprintf( fout, "%.1f ", angle[i]);

        fprintf( fout, "\n");///以上2行,寫到檔案

        for(int i=0; i<20; i++) printf( "%.1f ", angle[i]);

        printf( "\n");///以上2行,印到畫面 (讓你知道印了什麼資料)

    }

    if(key=='r'){///read讀檔, 再開之後,才能讀檔

        if( fin==NULL ) fin = fopen( "angle.txt", "r" );///Step02-2

        for(int i=0; i<20; i++) fscanf( fin, "%f", & angle[i] );///Step02-2

        glutPostRedisplay();///Step02-2 播放動畫 重畫畫面

    }

    if(key=='p'){///play利用timer整個播放, 再開之後,才能讀檔


    }

}

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glutSolidTeapot( 0.3 );///身體

        glPushMatrix();///左半邊

            glTranslatef(-0.3,0,0);///(3)掛在正確的地方

            glRotatef(angle[0], 0,0,1);///(2)旋轉 ///Step05

            glTranslatef(-0.3,0,0);///(1)把關節旋轉中心放到畫面中心

            glutSolidTeapot( 0.3 );///左手臂(沒有重疊)

            glPushMatrix();

                glTranslatef(-0.3,0,0);///(3)掛在正確的地方

                glRotatef(angle[1], 0,0,1);///(2)旋轉 ///Step05

                glTranslatef(-0.3,0,0);///(1)把關節旋轉中心放到畫面中心

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

            glPopMatrix();

        glPopMatrix();

        glPushMatrix();///右半邊

            glTranslatef(+0.3, 0,0 );

            glRotatef(-angle[2], 0,0,1);

            glTranslatef(+0.3, 0,0);

            glutSolidTeapot( 0.3 );///右手臂

            glPushMatrix();

                glTranslatef(+0.3, 0,0 );

                glRotatef(-angle[3], 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");


    glutMouseFunc(mouse);

    glutMotionFunc(motion);

    glutKeyboardFunc(keyboard);///Step05 整合很多關節,會去改angleID

    glutTimerFunc(0, timer, 0);///Step04-2 設第1個timer做動畫

    glutDisplayFunc(display);

    glutMainLoop();

}




2021年5月12日 星期三

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

 第一節課老師教我們下載 3Dexploring 如圖1

圖1
接著載 2021資料夾裡面的gundam並於 3Dexploring 開啟 其圖片是一張鋼彈勇士!!!如下圖




2021年5月5日 星期三

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

 第一節課老師帶大家

建立出自己的 Transformation.exe

Step1.載好glut專案 

Step2.source.zip加入

glm.h 放同目錄 (桌面的week11_model專案目錄)

glm.c  改為glm.cpp

transformation.c 內容放到 main.cpp

把 data.zip 裡的檔案, 放入執行目錄

  (in .... 桌面\freeglut\bin)

開啟glm.cpp



接著複製程式碼
如下圖
下一步加入打光
如下圖






2021年3月31日 星期三

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

今日第一節課首先開啟上禮拜程式碼加以簡化,使得執行時方塊自動旋轉 如(圖1)
圖1:
第二節課首要任務是將關節移到正中心如(圖2)
圖2:
將手移動到右上即可轉動(圖3)
圖3:
新增一個手肘使兩個手臂都能旋轉(圖4)
新增左半邊手臂(圖5)
圖5:









距地表面160 Week11

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