計算機圖學__期末專題
2018年1月14日 星期日
2017年12月21日 星期四
2017年12月14日 星期四
LLF的計圖學習筆記_Week_14
試 rasterization (By Processing)
beginShape(形狀) ;
TRIANGLE
fill(填滿顏色) ; vertex(2D平面點) ;
會自動補漸層
stroke(點顏色) ; vertex(2D平面點) ;
不會填滿中心區塊,只會畫線
endShape() ;
beginShape(形狀) ;
TRIANGLE
fill(填滿顏色) ; vertex(2D平面點) ;
會自動補漸層
stroke(點顏色) ; vertex(2D平面點) ;
不會填滿中心區塊,只會畫線
endShape() ;
2017年12月7日 星期四
LLF的計圖學習筆記_Week_13
色彩系統 Processing
colorMode (RGB/ HSB/ YMC, 255);
stroke(X, Y, Z); 改畫筆顏色
point(X, Y);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
等色display GLUT
void glutTimerFunc(int x, void timer, int value);
經過x秒後,執行timer。
void timer(int t)
{
glutTimerFunc(int, void timer, int);
無限循環↑ 每次執行時就再註冊一個Timer
}
colorMode (RGB/ HSB/ YMC, 255);
stroke(X, Y, Z); 改畫筆顏色
point(X, Y);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
等色display GLUT
void glutTimerFunc(int x, void timer, int value);
經過x秒後,執行timer。
void timer(int t)
{
glutTimerFunc(int, void timer, int);
無限循環↑ 每次執行時就再註冊一個Timer
}
2017年11月30日 星期四
LLF的計圖學習筆記_Week_12
下載myGL_Frustrum221_MultiView_2012_1221-20171130T060949Z-001.zip
Build:
要定義M_PI (math.h裡的M_PI)
也要glutInit(&argc, argv); 初始化

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
主題 : Scene場景、Mocap、Skeleton、Model
用processing 執行3D範例程式
下載testBVH檔案,並執行看看
Build:
要定義M_PI (math.h裡的M_PI)
也要glutInit(&argc, argv); 初始化

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
主題 : Scene場景、Mocap、Skeleton、Model
用processing 執行3D範例程式
下載testBVH檔案,並執行看看
2017年11月23日 星期四
LLF的計圖學習筆記_Week_11
Windows
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C++ 多媒體
#include<mmsystem.h> 使用多媒體系統
PlaySoundA("檔名.wav", NULL, SND_SYNC);
SND_ASYNC vs SND_SYNC
不等同步,下一行繼續 vs 等同步
~~~~~~~~~~~~~~~~~~~~~~~~~~
#include "CMP3_MCI.h"
CMP3_MCI mp3;
mp3.Load("檔名.mp3");
mp3.Play(); 播放直到程式結束
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Processing 3.3.6 Minim
import ddf.minim.*;
Minim minim;
AudioPlayer player;
void setup()
{
minim = new Minim(this);
player = minim.loadFile("檔名.mp3");
player.loop();
player.play();
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C++ 多媒體
#include<mmsystem.h> 使用多媒體系統
PlaySoundA("檔名.wav", NULL, SND_SYNC);
SND_ASYNC vs SND_SYNC
不等同步,下一行繼續 vs 等同步
~~~~~~~~~~~~~~~~~~~~~~~~~~
#include "CMP3_MCI.h"
CMP3_MCI mp3;
mp3.Load("檔名.mp3");
mp3.Play(); 播放直到程式結束
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Processing 3.3.6 Minim
import ddf.minim.*;
Minim minim;
AudioPlayer player;
void setup()
{
minim = new Minim(this);
player = minim.loadFile("檔名.mp3");
player.loop();
player.play();
}
2017年11月16日 星期四
LLF的計圖學習筆記_Week_10
期末專題講解
各式影片觀看......
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Processing 3.3.6
void setup(){
fullScreen();全螢幕
}
void draw(){
if(mousePressed 按鍵按下)
background(255,0,0); 顏色
}
各式影片觀看......
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Processing 3.3.6
void setup(){
fullScreen();全螢幕
}
void draw(){
if(mousePressed 按鍵按下)
background(255,0,0); 顏色
}
2017年11月9日 星期四
LLF的計圖學習筆記_Week_09
Bump Mapping
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
網址體驗:https://www.openprocessing.org/user/11988
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Processing 3.3.6
size(視窗寬、視窗長);
background(#顏色);
lights();
fill(#顏色);
rect(左上X(以左方為0)、左上Y(以上方為0)、寬、長);
PImage img=loadImage("檔名");
image(PImage 、左上X(以左方為0)、左上Y(以上方為0)、寬、長);
translate(X,Y); 位移
scale(S); 放大縮小
rotateX(angle); 沿X軸轉動
rotateY(angle); 沿Y軸轉動
rotateZ(angle); 沿Z軸轉動
radians(X); 轉為角度
sphere(大小); 立體圓球
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
for , if , int , float同C/C++
陣列:int [][]data={ { } };
mouseX,mouseY 滑鼠位置
pmouseX, pmouseY 滑鼠之前的位置
width, height 視窗寬、高
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
特定命名:
void setup(){
初始
}
void draw(){
畫圖
}
void keyPressed(){
if(keyCode==UP||keyCode==RIGHT||keyCode==LEFT)按下按鍵
}
void keyReleased(){
if(keyCode==UP)放開按鍵
}
void mouseDragged(){
滑鼠拖曳
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
網址體驗:https://www.openprocessing.org/user/11988
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Processing 3.3.6
size(視窗寬、視窗長);
background(#顏色);
lights();
fill(#顏色);
rect(左上X(以左方為0)、左上Y(以上方為0)、寬、長);
PImage img=loadImage("檔名");
image(PImage 、左上X(以左方為0)、左上Y(以上方為0)、寬、長);
translate(X,Y); 位移
scale(S); 放大縮小
rotateX(angle); 沿X軸轉動
rotateY(angle); 沿Y軸轉動
rotateZ(angle); 沿Z軸轉動
radians(X); 轉為角度
sphere(大小); 立體圓球
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
for , if , int , float同C/C++
陣列:int [][]data={ { } };
mouseX,mouseY 滑鼠位置
pmouseX, pmouseY 滑鼠之前的位置
width, height 視窗寬、高
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
特定命名:
void setup(){
初始
}
void draw(){
畫圖
}
void keyPressed(){
if(keyCode==UP||keyCode==RIGHT||keyCode==LEFT)按下按鍵
}
void keyReleased(){
if(keyCode==UP)放開按鍵
}
void mouseDragged(){
滑鼠拖曳
}
2017年11月2日 星期四
LLF的計圖學習筆記_Week_08
函式介紹:glTexCoord:設置當前紋理(圖片)座標
void glTexCoord1f(GLfloat s);
void glTexCoord1d(GLdouble s);
void glTexCoord2f(GLfloat s,GLfloat t);
void glTexCoord2d(GLdouble s,GLdouble t);
void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r);
void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r);
void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q);
void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q);
void glTexCoord1f(GLfloat s);
void glTexCoord1d(GLdouble s);
void glTexCoord2f(GLfloat s,GLfloat t);
void glTexCoord2d(GLdouble s,GLdouble t);
void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r);
void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r);
void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q);
void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q);
s, t, r, q:指定s, t, r, q 紋理座標,預設為0,0,0,1。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
函式介紹:glTexParameter:設置紋理參數
void glTexParameterf(GLenum target,GLenum pname,GLfloat param);
void glTexParameteri(GLenum target,GLenum pname,GLint param);
target:指定目標紋理
GL_TEXTURE_1D,
GL_TEXTURE_2D,
GL_TEXTURE_3D,
GL_TEXTURE_CUBE_MAP.
pname:指定單值紋理參數的符號名稱
GL_TEXTURE_MIN_FILTER,
GL_TEXTURE_MAG_FILTER,
GL_TEXTURE_MIN_LOD,
GL_TEXTURE_MAX_LOD,
GL_TEXTURE_BASE_LEVEL,
GL_TEXTURE_MAX_LEVEL,
GL_TEXTURE_WRAP_S,
GL_TEXTURE_WRAP_T,
GL_TEXTURE_WRAP_R,
GL_TEXTURE_PRIORITY,
GL_TEXTURE_COMPARE_MODE,
GL_TEXTURE_COMPARE_FUNC,
GL_DEPTH_TEXTURE_MODE,
GL_GENERATE_MIPMAP.
param:指定pname的值
Specifies the value of pname.
GL_TEXTURE_1D,
GL_TEXTURE_2D,
GL_TEXTURE_3D,
GL_TEXTURE_CUBE_MAP.
GL_TEXTURE_MIN_FILTER,
GL_TEXTURE_MAG_FILTER,
GL_TEXTURE_MIN_LOD,
GL_TEXTURE_MAX_LOD,
GL_TEXTURE_BASE_LEVEL,
GL_TEXTURE_MAX_LEVEL,
GL_TEXTURE_WRAP_S,
GL_TEXTURE_WRAP_T,
GL_TEXTURE_WRAP_R,
GL_TEXTURE_PRIORITY,
GL_TEXTURE_COMPARE_MODE,
GL_TEXTURE_COMPARE_FUNC,
GL_DEPTH_TEXTURE_MODE,
GL_GENERATE_MIPMAP.
Specifies the value of pname.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
設定Opencv 2.1.0 (Code::Blocks)
右鍵build options
-Search directories
-compiler : 連接 include
-Linker : 連接lib
-Linker settings
-Link libraries
連接cv210, cxcore210, highgui210
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
範例:
#include <opencv/highgui.h>
int main()
{
IplImage *img=cvLoadImage("test.jpg");
cvNamedWindow("opencv");
cvShowImage("opencv",img);
cvWaitKey(0);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
範例:
#include <opencv/highgui.h>
int main()
{
IplImage *img=cvLoadImage("test.jpg");
cvNamedWindow("opencv");
cvShowImage("opencv",img);
cvWaitKey(0);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2017年10月26日 星期四
LLF的計圖學習筆記_Week_07
設置光源參數:
void glLightfv ( GLenum light, GLenum pname, const GLfloat * params);
void glLightiv ( GLenum light, GLenum pname, const GLint * params);
params:指定光源光的參數pname將被設置為的值或值的指標
GL_POSITION:
params包含四個整數或浮點值,用於指定光在坐標中的位置。
整數和浮點值直接映射,且都不被箝制。
(X,Y,Z,W):XYZ坐標軸的位置,
W:0代表是定向光源,Diffuse、specular不會考慮實際位置,只考慮方向,並且光不會衰減。
1代表非定向,Diffuse、specular會依據實際位置衰減。
defalut為(0,0,1,0):初始光源是定向的,平行的並且在z軸的方向上。
void glLightfv ( GLenum light, GLenum pname, const GLfloat * params);
void glLightiv ( GLenum light, GLenum pname, const GLint * params);
params:指定光源光的參數pname將被設置為的值或值的指標
GL_POSITION:
params包含四個整數或浮點值,用於指定光在坐標中的位置。
整數和浮點值直接映射,且都不被箝制。
(X,Y,Z,W):XYZ坐標軸的位置,
W:0代表是定向光源,Diffuse、specular不會考慮實際位置,只考慮方向,並且光不會衰減。
1代表非定向,Diffuse、specular會依據實際位置衰減。
defalut為(0,0,1,0):初始光源是定向的,平行的並且在z軸的方向上。
2017年10月19日 星期四
LLF的計圖學習筆記_Week_06
函式:
啟用或禁用 GL服務端功能
void glEnable ( GLenum cap);
void glDisable ( GLenum cap);
cap:GL功能的符號常數
GL_DEPTH_TEST
如果啟用,將進行深度比較並更新depth buffer。
請注意,即使depth buffer存在且depth mask不為零,
如果深度測試被禁用,depth buffer也不會被更新。
GL_LIGHTi
如果啟用,將光源 i 加入光源方程式的計算中。
GL_LIGHTING
如果啟用且沒有vertex shader是活動狀態,使用目前的光源參數來計算頂點顏色或索引,
否則,只將目前的顏色或索引與每個頂點相關聯。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
設置光源參數
void glLightf ( GLenum light, GLenum pname, GLfloat param);
void glLighti ( GLenum light, GLenum pname, GLint param);
void glLightfv ( GLenum light, GLenum pname, const GLfloat * params);
void glLightiv ( GLenum light, GLenum pname, const GLint * params);
light:指定一個光源(燈),燈的數量取決於implementation(最少支持8個燈),
由GL_LIGHT i作為名稱標示,i的範圍為0~GL_MAX_LIGHTS -1。
pname:指定光源的單值光源參數。
GL_SPOT_EXPONENT
GL_SPOT_CUTOFF
GL_CONSTANT_ATTENUATION
GL_LINEAR_ATTENUATION
GL_QUADRATIC_ATTENUATION
param:指定光源光的參數pname將被設置為的值。
pname:指定光源的光源參數。
GL_AMBIENT
GL_DIFFUSE
GL_SPECULAR
GL_POSITION:params包含四個整數或浮點值,用於指定光在坐標中的位置。
整數和浮點值直接映射,且都不被箝制。
GL_SPOT_CUTOFF
GL_SPOT_DIRECTION
GL_SPOT_EXPONENT
GL_CONSTANT_ATTENUATION
GL_LINEAR_ATTENUATION
GL_QUADRATIC_ATTENUATION
params:指定光源光的參數pname將被設置為的值或值的指標。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
函式:keyboard、mouse
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void glutPostRedisplay ( void) ;
將當前窗口標記為需要重新顯示
啟用或禁用 GL服務端功能
void glEnable ( GLenum cap);
void glDisable ( GLenum cap);
cap:GL功能的符號常數
GL_DEPTH_TEST
如果啟用,將進行深度比較並更新depth buffer。
請注意,即使depth buffer存在且depth mask不為零,
如果深度測試被禁用,depth buffer也不會被更新。
GL_LIGHTi
如果啟用,將光源 i 加入光源方程式的計算中。
GL_LIGHTING
如果啟用且沒有vertex shader是活動狀態,使用目前的光源參數來計算頂點顏色或索引,
否則,只將目前的顏色或索引與每個頂點相關聯。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
設置光源參數
void glLightf ( GLenum light, GLenum pname, GLfloat param);
void glLighti ( GLenum light, GLenum pname, GLint param);
void glLightfv ( GLenum light, GLenum pname, const GLfloat * params);
void glLightiv ( GLenum light, GLenum pname, const GLint * params);
light:指定一個光源(燈),燈的數量取決於implementation(最少支持8個燈),
由GL_LIGHT i作為名稱標示,i的範圍為0~GL_MAX_LIGHTS -1。
pname:指定光源的單值光源參數。
GL_SPOT_EXPONENT
GL_SPOT_CUTOFF
GL_CONSTANT_ATTENUATION
GL_LINEAR_ATTENUATION
GL_QUADRATIC_ATTENUATION
param:指定光源光的參數pname將被設置為的值。
pname:指定光源的光源參數。
GL_AMBIENT
GL_DIFFUSE
GL_SPECULAR
GL_POSITION:params包含四個整數或浮點值,用於指定光在坐標中的位置。
整數和浮點值直接映射,且都不被箝制。
GL_SPOT_CUTOFF
GL_SPOT_DIRECTION
GL_SPOT_EXPONENT
GL_CONSTANT_ATTENUATION
GL_LINEAR_ATTENUATION
GL_QUADRATIC_ATTENUATION
params:指定光源光的參數pname將被設置為的值或值的指標。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
函式:keyboard、mouse
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void glutPostRedisplay ( void) ;
將當前窗口標記為需要重新顯示
2017年10月12日 星期四
LLF的計圖學習筆記_Week_05
課堂練習:下載data, win32, glut32.dll
並執行裡面的Transformation.exe、Projection.exe

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
函式:view相關
透視投影:
void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
fovy:指定在y方向的視角角度
aspect:指定x方向視野的比例(y/x)
zNear、zFar:指定觀察者到可視最近、遠平面的距離
平行投影-正交投影:
void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal); 正方體
left、right:指定左、右剪切平面
bottom、top:指定上、下剪切平面
nearVal、farVal:指定近、遠剪切平面
指定視角:
void gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ,
GLdouble centerX, GLdouble centerY, GLdouble centerZ,
GLdouble upX, GLdouble upY, GLdouble upZ);
eyeX, eyeY, eyeZ:指定從哪裡看
centerX, centerY, centerZ :指定看哪裡
upX, upY, upZ :指定向上的向量
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
函式:keyborad相關
1)ASCII:
void glutKeyboardFunc(void(*func)(unsigned char key, int x, int y));
見Week_04
2)F1、F2、↑、←、Home、Page Up......等:
void glutSpecialFunc(void(*func)(int key, int x, int y));
x, y:此時鼠標的位置(像素)(左上為0, 0、右下為W, H)
key:如下,判斷key==什麼
int glutGetModifiers(void);
回傳GLUT_ACTIVE_SHIFT、GLUT_ACTIVE_CTRL、GLUT_ACTIVE_ALT
@只能在處理鍵盤、鼠標輸入事件中呼叫@
如果同時要判斷兩個以上:
並執行裡面的Transformation.exe、Projection.exe

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
函式:view相關
透視投影:
void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
fovy:指定在y方向的視角角度
aspect:指定x方向視野的比例(y/x)
zNear、zFar:指定觀察者到可視最近、遠平面的距離
平行投影-正交投影:
void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal); 正方體
left、right:指定左、右剪切平面
bottom、top:指定上、下剪切平面
nearVal、farVal:指定近、遠剪切平面
指定視角:
void gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ,
GLdouble centerX, GLdouble centerY, GLdouble centerZ,
GLdouble upX, GLdouble upY, GLdouble upZ);
eyeX, eyeY, eyeZ:指定從哪裡看
centerX, centerY, centerZ :指定看哪裡
upX, upY, upZ :指定向上的向量
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
函式:keyborad相關
1)ASCII:
void glutKeyboardFunc(void(*func)(unsigned char key, int x, int y));
見Week_04
2)F1、F2、↑、←、Home、Page Up......等:
void glutSpecialFunc(void(*func)(int key, int x, int y));
x, y:此時鼠標的位置(像素)(左上為0, 0、右下為W, H)
key:如下,判斷key==什麼
GLUT_KEY_F1 F1 function key GLUT_KEY_F2 F2 function key GLUT_KEY_F3 F3 function key GLUT_KEY_F4 F4 function key GLUT_KEY_F5 F5 function key GLUT_KEY_F6 F6 function key GLUT_KEY_F7 F7 function key GLUT_KEY_F8 F8 function key GLUT_KEY_F9 F9 function key GLUT_KEY_F10 F10 function key GLUT_KEY_F11 F11 function key GLUT_KEY_F12 F12 function key GLUT_KEY_LEFT Left function key GLUT_KEY_RIGHT Right function key GLUT_KEY_UP Up function key GLUT_KEY_DOWN Down function key GLUT_KEY_PAGE_UP Page Up function key GLUT_KEY_PAGE_DOWN Page Down function key GLUT_KEY_HOME Home function key GLUT_KEY_END End function key GLUT_KEY_INSERT Insert function key3)SHIFT、CTRL、ALT:
int glutGetModifiers(void);
回傳GLUT_ACTIVE_SHIFT、GLUT_ACTIVE_CTRL、GLUT_ACTIVE_ALT
@只能在處理鍵盤、鼠標輸入事件中呼叫@
如果同時要判斷兩個以上:
mod = glutGetModifiers(); if (mod == (GLUT_ACTIVE_CTRL|GLUT_ACTIVE_ALT))
2017年10月5日 星期四
LLF的計圖學習筆記_Week_04
函式:display
儲存(堆疊)矩陣:將目前的矩陣堆疊進matrix stack的頂端
void glPushMatrix(void);
載入(取出)矩陣:將matrix stack頂端的矩陣取出覆蓋目前的矩陣
void glPopMatrix(void);
單位矩陣:將目前的矩陣改為單位矩陣(4X4)
void glLoadIdentity(void);
指定平移:
1 0 0 x | newX = X+x
0 1 0 y | newY = Y+y
0 0 1 z | newZ = Z+z
0 0 0 1 | 1 = 1
void glTranslated(GLdouble x, GLdouble y, GLdouble z);
void glTranslatef(GLfloat x, GLfloat y, GLfloat z);
x, y, z :平移矩陣
指定旋轉向量:
void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
angle :指定旋轉角度(度) 逆時針
x, y, z :以此向量為軸(會自動換成單位向量) 右手定理
glRotated(angle,0,1,1); != glRotated(angle,0,0,1); + glRotated(angle,0,1,0);
縮放:
x 0 0 0 | newX = xX
0 y 0 0 | newY = yY
0 0 z 0 | newZ = zZ
0 0 0 1 | 1 = 1
void glScaled(GLdouble x, GLdouble y, GLdouble z);
void glScalef(GLfloat x, GLfloat y, GLfloat z);
x, y, z :xyz軸以此比例尺放大縮小
指定視角:
void gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ,
GLdouble centerX, GLdouble centerY, GLdouble centerZ,
GLdouble upX, GLdouble upY, GLdouble upZ);
eyeX, eyeY, eyeZ:指定從哪裡看
centerX, centerY, centerZ :指定看哪裡
upX, upY, upZ :指定向上的向量

函式:input
鍵盤讀取:
glutKeyboardFunc(keyborad);
void keyboard(unsigned char word, int x, int y)
{
word:讀到的字元
x, y :此時鼠標的位置(像素)(左上為0, 0、右下為W, H)
}
儲存(堆疊)矩陣:將目前的矩陣堆疊進matrix stack的頂端
void glPushMatrix(void);
載入(取出)矩陣:將matrix stack頂端的矩陣取出覆蓋目前的矩陣
void glPopMatrix(void);
單位矩陣:將目前的矩陣改為單位矩陣(4X4)
void glLoadIdentity(void);
指定平移:
1 0 0 x | newX = X+x
0 1 0 y | newY = Y+y
0 0 1 z | newZ = Z+z
0 0 0 1 | 1 = 1
void glTranslated(GLdouble x, GLdouble y, GLdouble z);
void glTranslatef(GLfloat x, GLfloat y, GLfloat z);
x, y, z :平移矩陣
指定旋轉向量:
void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
angle :指定旋轉角度(度) 逆時針
x, y, z :以此向量為軸(會自動換成單位向量) 右手定理
glRotated(angle,0,1,1); != glRotated(angle,0,0,1); + glRotated(angle,0,1,0);
縮放:
x 0 0 0 | newX = xX
0 y 0 0 | newY = yY
0 0 z 0 | newZ = zZ
0 0 0 1 | 1 = 1
void glScaled(GLdouble x, GLdouble y, GLdouble z);
void glScalef(GLfloat x, GLfloat y, GLfloat z);
x, y, z :xyz軸以此比例尺放大縮小
指定視角:
void gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ,
GLdouble centerX, GLdouble centerY, GLdouble centerZ,
GLdouble upX, GLdouble upY, GLdouble upZ);
eyeX, eyeY, eyeZ:指定從哪裡看
centerX, centerY, centerZ :指定看哪裡
upX, upY, upZ :指定向上的向量

函式:input
鍵盤讀取:
glutKeyboardFunc(keyborad);
void keyboard(unsigned char word, int x, int y)
{
word:讀到的字元
x, y :此時鼠標的位置(像素)(左上為0, 0、右下為W, H)
}
F1, Ctrl ...等功能鍵有另外的函式處理
滑鼠讀取:
glutMouseFunc(mouse);
void mouse(int button,int state,int x,int y)
{
button :左鍵(GLUT_LEFT_BUTTON)、中鍵(GLUT_MIDDLE_BUTTON)
、右鍵(GLUT_RIGHT_BUTTON)
state :按下去(GLUT_DOWN)、起來(GLUT_UP)
x, y :此時鼠標的位置(像素)(左上為0, 0、右下為W, H)
}
滑鼠拖曳移動:
glutMotionFunc(motion);
void motion(int x,int y)
{
x, y :此時鼠標的位置(像素)(左上為0, 0、右下為W, H)
裡面可加:glutPostRedisplay();告知系統重畫繪圖
}
滑鼠讀取:
glutMouseFunc(mouse);
void mouse(int button,int state,int x,int y)
{
button :左鍵(GLUT_LEFT_BUTTON)、中鍵(GLUT_MIDDLE_BUTTON)
、右鍵(GLUT_RIGHT_BUTTON)
state :按下去(GLUT_DOWN)、起來(GLUT_UP)
x, y :此時鼠標的位置(像素)(左上為0, 0、右下為W, H)
}
滑鼠拖曳移動:
glutMotionFunc(motion);
void motion(int x,int y)
{
x, y :此時鼠標的位置(像素)(左上為0, 0、右下為W, H)
裡面可加:glutPostRedisplay();告知系統重畫繪圖
}
2017年9月28日 星期四
LLF的計圖學習筆記_Week_03
函式:
glPointSize(float):可以改變GL_POINTS點的大小
glutIdleFunc(void *func(void)):空閒時,就callback

-------------------------------------------------------------------------------------------
讀寫檔:Code::Blocks 16.01內建的GLUT專案
如果將資料夾導向freeglut的話
讀檔+寫檔的位置會在freeglut/bin

PS:但專案檔所產生的執行檔.exe會在原本的資料夾\bin\Debug
也就是說其實編譯完成好後,
可以把要讀的檔案放在執行檔.exe那就行,
執行執行檔.exe就好,不用一直build and run @@
-------------------------------------------------------------------------------------------
雜項:
臺大3D圖學 http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
3D Exploration 可以開啟3D檔案,另存新檔,把3D檔案轉換成程式碼
glPointSize(float):可以改變GL_POINTS點的大小
glutIdleFunc(void *func(void)):空閒時,就callback

-------------------------------------------------------------------------------------------
讀寫檔:Code::Blocks 16.01內建的GLUT專案
如果將資料夾導向freeglut的話
讀檔+寫檔的位置會在freeglut/bin

PS:但專案檔所產生的執行檔.exe會在原本的資料夾\bin\Debug
也就是說其實編譯完成好後,
可以把要讀的檔案放在執行檔.exe那就行,
執行執行檔.exe就好,不用一直build and run @@
-------------------------------------------------------------------------------------------
雜項:
臺大3D圖學 http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
3D Exploration 可以開啟3D檔案,另存新檔,把3D檔案轉換成程式碼
2017年9月21日 星期四
LLF的計圖學習筆記_Week_02
雜項:apple,linux內建OpenGL
window:#include <GL/glut.h>連結GLUT函式庫
--------------------------程式碼---------------------------------------------
int main(int argc, char *argv[])
argc參數數量 argv[]參數存為字串
{
glutInit(&argc,argv);
啟始化glut庫
glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA);
設定顯示模式
glutCreateWindow("window_name");
建立glut視窗(視窗名)
glutMainLoop();
主要迴圈
return 0;
}
-----------------------------------------------------------------------------
雜項:
GLUT函式說明
https://www.opengl.org/resources/libraries/glut/spec3/spec3.html
-----------------------------------------------------------------------------
void display()
{
glClearColor(1,0,0,0);
設定(標示)背景顏色(R,G,B,半透明度)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
清理背景顏色
glColor3f(1,0,1);
設定(標示)物件顏色(R,G,B)
f為浮點數 0~1
glutSolidTeapot(0.3);
畫實心茶壺(大小)
glutSwapBuffers();
交換前、後緩衝區
}
glutDisplayFunc(display);
顯示函式
加在MainLoop前

glVertex3f(1,1,0);
glEnd();

-----------------------------------------------------------------------------
glBegin(GL_POLYGON);
開始畫圖(指定為多邊形)
glVertex3f(1,1,0);
glVertex3f(-1,1,0);
glVertex3f(0,-1,0);
頂點們(X,Y,Z軸)
glEnd();
結束畫圖
小技巧(漸層):
glBegin(GL_POLYGON);
glColor3f(0,0,1);
glVertex3f(1,1,0);
glColor3f(1,0,0);
glVertex3f(-1,1,0);
glColor3f(0,1,0);
glVertex3f(0,-1,0);
glEnd();
2017年9月14日 星期四
訂閱:
文章 (Atom)



















