2021電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
2021年6月25日 星期五
距地表面160 Week05
2021年6月8日 星期二
電腦圖學 week05
#include <GL/glut.h>
int N=0,vx[3000],vy[3000];
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glBegin(GL_LINE_LOOP);
for (int i=0;i<N;i++)
{
glVertex2f((vx[i]-150)/150.0,-(vy[i]-150)/150.0);
}
glEnd();
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
angle++;
display();
}
void motion(int x,int y)
{
vx[N]=x; vy[N]=y;
N++;
display();
}
int main(int argc, char *argv[]){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08163034");
glutDisplayFunc ( display );
glutKeyboardFunc (keyboard);
glutMotionFunc(motion);
glutMainLoop();
2021年4月28日 星期三
08160581 薑餅 圖學筆記 week05
#include <GL/glut.h>
int N=0,vx[3000],vy[3000];
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glBegin(GL_LINE_LOOP);
for (int i=0;i<N;i++)
{
glVertex2f((vx[i]-150)/150.0,-(vy[i]-150)/150.0);
}
glEnd();
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
angle++;
display();
}
void motion(int x,int y)
{
vx[N]=x; vy[N]=y;
N++;
display();
}
int main(int argc, char *argv[]){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160121 good!");
glutDisplayFunc ( display );
glutKeyboardFunc (keyboard);
glutMotionFunc(motion);
glutMainLoop();
2021年4月4日 星期日
宇的電腦圖學筆記WEEK05
glTranslatef(x,y,z) 移動
glRotatef(x,y,z) 旋轉再來把上周的程式碼打開
glScalef(x,y,z) 物體大小(3)
程式碼是由下往上讀的
再來把上周的程式碼打開
2021年3月28日 星期日
Xian筆記-Week05
期中考題!!!
今日重點:
#include <GL/glut.h>
#include <stdio.h>
int n=0,vx[3000],vy[3000];
float angle=0;
2.程式碼glPushMatrix();
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
glPushMatrix();///備分矩陣
glRotatef(angle,0,0,1);
glBegin(GL_LINE_LOOP);
for(int i=0;i<n;i++)///用for畫
{
glVertex2f((vx[i]-150)/150.0,-(vy[i]-150)/150.0);///座標
}
glEnd();
glPopMatrix();///還原矩陣
glutSwapBuffers();///更新畫面
}
3.函式void keyboard(unsigned char key,int x,int y)
void keyboard(unsigned char key,int x,int y)
{
angle++;
display();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH)
glutCreateWindow("07361092");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);///按鍵盤呼叫keyboard函式
glutMotionFunc(motion);///按滑鼠呼叫motion函式
glutMainLoop();
}
2021年3月24日 星期三
懶嵐\(。∀ ° )/ Week05
I.
II.
Step1.
小乖的圖學筆記 week05
展示萬花尺
效果影片 https://www.youtube.com/watch?v=ELrkairuidA
------------------------------------------------------------------------------------------
理解GLUT的程式碼讀取模式
1.利用Transformation實作移動轉動先後的差異
1-1
1-2
GLUT程式碼是由下往上讀的!!
先移動 旋轉點是固定不動的
所以才會造成先移動會繞著中心轉的現象
先旋轉 旋轉點會跟著物體移動
2.可以利用 120.125.80.50/GL 裡的 OpenGL T-R-T 練習
(同樣的網站裡有期中考題目練習喔)
------------------------------------------------------------------------------------------
畫圖並旋轉
1.到GitHub下載week04-2
2.新增全域變數float angle=0;
#include <GL/glut.h>///使用GLUT外掛
#include <stdio.h>
int n=0,vx[3000],vy[3000];
float angle=0;
3.新增程式碼glPushMatrix();
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
glPushMatrix();///備分矩陣
glRotatef(angle,0,0,1);
glBegin(GL_LINE_LOOP);
for(int i=0;i<n;i++)///用for畫出來
{
glVertex2f((vx[i]-150)/150.0,-(vy[i]-150)/150.0);///座標換算
}
glEnd();
glPopMatrix();///還原矩陣
glutSwapBuffers();///更新畫面
}
4.新增函式void keyboard(unsigned char key,int x,int y)
void keyboard(unsigned char key,int x,int y)
{
angle++;
display();
}
5.新增程式碼glutKeyboardFunc();
int main(int argc, char *argv[])///main()函式
{
glutInit(&argc, argv);///Init初始化GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///Init初始化Display功能
glutCreateWindow("07160325 小乖的畫");///建立自訂名稱的GLUT視窗
glutDisplayFunc(display);///準備display()函式
glutKeyboardFunc(keyboard);///按鍵盤呼叫keyboard函式
glutMotionFunc(motion);///按滑鼠呼叫motion函式
glutMainLoop();///主要函式
}
按下鍵盤空白鍵就會旋轉 .
NEKO no Computer Graphics_week05
早安
(練習網址:https://120.125.80.50/GL/)
這周要接續上周的內容
上次的程式的移動旋轉
其實可以交換移動和旋轉的程式 會有不同的結果
程式碼要從下面讀到上面
下面兩張圖是交換程式碼的差別
第一種是旋轉完再移動,旋轉軸是固定的,移動的值比較像座標系
而第二種移動再旋轉,先移動遠離旋轉軸,再以旋轉軸為中心旋轉
所以結果就會不一樣,下圖是解釋
了解這個概念,接著就要寫程式了
首先把上周程式叫出來
增加了旋轉 glRotatef(a,x,y,z),也使用了很多新東西
有用KeyBoard函式,glPushMatrix()/glPopMatrix()保存陣列才能正常移動
只要按著按鍵就能旋轉
時間的關係今天就到這裡
下次見
距地表面160 Week11
#include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) { if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...
-
先用上一周的開始加新的東西 ///把 Week15_file 的 main.cpp 拿來用 #include <stdio.h> #include <GL/glut.h> float angle[20]={}, diff=2;///Step05 本來只有...
-
加背 景 上程式碼 #include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可 #include <opencv/cv.h> #include <GL/glut.h>...
-
下載 OpenCV-2.1.0-win32-vs2008.exe 下載選第2個 Add OpenCV to PATH(執行的目錄之一) 位置用預設的 C:\OpenCV2.1 安裝完重開codeblocks cv210 cxcore210 highgui210 ---...















