顯示具有 40447032S_劉良甫 標籤的文章。 顯示所有文章
顯示具有 40447032S_劉良甫 標籤的文章。 顯示所有文章

2017年12月21日 星期四

LLF的計圖學習筆記_Week_15

主題:Antialias

原因:取樣誤差(精細度不夠)

解決方法:利用人類的視覺誤差

2017年12月14日 星期四

LLF的計圖學習筆記_Week_14

試 rasterization (By Processing)

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
}

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檔案,並執行看看







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();
}

2017年11月16日 星期四

LLF的計圖學習筆記_Week_10

期末專題講解

各式影片觀看......

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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(){
    滑鼠拖曳
}

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);

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.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
設定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);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2017年10月26日 星期四

LLF的計圖學習筆記_Week_07

設置光源參數:
void glLightfv ( GLenum lightGLenum pnameconst GLfloat * params);
void glLightiv ( GLenum lightGLenum 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 lightGLenum pnameGLfloat param);
void glLighti ( GLenum lightGLenum pnameGLint param);
void glLightfv ( GLenum lightGLenum pnameconst GLfloat * params);
void glLightiv ( GLenum lightGLenum 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將被設置為的值或值的指標。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
函式:keyboardmouse
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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==什麼
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 key
3)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)
}
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();告知系統重畫繪圖
}

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檔案轉換成程式碼

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

-----------------------------------------------------------------------------
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日 星期四

LLF的計圖學習筆記_Week_01

0.打開Code::Blocks 16.01 (MinGW)

1.開新專案
2.選OpenGL
3.執行預設程式碼

-----------------------------------------------我是分隔線-------------------------------------------
1.下載GLUT: freeglut 3.0.0 MinGW
2.打開資料夾→打開lib

3.複製libfreeglut.a檔案,並重新命名為libglut32.a

4.打開Code::Blocks 16.01 (MinGW)

5.開新專案GLUT

6.將路徑設為freeglut資料夾

7.執行預設原始碼