顯示具有 04162495_徐欣 標籤的文章。 顯示所有文章
顯示具有 04162495_徐欣 標籤的文章。 顯示所有文章

2017年6月13日 星期二

#week17- tp6vü[電腦圖學上課筆記]

[1]
程式碼:

void display()
{   
glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
    glClear(GL_COLOR_BUFFER_BIT  | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glBegin(GL_POLYGON);
            glTexCoord2f(0,0); glVertex3f(-1,+1,0);///前面是貼圖座標後面是3D頂點
            glTexCoord2f(1,0); glVertex3f(+1,+1,0);
            glTexCoord2f(1,1); glVertex3f(+1,-1,0);
            glTexCoord2f(0,1); glVertex3f(-1,-1,0);
        glEnd();
    glPopMatrix();
    glFlush();
}


另外必須先下載OpenCV 2.1 並安裝到桌面
還需要cv210 / cxcore210 / highgui210 這三個檔案

void myInit()
{
    quad = gluNewQuadric();
    id = myTexture("images.jpg");///id為貼圖,這樣就可以讀到貼圖的路徑

}

[2]

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;

}

這也是有關貼圖的程式碼

#week16- tp6vü[電腦圖學上課筆記]

[1]程式碼:

if(key=='s')///儲存的意思

 {

fout = fopen("file.txt","a");///打開記事本

fprintf(fout,"%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f\n\n",
                    angle[0],angle[1],angle[2],angle[3],angle[4],angle[5],angle[6],angle[7],angle[8],angle[9]);///這行才是寫角度進去
printf("%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f\n\n",
                    angle[0],angle[1],angle[2],angle[3],angle[4],angle[5],angle[6],angle[7],angle[8],angle[9]);///看你有多少個模型需要動
 }
if(key=='r')///讀檔的意思

{
if(fin==NULL)
{
fin = fopen("file.txt","r");///寫入所需要的角度安排
}
 fscanf(fin,"%f %f %f %f %f %f %f %f %f %f\n",
            &Newangle[0],&Newangle[1],&Newangle[2],&Newangle[3],&Newangle[4],&Newangle[5],&Newangle[6],&Newangle[7],&Newangle[8],&Newangle[9]);
glutPostRedisplay();
}
if(key=='m')
{
glutTimerFunc(0,timer,0);
}




2017年6月4日 星期日

#week14- tp6vü[電腦圖學上課筆記]

[1]glutTimerFunc(s, timer, 0);

s是設定多久一次
timer是呼叫其函式
0是函數帶入的參數值


      
glRotatef(angle, 0,1,0);

可以使其旋轉固定角度

#week13- tp6vü[電腦圖學上課筆記]

[1]

glPushMatrix();

glTranslatef( X軸, Y.軸,0);
glRotatef(angle, 0,0,1);
glTranslatef( 將正副相反的x軸與y 軸, 0);
指定的轉動部分名字();

glPopMatrix();

#week12- tp6vü[電腦圖學上課筆記]

[1]下載 win32、data、glut32,並開啟GLUT Project


glutLookAt(eyeX,eyeY,eyeZ) ///是攝影機

Perspective(fov視野,1,near ,far) ///這行很重要,如果沒有會使圖很破碎或解體
TRT:
glTranslatef( )掛上去
glRotatef( )旋轉
glTranslatef( )固定轉動的軸心











2017年5月1日 星期一

#week11- tp6vü[電腦圖學上課筆記]

[1]先到GOOGLE查詢:3d exploration
     接著點及第一個網站,並下載

解壓縮之後,並開啟旁邊user的data資料夾

點選soccerball,就會出現足球的動畫

並在file中save as的檔案格式改成cpp,接著按下存檔

然後選擇sampleAPP

[2]先找到剛剛足球動畫的程式碼


然後將原本的程式main移除

將足球程式碼放入OpenGL資料夾內


並在project中加入此程式碼


然後開啟

[3]將程式碼執行



但必須先將此行程式碼刪掉,由於程式碼太舊,所以會造成無法執行


2017年4月24日 星期一

#week10- tp6vü[電腦圖學上課筆記]

[1]先去google搜尋:NeHe Lesson 32


然後下載 Lesson 32最下面的 Visual C++的範例

 並解壓縮,然後開啟 Lesson 32.exe的應用程式

最後就截最高分的圖

[2]先開啟一個新的GLUTproject,然後將Lesson 32的程式碼打開

加入一些程式碼,使得執行時可以發出聲音

PlaySound()是可以使執行檔發出聲音的函式
[3]先去網站找可以下載的簡單wav檔,並下載

然後在函式中宣告按1/2/3/4/5,可以發出不同的wav音檔

[4]在函式中加入一個mp3檔,使得程式執行時,可以直接播放
把下載下來的CMP3_MCI.h檔案放近正在執行的專案資料夾中

2017年4月17日 星期一

#week09- tp6vü[電腦圖學上課筆記]

[1]複習期中考試


[2]程式碼:
#include <string.h>
#include <stdlib.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel = NULL;
GLMmodel* pmodelHead = NULL;
GLMmodel* pmodelLeftHand = NULL;
GLMmodel* pmodelRightHand = NULL;

float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        angle++;
        glRotatef(angle, 0,1,0);
        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);
    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);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
    glutCreateWindow("Yes, 3D Model Here");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    glClearColor(1,1,1,1);
    //glEnable(GL_CULL_FACE);
    //glCullFace(GL_BACK);

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

這是執行後的畫面

2017年4月10日 星期一

#week08- tp6vü[電腦圖學上課筆記]

[1]老師帶我們複習期中考的範圍
[2]
程式碼:
#include <GL/glut.h>

static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        ///glTranslated(x,y,z);
        ///glRotated(angle,x,y,z);
        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, -2.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 };

/* Program entry point */

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT Shapes");


    glutDisplayFunc(display);


    glClearColor(1,1,1,1);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);

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

    return EXIT_SUCCESS;
}
結果是可以得到從不同方向打光的茶壺
[3]
程式碼:
#include <GL/glut.h>

float angle=0;
static void display(void)
{
    angle++;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslated(0,0.6,0);
        glRotated(angle,0,1,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glPushMatrix();

        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, -2.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 };

/* Program entry point */

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT Shapes");


    glutIdleFunc(display);///可以使一個茶壺轉動
    glutDisplayFunc(display);

    glClearColor(1,1,1,1);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);

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

    return EXIT_SUCCESS;
}
此程式可以製造出一個轉動的茶壺以及一個不會動的茶壺

[4]
程式碼:
#include <GL/glut.h>

float angle=0;
static void display(void)
{
    angle++;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,0,0);
    glPushMatrix();
        glTranslated(0,0.6,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glPushMatrix();
        glRotatef(angle,0,1,0);
        ///glutSolidTeapot(0.3);
        glutWireSphere(0.4,15,5);

        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, -2.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 };

/* Program entry point */

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT Shapes");


    glutIdleFunc(display);
    glutDisplayFunc(display);

    glClearColor(1,1,1,1);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);

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

    return EXIT_SUCCESS;
}

[5]
    angle++;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,0,0);
    glPushMatrix();
        glTranslated(0,0.6,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glPushMatrix();
        glRotatef(angle,0,1,0);
        ///glutSolidTeapot(0.3);
        ///glutWireSphere(0.4,15,5);
        glutSolidIcosahedron();---加上這句
        glPopMatrix();

        glutSwapBuffers();
[6]程式碼
glutSolidCone(0.5,0.2,50,50);
///Cone可以改成其他的
可以是Cube之類的


2017年3月27日 星期一

#week05- tp6vü[電腦圖學上課筆記]

[1]老師講解考試範圍

[2]先去http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/下載data / windows/  glut32.dll 
     然後將data和glut32.dll 都放進windows的解壓縮資料夾中

[3]老師播一些機器手臂和人進行比賽的影片,讓我們知道機器手臂操作的

2017年3月20日 星期一

#week04- tp6vü[電腦圖學上課筆記]

[1]先去http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/下載data / windows/  glut32.dll 
     然後將data和glut32.dll 都放進windows的解壓縮資料夾中
    

[2]先測試transformation

[3]再來開啟main,cpp程式
    然後改成
    
#include <GL/glut.h>

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(0.6, 0, 0);///第1個數值可以改變茶壺的X值
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char **argv )
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04162495 Translate Rotate Scale");

    glutDisplayFunc(display);
    ///glutMouseFunc(mouse);
    ///glutMotionFunc(motion);

    glutMainLoop();

}

[4]將程式改成
    #include <GL/glut.h>
float mouseX=0, mouseY=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(mouseX, mouseY, 0);///第1個數值可以改變茶壺的X值
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}

void motion(int x, int y)
{
    mouseX = x/300.0;
    mouseY = y/300.0;
    glutPostRedisplay();
}
int main(int argc, char **argv )
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04162495 Translate Rotate Scale");

    glutDisplayFunc(display);
    ///glutMouseFunc(mouse);
    glutMotionFunc(motion);

    glutMainLoop();

}
可以使茶壺跟著滑鼠一起動

[5]複習上禮拜的小精靈
     

[6]將程式碼改成
     #include <GL/glut.h>
float mouseX=0, mouseY=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glScalef(mouseX, mouseY, 0);///第1個數值可以改變茶壺的X值
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}

void motion(int x, int y)
{
    mouseX = (x-150)/150.0;
    mouseY = -(y-150)/150.0;
    glutPostRedisplay();
}
int main(int argc, char **argv )
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04162495 Translate Rotate Scale");

    glutDisplayFunc(display);
    ///glutMouseFunc(mouse);
    glutMotionFunc(motion);

    glutMainLoop();

}
可以讓茶壺隨著滑鼠放大縮小