顯示具有 08160041_郭竣昇 標籤的文章。 顯示所有文章
顯示具有 08160041_郭竣昇 標籤的文章。 顯示所有文章

2021年5月12日 星期三

NEKO's Computer Graphics_week12

 

    


    還是早安


    首先處理上周沒出現的模型(使用 3D Exploration)

    下載軟體後,把模型丟進去長這樣:

    

    然後匯出 .cpp檔(這個有點厲害),等等會用到這個模型的程式:


    

    然後開啟GLUT專案,bin改在同目錄,複製貼上

    定義 #define GL_BGR_EXT 0x80E0    #define GL_BGRA_EXT 0x80E1

    再把 Palette的兩行註解,結果如下:

    

                                                                        模型其實會跳

    

    不想讓模型跳動,所以我們去修改程式碼

    把一堆旋轉刪掉,縮放值固定,只做橫向旋轉:

 



   接著為了旋轉關節,使用3D建模程式(這裡用MAYA)裁切關節:

    



    然後切好之後要匯出obj檔

    因為老師有提供,所以這個先跳過

    再來開新的專案,把打光函數和主程式留下來,還是那個茶壺:

    


    再把上周的glm程式擴充加進來,不過時間不夠,好像又卡在上週那裡了

    下周見

    






2021年5月5日 星期三

NEKO no Computer Graphics_week11

     



    早安

    今天要匯入模型,首先要建置專案:

    



    前面環境配置如上,執行main會閃一下


    原因:缺obj模型檔,把老師給的資料放入:

    


    這是上次的t-r-t程式碼...


    我們從其中找到 GLMmodel * pmodel=NULL ,drawmodel()複製使用

    在加以前的display()和main(),執行結果如下:

    


    display() 去執行 drawmodel() ,讀到的是Al.obj檔

    然後加上打光(複製week08):


    轉180度:
                            




    然後本來是要喬剛彈的模型,但老師的程式碼出了一點問題

    用別的程式碼演示一下最後的成果:

    



     



感覺今天都在抄碼...

88



2021年4月28日 星期三

NEKO no Computer Graphics_week10

     
    


    早安    

    首先要匯入音檔

    


    PlaySound(檔名,NULL(空指標),SND_SYNC(等待同步))播放一段聲音,是在windows.h裡的函式

    但是有個問題,它會把整個音檔播完,如果音檔有空,下一段聲音會有時間差距

    做了按鍵控制播放1.0:

    


    缺點是要按enter才會有聲音(getchar()函式的屬性)

    我只能說glut很猛,可以直接鍵入,就用glut做了2.0:

    


    glutKeyboardFunc(函式名);建立按鍵控制鍵入

    有兩個問題,一個是沒有和弦,另一個是不能讀mp3

    先讀mp3,使用CMP3_MCI.h頭檔放入專案,檔案老師給的,可能要再自己找載點

    


    頭檔放專案檔裡,include 頭檔, 做一個mp3的型別(CMP_MCI mp3)

    mp3.Load(檔名)| 讀檔 mp3.play(); 播放| mp3.XXX意思是使用型別變數mp3內XXX的功能

    

    加上滑鼠控制射擊音:

    


    原理都差不多,加上滑鼠控制一個射擊音效這樣

    搞定mp3後,再搞定和弦的問題

    用mp3的頭檔一樣可以讀wav,也可以解決不能重疊的問題:

    



    今天差不多到這裡,Tnx

2021年4月14日 星期三

NEKO's Computer Graphics_week08

 


      早安


    review: openCV 匯入&讀入圖檔

    1. Compiler>Search directories>compiler>add(:C/opencv2.1/include)

    2. Compiler>Search directories>linker>add(:C/opencv2.1/lib)

    3. Compiler>Linker setting>add(cv210,cxcore210,highgul210)

    

    匯入上週程式碼:

    


     這週首先要加上背景

    搞了好久,弄出來長這樣

    


    嗯,真的很醜

    

    好啦,先不管這個,下面要做打光

    先看打光體驗營:


    控制參數很複雜,自己研究一下


    然後我們參考glut範例程式剪貼

    然後修改參數得出結果:

    


    可以看到3D的效果更明顯了

    今天大概就這樣

    88

    



2021年4月7日 星期三

NEKO no Computer Graphics_week07

     

   


    早安

    今天要學貼圖

    首先要讀入圖片

    我們使用opencv的功能來做讀

    於是先下載opencv,載完之後設定codeblocks:

    1. Compiler>Search directories>compiler>add(:C/opencv2.1/include)

    2. Compiler>Search directories>linker>add(:C/opencv2.1/lib)

    3. Compiler>Linker setting>add(cv210,cxcore210,highgul210)

    

    設定完之後,就可以寫程式了,程式如下:

    

#include <opencv/highgui.h>//讀入opencv標頭檔
int main()
{
    IplImage * img = cvLoadImage("NEKO.jpg");//把圖放進(freeglut/bin),用IplImage設立變數並讀入
    cvShowImage("NEKO",img);//開視窗並顯示圖片
    cvWaitKey(0);//持續視窗
}

    寫完上面的碼

    接著去複製其他源碼(要貼圖的碼太複雜):

可以看到,圖貼在茶壺上很怪

    

    然後把茶壺刪掉,自己貼一個原圖:

    

一開始先熟悉貼圖,就不做花樣了

    glTexCoord2f(tx,ty)代表貼圖的座標

    用多邊形描點畫出來並貼圖


    貼圖座標(黃點對應程式):

    

    


    
補充:旋轉地球:
#include <opencv/highgui.h> 
#include <opencv/cv.h>
#include <GL/glut.h>
GLUquadric * quad;
void init()
{
    IplImage * img = cvLoadImage("圖檔名");
    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);
    quad = gluNewQuadric();
}  
float angle=0;
void display()
{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(90, 1,0,0);
        glRotatef(angle, 0,0,1);
        gluQuadricTexture(quad, 1);
        gluSphere(quad, 0.5, 30, 30);///glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
    angle++;
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week07");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glEnable(GL_DEPTH_TEST);
    init();

    glutMainLoop();
}



 886



2021年3月31日 星期三

NEKO no Computer Graphics_week06

     今天不放封面了


    首先畫一個正方形,讓它旋轉

    




    然後先處裡細節的部份

    畫一個藍色長條

    glScalef(x,y,z) 改變cube的變形

    
    

    應用上周的觀念
    
先移後轉

先轉後移


    
    然後把兩個觀念合併
    
    像這樣:
    


    先移旋轉中心點,旋轉時再移動物體位置

    以白色方塊為身體作出手臂感
    
    同時把藍條寫成函式hand()方便代入
    
    接著讓手臂變成兩節:


    再寫一個陣列階層,使他接著第一節手臂做旋轉

    因為要融入畫面,所以把數值都改小了

    兩個手臂:複製改數值

    結果如下:
    


    前面沒跟到課有點可惜

    只好無師自通了= =

    下周見




    
    
    
    

2021年3月24日 星期三

NEKO no Computer Graphics_week05


    早安

    (練習網址:https://120.125.80.50/GL/)


    這周要接續上周的內容


    上次的程式的移動旋轉


    其實可以交換移動和旋轉的程式 會有不同的結果


    程式碼要從下面讀到上面


    下面兩張圖是交換程式碼的差別


1.先做縮放,再做旋轉,最後再移動
2.一樣先縮放,再做移動,最後旋轉
    

    第一種是旋轉完再移動,旋轉軸是固定的,移動的值比較像座標系


    而第二種移動再旋轉,先移動遠離旋轉軸,再以旋轉軸為中心旋轉


    所以結果就會不一樣,下圖是解釋






    

    了解這個概念,接著就要寫程式了

    首先把上周程式叫出來



    增加了旋轉 glRotatef(a,x,y,z),也使用了很多新東西

    



    有用KeyBoard函式,glPushMatrix()/glPopMatrix()保存陣列才能正常移動

    只要按著按鍵就能旋轉

    時間的關係今天就到這裡

    下次見

    




    





2021年3月17日 星期三

NEKO no Computer Graphics_week04


     又見面了

    首先來展示一下前幾周的成果


    我知道這隻貓怪怪的

    想辦法畫的很像了

    對於座標系統真的沒有想法

    

    還有架網站的伏筆要下周回收了...


    回到正題

    今天一開始要學滑鼠的控制

    首先建立函數 glutMouseFunc( mouse(名稱可以自訂) );

    然後補函數 void mouse(int button,int state,int x,int y){}

    四個值印出分別如下:


    button代表滑鼠按鍵類型,state代表滑鼠按下(1)/放開(0)的狀態,x/y則是按下的座標

    然後是滑鼠的移動數據,我們用motion函式來處理

    glutMotionFunc(motion) 設定 motion函式

    motion(int x,int y) x/y紀錄座標

    使用陣列+迴圈用來描點再靠glVertex畫出來:

    


    畫完圖之後,嘗試了解3D的移動旋轉和縮放

    老師給了一個程式,以方便模擬:



    glTranslatef(x,y,z); x/y/z=x/y/z軸位移量

    glRotatef(a,x,y,z); a=旋轉角度,x/y/z=旋轉軸參數(用右手定則來理解,指向三個值的向量)

    glScalef(x,y,z) x/y/z=以x/y/z軸做縮放


    今天大概也很充實吧

    下周見嘍


2021年3月10日 星期三

NEKO no Computer Graphics_week03




    今天介紹github的使用,放程式碼很方便

    先註冊完帳號,然後新增一個專案

    把之前開過的兩個專案資料夾丟進去就搞定了


    首先練習畫了一個圓

    與上週不同的是這次是先用函式打參數



    再來複習了上週的寫法
    
    並且作了優化

    然後我想說複習一下三角函數的觀念

    就畫了一個倒三角形

    用角度的觀念來定位座標,就順利完成了





下集預告:人生第一個.io網頁

距地表面160 Week11

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