顯示具有 08160935_黃于瑄 標籤的文章。 顯示所有文章
顯示具有 08160935_黃于瑄 標籤的文章。 顯示所有文章

2021年6月22日 星期二

電腦圖學week12

  安裝3D Explorer, 

   解壓縮、匯入Gundam 的 OBJ檔

左上角另存,Sample APP要勾
開一個OpenGL專案
把gundam.cpp跟gundam.bmp放到專案資料夾裡
刪掉原本的main.c
加入gundam.cpp



前面新增兩個define

#define GL_BGR_EXT 0x80E0

#define GL_BGRA_EXT 0x80E1









註解palette的兩行程式碼

///(LPLOGPALETTE) lpPalette = (LPLOGPALETTE)HeapAlloc (hHeap, 0,

/// sizeof (LOGPALETTE) + (nColors * sizeof (PALETTEENTRY)));




註解掉下面的👇

///glRotatef (30.0f, 1.0f, 0.0f, 0.0f);

///glRotatef ((GLfloat) nAngle, 0.0f, 1.0f, 0.0f);

///glRotatef ((GLfloat) nAngle2, 1.0f, 0.0f, 0.0f);

///glScalef (nSize+2.5f,nSize+2.5f,nSize+2.5f);

用我們教過的👇

glRotatef( nAngle, 0, 1, 0 );

glScalef( 3, 3, 3);

開啟 Maya,Import obj模型,選取你要的部分, Export Selection,匯成 .obj .mtl檔


電腦圖學week09

貼圖

去網路上找一張圖片存在專案檔的bin資料夾裡

#include <opencv/highgui.h>

int main()

{

    IplImage*img=cvLoadImage("1.png");

    cvShowImage("week09", 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);

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

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidTeapot(0.3);

    glutSwapBuffers();

}

int main(int argc,char** argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("Week09");

    glutDisplayFunc(display);

    init();

    glutMainLoop();

}


在茶壺後面加一個背景

現在要在背後新增一個背景

#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, 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(" Week09 ");
    glutDisplayFunc(display);

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


電腦圖學week03

 註冊GitHub帳號


畫圓形,程式碼如下:😀

一、

#include <GL/glut.h> 

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1,0,0);

    glutSolidSphere(0.5, 30, 30);///0.5是半徑

    glutSwapBuffers();

}

int main(int argc, char**argv)

{

    glutInit( &argc, argv );

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("08160935");

    glutDisplayFunc( display );

    glutMainLoop();

}



二、

用迴圈以及三角函數等分的方式去畫圓,迴圈、等分越多次就越圓

#include <GL/glut.h> 

#include <math.h> 

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1,0,0);

    glBegin(GL_POLYGON);//開始畫圖

    for( int i=0; i<30 ; i++){

        float a = 3.1415926 * 2 /30 *i;

        glVertex2f( 0.3 + 0.2*cos(a) , 0.6 + 0.2*sin(a));

    }

    glEnd();

    glutSwapBuffers();

}

int main(int argc, char**argv)

{

    glutInit( &argc, argv );

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("08160935");

    glutDisplayFunc( display );

    glutMainLoop();

}



電腦圖學week02

 #include <GL/glut.h>


void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1,0,0); 
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160935!");
    glutDisplayFunc(display);
    glutMainLoop();
}


在茶壺後面加三角形,程式碼如下: 

#include <GL/glut.h>

void display()
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  glBegin(GL_LINE_LOOP);

   glColor3f(1.0f, 0.0f, 0.0f);   glVertex2f(0.0f,   1.0f);
   glColor3f(0.0f, 1.0f, 0.0f);   glVertex2f(0.87f,  -0.5f);
   glColor3f(0.0f, 0.0f, 1.0f);   glVertex2f(-0.87f, -0.5f);
  glEnd();
    glColor3f(0.5,1,0.2); ///顏色
  glutSolidTeapot(0.3);
  glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160935!");
    glutDisplayFunc(display);
    glutMainLoop();
}


   glBegin(GL_LINE_LOOP);改成glBegin(GL_TRIANGLES);

#include <GL/glut.h>
#include <math.h> ///數學的外掛cos() sin()
static void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景

  glBegin(GL_POLYGON);

   glColor3f(1.0f, 0.0f, 1.0f);
   for(float angle=0; angle<3014159265358979*2; angle+=0.01){
    glVertex2f( 0.5*cos(angle), 0.5*sin(angle));///Vertex=頂點
   }
  glEnd();
    glColor3f(0.5,1,0.2); ///顏色
  glutSolidTeapot(0.3);
  glutSwapBuffers();///更新畫面
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160935!");
    glutDisplayFunc(display);
    glutMainLoop();
}


 


2021年6月16日 星期三

電腦圖學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(700,0);///位置

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week17 review");


    glutDisplayFunc(display);

    glutMainLoop();

}

使用打光陣列,同時要有打光的函式, 在 main()呼叫

#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(500,500);///調整視窗大小
    glutInitWindowPosition(700,0);///位置
    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();
}



先把身體註解掉,T-R-T只留下最下面的T


把 R弄好, 再把 T 及身體都放出來


程式碼:

#include <GL/glut.h>
float angle=45;
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(500,500);///調整視窗大小
    glutInitWindowPosition(700,0);///位置
    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();
}

接下來用 mouse motion 讓它轉起來

#include <GL/glut.h>
float angle=45,oldX,oldY;
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(500,500);///調整視窗大小
    glutInitWindowPosition(700,0);///位置
    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();
}

畫左手臂
右手臂也做出來
接下來要存檔、讀檔
if(key=='s'){///存檔
        if( fout==NULL ) fout = fopen("angle.txt", "w+");///write加檔案
        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");///read
        for(int i=0; i<20; i++) fscanf(fin, "%f", &angle[i]);
        glutPostRedisplay();///重畫畫面
        printf("read angle.txt\n");
    }

加入timer就會動囉!想要動得更順, 要利用 alpha 來內插



貼圖



2021年6月10日 星期四

電腦圖學week16_動畫

把上週week15的程式拿來用,先開新的GLUT專案,把程式貼上week15的main cpp程式,再利用mouse() motion()來讓angle可以動,記得要加入glutMouseFunc()glutMotionFunc()

在motion()時,順便寫檔案,也順便印到小黑畫面。記得小黑關掉後,angle txt 檔才會更新到硬碟

利用timer()來讀檔案,將angle[i]都讀進來,同時glutPostRedisplay()更新畫面,就可以播放動畫了



把 freeglut.dll 及 angle.txt 從 freeglut/bin 複製到專案目錄
註解掉原本motion()的寫檔、原本timer()的讀檔,改在keyboard()裡利用's'來存檔,'r'來讀檔,末來'p'做播放play




2021年6月2日 星期三

電腦圖學week15—機器人2.0

讓目錄正確 (因桌面/freeglut/bin 太怪了。要改到 專案目錄week15)

把 freeglut\bin 的 freeglut.dll copy到專案目錄 week15
把 Diffuse.jpg 及 bg.jpg 移到專案目錄 week15
用 Notepad++把 week15\week15.cbp 專案檔打開
       兩個working_dir 要改成 "."  再存檔
 

#include <stdio.h>

int main(int argc, char**argv)

{

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

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

    printf("Hello World\n");

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

}

print會是黑框的,fprint會是白框的


要用fscanf()時,FILE指標fin用fopen()配合模式r來讀

複製老師的程式碼,畫出熟悉的茶壺並利用timer改變角度




程式碼如下:
#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();
                glTranslatef(-0.3,0,0);///3.掛在正確的地方
                glRotatef(angle,0,0,1);///2.旋轉
                glTranslatef(-0.3,0,0);///1.把關節旋轉中心放到畫面中心
                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();
}




2021年5月26日 星期三

week14_timer與動畫

先開codeblocks的GLUT專案並備份原始的main的程式碼


#include <GL/glut.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);

    glutSolidSphere(0.3,30,30);

    glutSwapBuffers();

}

int main(int argc,char **argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week14 timer");

    glutDisplayFunc(display);

    glutMainLoop();

}

display其實是一個函式指標



加上旋轉,起床再重設鬧鐘,再上廁所再喝水,再睡著


讓他變來回旋轉


做一隻旋轉的小手臂



2021年5月19日 星期三

week13電腦圖學_robot

今天是第一次遠端上課,首先要載好freeglut.OpenCV 下載安裝

開codeblocks.glut再把老師的網址hackmd.io/@jsyeh/opengl裡的程式碼剪貼過來

CodeBlocks-Setting-Compiler
Search directories加入
Compiler: C:\OpenCV2.1\include
Linker:   C:\OpenCV2.1\lib
Linker setting 加入 3個檔案
     cv210 cxcore210 highgui210





把圖放到那個奇怪的地方freeglut/bin
,改一下程式碼



讓目錄正確 (因桌面/freeglut/bin 太怪了。要改到 專案目錄08160935)

把 freeglut\bin 的 freeglut.dll copy到專案目錄 08160935
把 Diffuse.jpg 及 bg.jpg 移到專案目錄 08160935
用 Notepad++把 08160935\08160935.cbp 專案檔打開
       兩個working_dir 要改成 "."  再存檔


glm模式
檔案準備好 source.zip (glm.h glm.cpp(改), transformation.c)
模型準備好 gundam還沒切開.zip 裡有 Gundam.obj Gundam.mtl Diffuse.jpg 
                                        


要加入程式 (在08160935專案中, Add 把 glm.cpp 加入)


用 Notepad++ 開 transformation.c 要偷裡面的程式
#include "glm.h"
GLMmodel * pmodel = NULL;
再 copy drawmodel() 的函式, 改glmReadOBJ("檔名"), 並在 display()裡叫 drawmodel()




距地表面160 Week11

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