2024年2月26日 星期一

Chen week02

 #點線面色彩

1.下載課本範例 https://jsyeh.org/3dcg10/  windows.zip及data.zip

2. 在下載資料夾,把windows.zip 解壓縮到資料夾,將data拉進去

3.執行shape.exe便可操作今天課本範例

4.mouse 右鍵,右邊可切換點線面

5..mouse 右鍵,在左邊可切換大的頂點,逐個色彩

6..mouse 左鍵,在右邊可按「綠色數字」上下調整



#要寫程式,試試看點線面色彩
1.moodle 下載freeglut
2. 安裝到桌面上
3.把桌面\freeglut\lib\libfreeglut.a複製成libglut32.a
4.CodeBlocks:file-New-project,選Glut專案目錄選桌面,專名取week02_glut_color_teapot
5.Glut要選桌面的freeglut
6.執行時 跳出上週程式
7.點開左邊的Sources的main.cpp 上周10行貼上

#漸層茶壺(設定色彩)
1.glColor3f(r,g,b)
2. 0,1,0綠色  1,0,0紅色
3.用小畫家滴管攝取色彩直
4.以阿尼亞為例,做出兩個不同顏色,不同大小的茶壺




#畫三角形
1.新增一個glut專案
2.將程式碼刪除 貼上茶壺程式碼
3.刪除上面程式碼 新增程式
4.glColor3f(r,g,d)選擇顏色和glVertex2f (x,y)角度 劃出三角形


#include <GL/glut.h>///使用GLUT外掛
 void display()
 {
     glBegin(GL_POLYGON);
        glColor3f(1,0,0); glVertex2f(0,1);
        glColor3f(0,1,0); glVertex2f(1,-0.6);
        glColor3f(0,0,1); glVertex2f(-1,-0.6);
        glEnd();
     glutSwapBuffers();
 }

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);///初始化 GLUT 140
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///143

    glutCreateWindow("GLUT Shapes");///145
    glutDisplayFunc(display);///148 display函式
    glutMainLoop();///174 迴圈
}



#用小畫家 幫我們找到「任意形狀」的頂點座標
1.開啟小畫家 圖片放上
2.小畫家座標裡,左上角是0,0 右下角是300,300(設圖片寬高400 400)
3.關於座標,OprnGl,預設是「正中間0.0」  右邊是+1  左邊是-1  上面+1 下面-1
4.把小畫家(x座標-中心點200)200.0,變成OpenGL座標 (減一半 除一半 )
5.y座標  -(y座標-中心點200)200.0, (減一半 除一半 在加負號)
6.新增一個新的GLUT專案

#畫出圓形
1.新增一個GLUT專案
2.將上一個程式碼貼上
3.利用sin cos(三角函數) 畫出圓形


#include <GL/glut.h>///使用GLUT外掛
#include <math.h>
 void display()
 {
     glBegin(GL_POLYGON);
     for(float a=0;a<=3.1415926*2; a+=0.1){
        glVertex2f(cos(a),sin(a) );
     }
     glEnd();
     glutSwapBuffers();
 }

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);///初始化 GLUT 140
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///143

    glutCreateWindow("GLUT Shapes");///145
    glutDisplayFunc(display);///148 display函式
    glutMainLoop();///174 迴圈
}






#利用圓形畫出米老鼠
1.利用剛剛圓形程式 新增不同位子圓形座標


#include <GL/glut.h>///使用GLUT外掛
#include <math.h>
void myCircle(float cx,float cy,float r){

    glBegin(GL_POLYGON);
     for(float a=0;a<=3.1415926*2; a+=0.1){
            glVertex2f(r*cos(a)+cx,r*sin(a)+cy);
     }
     glEnd();
}
 void display()
 {
     glColor3f(1,1,1);myCircle(0,0,1);
     glColor3f(0,0,0);myCircle(-0.5,+0.5,0.3);
     glColor3f(0,0,0);myCircle(+0.5,+0.5,0.3);
     glColor3f(0,0,0);myCircle(0,-0.3,0.7);
     glutSwapBuffers();
     }




int main(int argc, char *argv[])
{
    glutInit(&argc, argv);///初始化 GLUT 140
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///143

    glutCreateWindow("GLUT Shapes");///145
    glutDisplayFunc(display);///148 display函式
    glutMainLoop();///174 迴圈
}

















沒有留言:

張貼留言