1.從老師的網頁(https://jsyeh.org/3dcg10/)下載兩個檔案:1.data 2.win32➡先解壓縮win32的檔案 , 然後把data資料夾移到windows資料夾➡打開 Shapes.exe
👇
備註(Shapes.exe): 1. mouse右鍵 , 在右邊可切換 點.線.面
2.mouse右鍵 , 在左邊可切換大的頂點、逐個色彩
3.mouse左鍵 , 在右邊可按綠色數字上下調整
2.MOODLE➡解壓縮 freeglut-MinGW-3.0.0-1.mp.zip
➡把解壓縮完的檔案移到桌面
➡把124KB的檔案改名成 libglut32.a
➡開新的專案命名week02_GLUT_color_teapot
➡解壓縮到C:\Users\austi\OneDrive\桌面\freeglut (我自己的電腦)
➡把上週的十行複製到sourse➡新增一行程式碼:glColor3f(1,1,0),可以
把茶壺變黃色
➡按 Build&Run➡看到程式執行
備註:
1.glColor3f(r,g,b)可以調整顏色 , r.g.b的值必須要在0跟1之
間 ,3f的意思是3個浮點數。
eg: (0,1,0) 綠色, (1,0,0) 紅色, (0,0,1) 藍色, (1,1,0) 黃色
2.glVertex2f(x,y)可以改頂點座標
👇
👇
👇
👇
👇
👇
👇glColor3f(1,1,0)把茶壺變黃色
2-2.第一個程式 : week02_GLUT_color_teapot
可使用小畫家來選取顏色 ➡ / 255.0(因為要介於0跟1之間)
例如: 在小畫家當中是(247,180,171) ➡ OpenGL要改為(247/255.0,180/255.0,171/255.0)
-----------------------------------------------------------------------------------------------
#include <GL/glut.h>
void display()
{
glColor3f(247/255.0,180/255.0,171/255.0);///安妮雅頭髮顏色
glutSolidTeapot(0.3);///畫一個實心的茶壺,大小是0.3
glColor3f(251/255.0,233/255.0,219/255.0);///安妮雅臉的顏色
glutSolidTeapot(0.2);
glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方
}
int main(int argc, char *argv[])
{ ///上面是特別的main函式,有很多參數
glutInit(&argc, argv);///把GLUT開起來 (GLUT初始化)
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
///上面這行是把顯示的模式設定好
glutCreateWindow("GLUT Shapes");///要開視窗
glutDisplayFunc(display);///要顯示的對應函式
glutMainLoop();///最後用main迴圈,壓在最後面
}
-----------------------------------------------------------------------------------------------
3.練習使用頂點: 第二個程式 : week02_glut_circle_cos_sin
glBegin(GL_POLYGON); glColor3f(r,g,b); glVertex2f(x,y);
#include <GL/glut.h>
void display()
{
glBegin(GL_POLYGON);///開始畫
glColor3f(1,0,0); glVertex2f (0,1);///頂點在x=0 , y=1
glColor3f(0,1,0); glVertex2f (1,-0.6);///頂點在x=1 , y=-0.6
glColor3f(0,0,1); glVertex2f (-1,-0.6);///頂點在x= -1 , y= -0.6
glEnd();///結束
glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方
}
int main(int argc, char *argv[])
{ ///上面是特別的main函式,有很多參數
glutInit(&argc, argv);///把GLUT開起來 (GLUT初始化)
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
///上面這行是把顯示的模式設定好
glutCreateWindow("GLUT Shapes");///要開視窗
glutDisplayFunc(display);///要顯示的對應函式
glutMainLoop();///最後用main迴圈,壓在最後面
}
-----------------------------------------------------------------------------------------------
例如:這個三角形的三個頂點分別在 , ( 0 , 1 ) 、( 1 , -0.6 )、 ( -1 , -0.6 )
4. 第三個程式 : week02_glut_triangle
a.開啟小畫家,把圖片放上去
b.小畫家的座標裡,左上角是 (0,0) , 右下角是 (400,400) (假設圖片寬度是400*400)
c.關於座標,OpenGL 預設是「正中間0,0」,右邊是+1,左邊是-1,上面是+1,下面是-1
d.把小畫家的(x座標-中心點200)/200.0變成 OpenGL的座標口訣:減一半、再除一
半.0
e.y座標比較麻煩-(y座標-中心點200)/200.0,口訣:減一半、除一半,再加負號
f.ctrl+E可以調整畫布大小
-----------------------------------------------------------------------------------------------
#include <GL/glut.h>
void display()
{
glBegin(GL_POLYGON);///開始畫
glColor3f(1,1,1);
glVertex2f ( (30-200) / 200.0 , -(45-200) / 200.0 );
glVertex2f ( (46-200) / 200.0 , -(102-200) / 200.0 );
glVertex2f ( (84-200) / 200.0 , -(23-200) / 200.0 );
///口訣:減一半、除一半、y變負號
glEnd();///結束
glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方
}
int main(int argc, char *argv[])
{ ///上面是特別的main函式,有很多參數
glutInit(&argc, argv);///把GLUT開起來 (GLUT初始化)
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
///上面這行是把顯示的模式設定好
glutCreateWindow("GLUT Shapes");///要開視窗
glutDisplayFunc(display);///要顯示的對應函式
glutMainLoop();///最後用main迴圈,壓在最後面
}
-----------------------------------------------------------------------------------------------
5.第四個程式 : week_02_glut_mspaint_help_draw
練習用程式畫圓 - 畫出一個米老鼠
-----------------------------------------------------------------------------------------------
#include <GL/glut.h>
#include <math.h>
void display()
{
glBegin(GL_POLYGON);///開始畫
for(float a=0 ; a<3.1415926*2 ; a+=0.1){ ///如果3.1415926沒有*2 , 會變半圓
glVertex2f(cos(a),sin(a));///cos(a),sin(a)可以乘其他數值改變圓形的大小形狀
}
glEnd();///結束
glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方
}
int main(int argc, char *argv[])
{ ///上面是特別的main函式,有很多參數
glutInit(&argc, argv);///把GLUT開起來 (GLUT初始化)
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
///上面這行是把顯示的模式設定好
glutCreateWindow("GLUT Shapes");///要開視窗
glutDisplayFunc(display);///要顯示的對應函式
glutMainLoop();///最後用main迴圈,壓在最後面
}
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
#include <GL/glut.h>
#include <math.h>
void myCircle(float cx,float cy ,float r)
{
glBegin(GL_POLYGON);///開始畫
for(float a=0;a<3.1415*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();///請GLUT把畫面swap送到顯示的地方
}
int main(int argc, char *argv[])
{ ///上面是特別的main函式,有很多參數
glutInit(&argc, argv);///把GLUT開起來 (GLUT初始化)
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
///上面這行是把顯示的模式設定好
glutCreateWindow("GLUT Shapes");///要開視窗
glutDisplayFunc(display);///要顯示的對應函式
glutMainLoop();///最後用main迴圈,壓在最後面
}
-----------------------------------------------------------------------------------------------
6.github上傳 , exe和depend檔不用上傳
沒有留言:
張貼留言