顯示具有 08160714_陳昕宇 標籤的文章。 顯示所有文章
顯示具有 08160714_陳昕宇 標籤的文章。 顯示所有文章

2021年5月5日 星期三

Week11_Model

第一節課 

1.Moodle下載範例
  • source.zip
  • windows.zip
  • data.zip
  • 解壓縮全部
2.建立Transformation.exe
  • 建立並設定好GLUT專案
  • source.zip裏的檔案加進去
  • glm.h放同目錄(桌面的glut專案文件夾)
  • glm.c更改檔名為glm.cpp
  • 打開transformation.c檔案并將其内容複製到main.cpp裏
  • 再將glm.cpp加入到glut專案(若加入後執行程式閃退即代表成功
3.把data.zip裏的檔案,放入執行目錄(freeglut\bin)
4. 親手打造 20行程式 
  •  #include "glm.h" //要雙引號用同目錄的.h檔, 使用外掛
  • GLMmodel * pmodel; //使用指標pmodel
  • 畫模式, 使用 glm系列的函式glmReadOBJ(), glmDraw() ....
  • void display()
  • int main()
5. 加入打光的整合哦!!!
  • 從 blog 拿出 打光的陣列 (pos的z有改)
  • 從 blog 拿出 打光的設定 (要有 GL_DEPTH_TEST)
  •  把模型轉 180度

我們改用 Gundam 的模型 gundam還沒有切開.zip
把 Gundam.obj Gundam.mtl 放在 freeglut\bin\目錄

6. 整合貼圖 用 Week08的貼圖函式
  •  myTexture()
  •  在 main() 的 glutMainLoop()之前 myTexture("Diffuse.jpg")
  • 安裝 OpenCV 2.1, 小心 PATH
CodeBlocks 的 Setting-Compiler要設好多東西C:\OpenCV2.1\include
C:\OpenCV2.1\lib
cv210 cxcore210 highgui210
再重開 CodeBlocks即可!!!!

7. 老師傳給你的 gundam.zip 檔, 對應 gundam 目錄
  •  用 CodeBlocks 開啟 gundam.cbp 專案檔
  • 只要 OpenCV有裝好, 就可以有 彩色的 gundam出來


2021年3月31日 星期三

week06

  #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(1);  ///todo:畫個方塊

    glPopMatrix();

    glutSwapBuffers();

    angle++;

}

int main(int argc,char ** argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("08160714");

    glutDisplayFunc(display);

    glutIdleFunc(display);    ///todo:閑的沒事幹就重畫畫面

    glutMainLoop();

}

它在轉




#include <GL/glut.h>
float angle=0;   ///TODO:
void hand()
{
    glPushMatrix();
    glScalef(0.5,0.1,0.1);///細長的
    glColor3f(0,0,1);///藍色的
    glutSolidCube(1);///方塊
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,1);
    glutSolidCube(1);///大身體
    glPushMatrix();
        glTranslatef(0.5,0.5,0);///整個移到右上角挂著
        glRotatef(angle,0,0,1;///對中心轉動
        glTranslatef(0.25,0,0);///把關節移到中心
        hand();///細長的藍色的小手
    glPopMatrix();
    glutSwapBuffers();
    angle++;///TODO;
}
int main(int argc,char ** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("08160714");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}
2只手
glPushMatrix();
    ...
    glPushMatrix();
      ...
    glPopMatrix();
  glPopMatrix();
階層轉動



2021年3月24日 星期三

week05

 

上周的transformation

以及所需記憶的程式碼
先移再轉v.s先轉再移
正常情況下translate第一變數改變為x軸
swap以後translate第一變數改變為z軸









2021年3月17日 星期三

 

茶壺(查詢坐標)

#include <GL/glut.h>  ///使用glut外挂

#include <stdio.h>  ///todc:因爲要printf()

 

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); ///清空

    glutSolidTeapot(0.3);

    glutSwapBuffers(); ///交換兩倍的buffers

}

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

{ ///todc:,,右鍵 , x坐標 y坐標

    printf("button:%d  state:%d  x:%d  y:%d\n",button,state,x,y);

} ///TODC:印出這些值,觀察

int main(int argc,char ** argv)

{

    glutInit(&argc,argv); ///glut初始設定

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);///顯示模式

    glutCreateWindow("08160714");///開窗

    glutDisplayFunc(display);///等一下要顯示的函式

    glutMouseFunc(mouse);///TODC:我們注冊mouse函式

    glutMainLoop();///主要迴圈

}




 

畫圖

 



#include <GL/glut.h>///使用glut外挂

int N=0,vx[3000],vy[3000];

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///清空

    glBegin(GL_LINE_LOOP);

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

        glVertex2f( (vx[i]-150)/150.0,-(vy[i]-150)/150.0  );

    }       ///減一半,再除一半               減一半,再除一半,加負號

    glEnd();

 

    glutSwapBuffers();交換兩倍的buffers

}

void motion(int x,int y)

{///mouse motion 再拖動它

    vx[N]=x; vx

    vy[N]=y; vy

    N++;

    display();///邊動mouse motion 邊畫display()

}

int main(int argc,char ** argv)

{

    glutInit(&argc,argv); ///glut初始設定

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);///顯示模式

    glutCreateWindow("08160714");///開窗

    glutDisplayFunc(display);///等一下要顯示的函式

    glutMotionFunc(mouse);///TODC:mouse motion在動

    glutMainLoop();///主要迴圈

}

 


 




 

三坐標

Translate   xyz坐標     大小不動,角度不懂

Rotate    旋轉角度(angle,x,y,z)     大小不動,坐標不動

Scale    縮放大小      坐標不動,角度不動




距地表面160 Week11

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