OpenGL之顏色混合

OpenGL之顏色混合

OpenGL之顏色混合alpha通過glBlendFunc()設定的混合因子生成透明效果,但通過其它的混合因子可產生更多不同的混合效果.令外OpenGL的顏色混合是無需啟用光照的glEnable(GL_LIGHTING); 但需要啟動多邊形隱面裁剪::glEnable(GL_CULL_FACE);否則會有一面會繪畫錯誤.

混合因子演示程式.下載

  1. 設定Sour Factor選擇”來源混合因子”
  2. 設定Dest Factor選擇”目標混合因子”
  3. 設定Blend Equation選擇”混合公式”
glBlendFunc()的混合公式 簡介
GL_FUNC_ADD C =(Cs*S)+(Cd*D) 默認值
GL_MIN C =MIN(Cs,Cd)
GL_MAX C =MAX(Cs,Cd)
GL_FUNC_SUBTRACT C =(Cs*S)-(Cd*D)
GL_FUNC_REVERSE_SUBTRACT C =(Cd*S)-(Cs*D)

 

公式因子 簡介:混合因子的簡介可通過最下表查閱
Cs: 來源顏色
S: 來源混合因子
Cd: 目標顏色
D: 目標混合因子

 

S來源混合因子 簡介
GL_ZERO sour (r,g,b,a) *{0,0,0,0}
GL_ONE sour (r,g,b,a) * (1,1,1,1)
GL_DST_COLOR sour (r,g,b,a) * dest (r,g,b,a)
GL_ONE_MINUS_DST_COLOR sour (r,g,b,a) * ((1,1,1,1)- dest(r,g,b,a))
GL_SRC_ALPHA sour (r,g,b,a) * sour(alpha)
GL_ONE_MINUS_SRC_ALPHA sour (r,g,b,a) * (1- sour(alpha))
GL_DST_ALPHA sour (r,g,b,a) * dest(alpha)
GL_ONE_MINUS_DST_ALPHA sour (r,g,b,a) * (1- dest(alpha))
GL_SRC_ALPHA_SATURATE sour (r,g,b,a) * MIN(sour(alpha),1-dest(alpha))
GL_CONSTANT_COLOR sour (r,g,b,a)* Color(r,g,b,a)
GL_ONE_MINUS_CONSTANT_COLOR sour (r,g,b,a)*( (1,1,1,1)- Color(r,g,b,a))
GL_CONSTANT_ALPHA sour (r,g,b,a)* Color(alpha)
GL_ONE_MINUS_CONSTANT_ALPHA sour (r,g,b,a)*(1-Color(alpha))

 

D目標混合因子 簡介
GL_ZERO dest (r,g,b,a) *{0,0,0,0}
GL_ONE dest (r,g,b,a) * (1,1,1,1)
GL_SRC_COLOR dest (r,g,b,a) * sour (r,g,b,a)
GL_ONE_MINUS_SRC_COLOR dest (r,g,b,a) * ((1,1,1,1)- sour (r,g,b,a))
GL_SRC_ALPHA dest (r,g,b,a) * sour (alpha)
GL_ONE_MINUS_SRC_ALPHA dest (r,g,b,a) * (1- sour (alpha))
GL_DST_ALPHA dest (r,g,b,a) * dest (alpha)
GL_ONE_MINUS_DST_ALPHA dest (r,g,b,a) * (1- dest (alpha))
GL_SRC_ALPHA_SATURATE dest (r,g,b,a) * MIN(sour(alpha),1-dest(alpha))
GL_CONSTANT_COLOR dest (r,g,b,a)* Color(r,g,b,a)
GL_ONE_MINUS_CONSTANT_COLOR dest (r,g,b,a)*( (1,1,1,1)- Color(r,g,b,a))
GL_CONSTANT_ALPHA dest (r,g,b,a)* Color(alpha)
GL_ONE_MINUS_CONSTANT_ALPHA dest (r,g,b,a)*(1-Color(alpha))

上表的Color混合常量通過glBlendColor()設定

設定混合常量 簡介
Void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha; 混合常量默認為(0,0,0,0)作為混合權重係數

 

OpenGL之顏色混合alpha

OpenGL之顏色混合alpha

顏色混合(alpha)可實現透明的視角效果,可以模擬液體、玻璃等.當你啟動混合OpenGL將輸入源的顏色與和在幀緩存裏的顏色混合

函式 簡介
glEnable(GL_BLEND); 啟用混合
glDisable(GL_BLEND); 禁用混合
函式 簡介
Void glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); 設定顏色和透明度
red, green, blue 顏色
alpha 透明度數值範圍:0.0f-1.0f

0:全透明

1:完全不透明

函式示例

  1. glEnable(GL_BLEND);// 啟用混合
  2. glDepthMask(GL_FALSE);// 將深度環存設置為只讀
  3. glBlendFunc(GL_SRC_ALPHA,GL_ONE); // 透明效果
  4. glColor4f(1.0f, 1.0f, 1.0f,alpha);//月球模型顏色
  5. auxSolidSphere(1.0f);// 繪畫
  6. glDepthMask(GL_TRUE);// 將深度環存設置為可讀可寫
  7. glDisable(GL_BLEND);// 禁用混合
混合函式 簡介
void glBlendFunc (GLenum sfactor, GLenum dfactor); 設定來源和目標混合係數
sfactor 輸入源數據的混合係數
dfactor 當前幀緩存的混合係數

 

混合係數 簡介
GL_ZERO 將顏色設為{0,0,0,0}
GL_ONE 不改變當前顏色(r,g,b,a)*(1,1,1,1)
GL_SRC_COLOR 目標與來源相乘dest (r,g,b,a)* sour (r,g,b,a)
GL_DST_COLOR 來源與目標相乘sour (r,g,b,a)* dest (r,g,b,a)
GL_ONE_MINUS_SRC_COLOR (r,g,b,a)*((1,1,1,1)- sour(r,g,b,a))
GL_ONE_MINUS_DST_COLOR (r,g,b,a)*((1,1,1,1)- dest(r,g,b,a))
GL_SRC_ALPHA (r,g,b,a) * sour(alpha)
GL_DST_ALPHA (r,g,b,a) * dest(alpha)
GL_ONE_MINUS_SRC_ALPHA (r,g,b,a) * (1- sour(alpha))
GL_ONE_MINUS_DST_ALPHA (r,g,b,a) * (1- dest(alpha))
GL_SRC_ALPHA_SATURATE (r,g,b,a) *MIN (sour(alpha),1-dest(alpha))

 

函式 簡介
glEnable(GL_DEPTH_TEST); 打開深度檢測(Z軸緩存), 一定要調用.保證光照正確繪製和模形前後正確繪製

Alpha演示程式示例,分別有太陽,地球和月球.下載程式

  1. 按+/-鍵增加或減小月球透明度
  2. 按SPACE(空格)鍵啟用或禁用聚光燈
  3. 按UP/DOWN鍵相機前後移動
  4. 按LEFT/RIGHT鍵相機左右旋轉
  5. 按F1鍵打開幫助
  6. 按ESC鍵重置聚光燈參數

OpenGL之鏡面反射光

OpenGL之鏡面反射光

鏡面反射產生閃耀的光輝,此光照效果很有趣,需要分別設置光源材質.

光源和材質 簡介
Light_Specular[] = {1.0f,1.0f,1.0f,1.0f};

glLightfv(light,GL_SPECULAR, Light_Specular);

鏡面反射光顏色{r,g,b,a}分量
Material_Specular[] = {1.0f,1.0f,1.0f,1.0f};

glMaterialfv(GL_FRONT,GL_SPECULAR, Material_Specular);

材質的鏡面反射光顏色,反射出去的顏色不大於材質顏色

{1.0f,1.0f,1.0f,1.0f}:光照完全反射出去,

glMaterialf (GL_FRONT,GL_SHININESS,10); 鏡面反射光聚焦度

0:不聚焦

128:高度聚焦

函式示例

  1. float Light_Specular[] = {0f,1.0f,1.0f,1.0f};// 鏡面反射光分量
  2. float Light_Position[] = {0f,0.0f,1.0f,1.0f};// 燈光位置
  3. glLightfv(light,GL_SPECULAR, Light_Specular);// 鏡面反射光分量
  4. glLightfv(light,GL_POSITION, Light_Position);// 光源位置
  5. Material_Specular[] = {0f,1.0f,1.0f,1.0f};// 鏡面反射光材質
  6. glMaterialfv(GL_FRONT,GL_SPECULAR, Material_Specular);// 鏡面反射光材質
  7. glMaterialf (GL_FRONT,GL_SHININESS,10);// 鏡面反射光聚焦度

鏡面反射光程式示例,行星發出閃耀的光輝,而衛星繞行星旋轉並且發光,分別使用聚光燈和定點光.但無使用環境光.下載程式

  1. 按(/)鍵增加或減小聚光燈焦點指數
  2. 按</>鍵增加或減小聚光燈張角
  3. 按+/-鍵增加或減小多邊形表面的鏡面反射光聚焦度
  4. 按123鍵切換衛星的顏色與光線(紅綠藍)
  5. 按SPACE(空格)鍵啟用或禁用聚光燈
  6. 按UP/DOWN鍵衛星上下移動
  7. 按LEFT/RIGHT鍵衛星左右移動
  8. 按F1鍵打開幫助
  9. 按ESC鍵重置聚光燈參數

 

OpenGL之材質

OpenGL之材質

OpengGL為多邊形設置材質屬性,根據紅綠藍RGB的分量而確定反射光顏色:如下表:

材質 光源的光顏 反射光顏色, 簡介
綠色(0,1,0) 白色(1,1,1) 綠色(0,1,0) 只反射綠光
綠色(0,1,0) 紅色(1,0,0) 黑色(0,0,0) 只反射黑光

 

材質 簡介
void glMaterialf(GLenum face, GLenum pname, GLfloat param); 為多邊形設置材質屬性用於光照計算,它是全局性的, 影響所有繪製的多邊形,直到在次調用
void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params); glMaterialf()數組版本

 

face 簡介
GL_FRONT 材質僅應用於多邊形正面
GL_BACK 多邊形反面
GL_FRONT_AND_BACK 多邊形的正反面

 

pname 數值 簡介
GL_AMBIENT {r,g,b,a} 材質的環境光顏色
GL_DIFFUSE {r,g,b,a} 材質的散射光顏色
GL_AMBIENT_AND_DIFFUSE {r,g,b,a} 同時設置材質的環境光和散射光顏色
GL_SPECULAR {r,g,b,a} 材質的鏡面反射光顏色,反射出去的顏色不大於材質顏色

{1.0f,1.0f,1.0f,1.0f}:光會完全反射出去

GL_SHININESS 0-128 鏡面反射光指數

0:不聚焦

128:高度聚焦

GL_EMISSION {r,g,b,a} 材質的反射光顏色

設置多邊形材質的環境光和散射光,函式示例:

  1. glEnable(GL_LIGHTING); // 啟用光照
  2. float white[] = {0f,1.0f,1.0f,1.0f};// 白色
  3. glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, white);// 設置材質

OpenGL之聚光燈

OpenGL之聚光燈

聚光燈:在定點光源的基礎加上光線輻射方向,因此光線呈圓錐.

聚光燈參數 範圍 簡介
GL_SPOT_DIRECTION (x,y,z) 聚光燈指向/方向3D矢量

默認值:(0,0,-1)

GL_SPOT_EXPONENT 0-128 焦點/指數:光線從焦點到圓錐的邊界,光的強度不斷衰減,直到邊界消失.

指數越大焦點越小

指數越小焦點越大

GL_SPOT_CUTOFF 0.1-90 圓錐面與指向軸的角度(圓錐角),所以聚光燈的張角為圓錐角的2倍.

張角=圓錐角*2

聚光燈函式使用示例

  1. float Spot_Direction[] = {0f,0.0f,-1,0.0f}; // 聚光燈的指向
  2. float Light_Ambient[] = {0f,1.0f,1.0f,1.0f};// 環境光
  3. float Light_Diffuse[] = {0f,1.0f,1.0f,1.0f};// 散射光
  4. float Light_Position[] = {0f,0.0f,1.0f,1.0f};// 光源位置
  5. glEnable(GL_LIGHTING); // 啟用光照
  6. glLightfv(light,GL_AMBIENT, Light_Ambient);// 環境光分量
  7. glLightfv(light,GL_DIFFUSE, Light_Diffuse);// 散射光分量
  8. glLightfv(light,GL_POSITION,Light_Position);// 光源位置
  9. glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 0f); // 設置聚光燈的角度
  10. glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION, Spot_Direction); // 設置聚光燈的
  11. glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 0f); // 設置聚光燈的指數
  12. glEnable(GL_LIGHT0); // 啟用燈光

聚光燈程式示例,可分別設定張角與焦點.下載

  1. 按(/)鍵增加或減小聚光燈焦點指數
  2. 按[/]鍵增加或減小聚光燈張角
  3. 按+/-鍵增加或減小聚光燈亮度
  4. 按SPACE(空格)鍵啟用或禁用聚光燈
  5. 按UP/DOWN鍵正方體繞X軸旋轉
  6. 按LEFT/RIGHT鍵正方體繞Y軸旋轉
  7. 按F1鍵打開幫助
  8. 按ESC鍵重置聚光燈參數

 

OpenGL之法線

OpenGL之法線

法線:即垂直於其表面的單位矢量

OpenGL在進行光照運算前需先計算法線,光與表面相交的角度利用法先計算出反射角度,結合光照與材質計算表面的顏色

法線函式 簡介
void glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); 設置法線

(nx,ny,nz):法線坐標分量

法線函式示例

glBegin(GL_POLYGON);

glNormal3f(0.0f,1.0f,0.0f);// 法線

glVertex3f( 0.5f, 0.5f, 0.5f);

glVertex3f( 0.5f, 0.5f,-0.5f);

glVertex3f(-0.5f, 0.5f,-0.5f);

glVertex3f(-0.5f, 0.5f, 0.5f);

glEnd();

法線的計算 簡介
A*B=(Ax*Bz-Az*By, Az*Bx-Ax*Bz, Ax*By-Ay*Bx) 矢量A和B叉積方程

計算兩個3D向量的法線(叉積)

void Cross(float pa[3], float pb[3], float pc[3],float normal[3])

{

float va[3],vb[3];//矢量1,矢量2

float length;//矢量長度

// 計算矢量1

va[0] = pa[0] – pb[0];

va[1] = pa[1] – pb[1];

va[2] = pa[2] – pb[2];

// 計算矢量2

vb[0] = pb[0] – pc[0];

vb[1] = pb[1] – pc[1];

vb[2] = pb[2] – pc[2];

// 計算叉積

normal[0] = va[1]vb[2] – va[2]vb[1];

normal[1] = va[2]vb[0] – va[0]vb[2];

normal[2] = va[0]vb[1] – va[1]vb[0];

// 計算長度

length = sqrt(normal[0]normal[0] + normal[1]normal[1] + normal[2]*normal[2]);

// 計算單位矢量

normal[0] = normal[0] / length;

normal[1] = normal[1] / length;

normal[2] = normal[2] / length;

}

法線演示程式,旋轉正方體觀看光照的變化如上圖:下載

  1. 按+/-鍵增加或減小光照亮度
  2. 按SPACE(空格)鍵啟用或禁用光照
  3. 按UP/DOWN鍵正方體繞X軸旋轉
  4. 按LEFT/RIGHT鍵正方體繞Y軸旋轉
  5. 按Z+LEFT/Z+RIGHT鍵正方體繞Z軸旋轉
  6. 按F1鍵打開幫助
  7. 按ESC鍵重置模型旋轉角度

 

OpenGL之光照

OpenGL之光照

OpenGL光的顏色由紅綠藍(RGB)的分量確定,當光照到表面時,由表面的材質的確定反射的光的顏色(RGB).

OpenGL光有四類 簡介
環境光 無特定照射方向,太陽光
漫射光 有照射方向的光,遇表面光將朝反方向照射, 如燈光不受相機位置影響.
反射光 有照射方向,遇表面光將朝反方向照射.如亮光但受相機位置影響.
放射光 只增加物體的亮度

 

OpenGL光照影響因素 簡介
光源 環境光、漫射光、反射光、放射光
材質 確定反射光RGBA值
法線 由表面的頂點計算方向
相機位置 當光折射時, 相機位置影響反射光的計算

 

光的顏色、位置、方向的設定:
void glLightfv (GLenum light, GLenum pname, const GLfloat *params);

 

glLightfv()參數 簡介
light GL_LIGHT0~ GL_LIGHT7

OpenGL最多可以指定8個光源

pname 光源的參數名見下表
Params 光源的參數值

 

光源的參數名Pname 簡介
GL_AMBIENT 環境光向所有方向照射
GL_DIFFUSE 漫射光具有方向,碰撞到FACE會進行反射
GL_SPECULAR 鏡面反射光
GL_POSITION 光的位置
GL_SPOT_DIRECTION 聚光燈的矢量方向
GL_SPOT_EXPONENT 聚光燈的指數
GL_SPOT_CUTOFF 聚光燈的邊界
GL_CONSTANT_ATTENUATION 衰減值係數常量
GL_LINEAR_ATTENUATION 線性衰減值係數
GL_QUADRATIC_ATTENUATION 二次衰減值係數

 

環境光 簡介
Pname=GL_AMBIENT 環境光
Params=(x,y,z,w) 顏色分量
w=alpha w=0透明

w=1實體

float Light_Ambient[] = { 1.0f,1.0f,1.0f,1.0f};

glLightfv(GL_LIGHT0,GL_AMBIENT, Light_Ambient);

亮白的環境光示例

 

漫射光 簡介
GL_DIFFUSE 漫射光
Params=(x,y,z,w) 顏色分量
w=alpha w=0透明

w=1實體

float Light_Diffuse[] = { 1.0f,1.0f,1.0f,1.0f};

glLightfv(GL_LIGHT0,GL_DIFFUSE, Light_Diffuse);

亮白的漫射光示例

 

光源的位置 簡介
Pname= GL_POSITION 設定光源的位置
Params=(x,y,z,w) 向量或坐標
w=0 定向光源(x,y,z)為向量定義光的照射方向,如太陽.
W=1 定點光源(x,y,z)為坐標定義光源的位置,如燈泡.
float Light_Position[] = {0.0f,0.0f,0.0f,1.0f };

glLightfv(GL_LIGHT0,GL_POSITION,Light_Position);

光源的位置設在原點

 

光衰減(OpenGL支持三類光衰減) 默認值 簡介
ATTENUATION 光線隨著距離的增大其強度減小,但只適用於定點光源,但定向光源是無窮遠的設置衰減是無意義.

衰減因子*光強度 = 光衰減

GL_CONSTANT_ATTENUATION 1.0f 衰減值係數常量
GL_LINEAR_ATTENUATION 0.0f 線性衰減值係數
GL_QUADRATIC_ATTENUATION 0.0f 二次衰減值係數

光照亮度演示程式,定點光源並且全方位輻射.如上圖:下載

  1. 按+/-鍵增加或減小光照亮度
  2. 按SPACE(空格)鍵啟用或禁用光照
  3. 按UP/DOWN鍵正方形繞X軸旋轉
  4. 按LEFT/RIGHT鍵正方形繞Y軸旋轉
  5. 按Z+LEFT/Z+RIGHT鍵繞Z軸旋轉
  6. 按F1鍵打開幫助
  7. 按ESC鍵重置模型旋轉角度

 

OpenGL之漸變

OpenGL之漸變

OpenGL可對每個頂點設定不同的顏色,令模型產生漸變效果.

漸變函式示例:

  1. glShadeModel(GL_SMOOTH);啟用漸變
  2. glBegin(GL_QUADS);繪畫四邊形
  3. glColor3f(0f, 0.0f, 0.0f);glVertex3f(0.0f, 0.0f, 0.0f);黑色
  4. glColor3f(0f, 0.0f, 1.0f);glVertex3f(0.0f, 0.0f, 1.0f);藍色
  5. glColor3f(0f, 0.0f, 1.0f);glVertex3f(1.0f, 0.0f, 1.0f);紫紅色
  6. glColor3f(0f, 0.0f, 0.0f);glVertex3f(1.0f, 0.0f, 0.0f);紅色
  7. glEnd();
漸變 簡介
void glShadeModel (GLenum mode); 設定模型漸變模式(mode)

獲取當前使用的漸變模式

  1. GLenum mode;
  2. glGetIntegerv( GL_SHADE_MODEL,&mode);
漸變模式(mode) 簡介
GL_FLAT 單調,只應用單色
GL_SMOOTH 漸變(默認)

 

GL_FLAT單調顏色應用 簡介
GL_POINTS 應用最後一個頂點的顏色
GL_LINES
GL_TRIANGLES
GL_QUADS
GL_LINE_LOOP 應用分段的第二個頂點的顏色
GL_LINE_STRIP
GL_TRIANGLE_STRIP 應用最後一個頂點的顏色
GL_TRIANGLE_FAN
GL_ GL_QUAD_STRIP
GL_POLYGON 應用第一個頂點的顏色

漸變演示程式:下載

  1. 按UP/DOWN鍵繞X軸旋轉
  2. 按LEFT/RIGHT鍵繞Y軸旋轉
  3. 按Z+LEFT/Z+RIGHT鍵繞Z軸旋轉
  4. 按F1鍵打開幫助
  5. 按ESC鍵模型旋轉角度重置
  6. 按SPACE鍵切換漸變模式

 

OpenGL之屬性

OpenGL之屬性

OpenGL擁有幾百個狀態,通過屬性堆棧的壓棧和出棧,保存與恢復狀態變量.

函式 簡介
void glPushAttrib (GLbitfield mask); 把當前狀態壓入堆棧

Mask:掩碼,保存指定屬性分組

void glPopAttrib (void); 屬性堆棧出棧並恢復狀態

 

掩碼mask 屬性分組
GL_ALL_ATTRIB_BITS 所有屬性分組的OpenGL的狀態變量
GL_VIEWPORT_BIT 視口狀態變量
GL_ENABLE_BIT 以啟用的狀態變量
GL_FOG_BIT 煙霧狀態變量
GL_LIGHTING_BIT 燈光狀態變量
GL_LINE_BIT 直線狀態變量
GL_POINT_BIT 質點狀態變量
GL_POLYGON_BIT 多邊形狀態變量
GL_TEXTURE_BIT 紋理狀態變量

 

OpenGL之變換

OpenGL之變換

渲染3D場景時頂點在最終被渲染到屏幕上之前需經過四類變換

變換(TRANSFORMATION) 簡介
視圖變換(VIEW transformation) 設定攝影機CAMERA的位置
模型變換(MODEL transformation) 移動、旋轉、縮放多邊型模型,將模型局部坐標轉為世界坐標.
投影變換(PROJECTION transformation) 設定視口面積和裁剪平面,用於確定那些多邊型模型位於視口之內.
視口變換(Viewport transformation) 將剪切坐標影射到2D視口(屏幕)
模型視圖變換(modelview transformation) OpenGL將視圖變換與模型變換組合成單獨的模型視圖變換

視圖變換(VIEW transformation) 即攝影機的設定有三種放法,先將觀察矩陣載入單位矩陣glLoadIdentity();相機為於原點,朝向為負Z軸,上方向量為正Y軸.

視圖變換(VIEW transformation) 簡介
gluLookAt () 設定攝影機的位置和方向
glRotatef ()與glTranslatef() 攝影機CAMERA固定在原點,使用旋轉和平移在世界坐標中移動所有模型

模型變換(MODEL transformation)是指通過平移、縮放、旋轉將模型定位與定向

模型變換(MODEL transformation) 簡介
平移glTranslatef() 模型沿向量進行移動
旋轉glRotatef() 模型繞向量進行旋轉
縮放glScalef() 在XYZ三軸指定不同縮放係數放大或縮小模型

投影變換(PROJECTION transformation)是指設定視口面積和裁剪平面,它在模型變換與視圖變換之後執行,用於確定那些多邊型模型位於視口之內.在設定投影之前需要選擇投影矩陣堆棧glMatrixMode(GL_PROJECTION);和載入單位矩陣glLoadIdentity();OpenGL支持兩類投影

投影變換(PROJECTION transformation) 簡介
透視投影

glFrustum()

gluPerspective()

用於3D世界的顯示與真實世界一樣, 多邊型模型呈現近大遠小
正交投影

glOrtho()

gluOrtho2D()

不考濾與攝影機的距離,顯示多邊型模型真實的大小,常用於CAD軟件和2D遊戲

視口變換(Viewport transformation)發生在投影變換之後,視口是指渲染的2D窗口的大小和方向

視口變換(Viewport transformation) 簡介
glViewport() 每當窗口大小發生改變都要重設視口大小

矩陣堆棧

OpenGL的變換運算均對矩陣堆棧的棧頂進行操作.

OpenGL矩陣堆棧 簡介
Modelview Matrix Stack 模型視圖矩陣堆棧
Projection Matrix Stack 投影矩陣堆棧
TEXTURE Matrix Stack 紋理矩陣堆棧
ATTRIB Matrix Stack 屬性矩陣堆棧
CLIENT ATTRIB Matrix Stack 剪切屬性矩陣堆棧
NAME Matrix Stack

 

OpenGL之相機-旋轉和平移

OpenGL之相機-旋轉和平移

相機CAMERA固定在原點,通過旋轉和平移在世界坐標中移動所有模型

相機設定示例:

  1. glMatrixMode(GL_MODELVIEW);設定模型視圖矩陣
  2. glLoadIdentity()將觀察矩陣載入單位矩陣,相機位於原點(0,0,0), 朝向為負Z軸 (0,-90,0)
  3. glRotatef(AngleZ,0f,0.0f,1.0f); 橫搖/側滾角繞Z軸旋轉
  4. glRotatef(AngleY+90,0f,1.0f,0.0f); 偏航/航向角繞Y軸旋,補償90度
  5. glRotatef(AngleX,0f,0.0f,0.0f); 傾斜/俯仰角繞X軸旋轉
  6. glTranslatef(-posX,-posY,-posZ);移動模型坐標
視圖變換(VIEW transformation) 簡介
void glRotatef (

GLfloat angle,

GLfloat x, GLfloat y,GLfloat z);

旋轉

Angle:旋轉角度

x,y,z:軸向量

void glTranslatef (

GLfloat x, GLfloat y, GLfloat z);

平移

x,y,z:偏移向量

 

旋轉
glRotatef(AngleZ,0.0f,0.0f,1.0f); Z軸 橫搖/側滾
glRotatef(AngleY+90,0.0f,1.0f,0.0f); Y軸補償+90度 偏航/航向
glRotatef(AngleX,1.0f,0.0f,0.0f); X軸 傾斜/俯仰

 

平移 簡介
glTranslatef(-posX,-posY,-posZ); 反方向移動模型坐標

相機移動程式演示:下載

  1. 按UP/DOWN鍵前後移動
  2. 按LEFT/RIGHT鍵左右旋轉,繞Y軸旋轉
  3. 小鍵盤4/6繞Z軸旋轉
  4. 小鍵盤8/2繞X軸旋轉
  5. 按F1鍵打開幫助
  6. 按ESC鍵相機返回原點

OpenGL之相機 gluLookAt()

OpenGL之相機 gluLookAt()

函式gluLookAt()允許你設定相機的位置、方向、朝上向量

相機設定示例:

  1. glMatrixMode(GL_MODELVIEW);設定模型視圖矩陣
  2. glLoadIdentity()將觀察矩陣載入單位矩陣,相機為於原點,朝向為負Z軸,上方向量為正Y軸.
  3. gluLookAt() 相對于原點在移動相機
函式 數值 簡介
void gluLookAt (    
GLdouble eyex, 0.0f,0.0f,0.0f, 相機位置設為原點
GLdouble eyey,
GLdouble eyez,
GLdouble centerx, 0.0f,0.0f,-100.0f, 相機朝向負Z軸
GLdouble centery,
GLdouble centerz,
GLdouble upx, 0.0f,1.0f,0.0f 上方向量為正Y軸
GLdouble upy,
GLdouble upz);

 

位置和方向計算 簡介
radians = 3.141592654f * angleA / 180.0f; AngleA: Y軸角度

Radians: 弧度

pos=pos – (speed * cos(radians)); Pos:相機的位置

Speed:移動速度

target=pos+dist*cos(radians); Dist:視距

Target:相機的朝向

相機移動程式演示:下載

  1. 按UP/DOWN鍵前後移動
  2. 按LEFT/RIGHT鍵左右旋轉
  3. 按F1鍵打開幫助
  4. 按ESC鍵相機返回原點
  5. 按+鍵加大直線寬度
  6. 按-鍵減小直線寬度
  7. 按S鍵切換抗鋸齒功能
  8. 按.鍵切換四邊形點畫模式
  9. 按1鍵切換為黃色
  10. 按2鍵切換為綠色
  11. 按3鍵切換為紅色
  12. 按4鍵填充模式
  13. 按5鍵線框模式
  14. 按6鍵頂點模式

OpenGL之視口變換

OpenGL之視口變換

視口(Viewport)即渲染窗口大小,每當窗口大小發生改變都要使用glViewport()進行設定.視口變換在投影變換之後進行

視口設定 簡介
void glViewport(

GLint x, GLint y, 視口的左下角坐標

GLsizei width, 視口的寬度

GLsizei height); 視口的高度

視口的左下角坐標設為0,0

視口的寬高設為窗口大寬高

 

重設窗口大小,在WM_SIZE(窗口大小發生改變)消息下調用

  1. glViewport(0,0,width,height);將視口重置為新的尺寸
  2. glViewport(0,0,OpenGL_Width,OpenGL_Height);
  3. glMatrixMode(GL_PROJECTION); 設定投影矩陣
  4. glLoadIdentity();載入單位矩陣
  5. gluPerspective(0f, Width/Height,1.0f,1000.0f);
  6. glMatrixMode(GL_MODELVIEW);設定模型視圖矩陣
  7. glLoadIdentity();載入單位矩陣

 

OpenGL之矩陣

OpenGL之矩陣

OpenGL的變換運算均使用4×4矩陣進行.OpenGL使用堆棧保存矩陣.各種變換運算均針對棧頂進行操作.

矩陣 簡介
void glMatrixMode (GLenum mode); 設定當前矩陣堆棧
GL_MODELVIEW 模型視圖矩陣
GL_PROJECTION 投影矩陣
GL_COLOR 顏色矩陣
GL_TEXTURE 紋理矩陣

示例

  1. glMatrixMode(GL_MODELVIEW); 設定當前矩陣為模型視圖矩陣
  2. glLoadIdentity();載入單位矩陣,並且朝向負Z軸
  3. 進行其它變換
矩陣堆棧 簡介
void glPushMatrix(void); 複製當前矩陣(棧頂)並壓棧.
void glPopMatrix(void); 當前矩陣堆棧出棧並丟棄.

將當前坐標系統切換為新坐標系統,渲染完成後恢復原始坐標系統.示例:

  1. glMatrixMode(GL_MODELVIEW);設定模型視圖矩陣
  2. glPushMatrix();複製當前矩陣並壓棧.
  3. glLoadIdentity();載入單位矩陣
  4. glTranslatef(x,y,x);移動坐標系
  5. glPopMatrix();出棧,恢復源始坐標系統

不同矩陣堆棧有不同的深度,可通過glGetIntegerv()獲取

參數 深度 簡介
GL_MAX_MODELVIEW_STACK_DEPTH 32 模型視圖矩陣堆棧的深度
GL_MAX_PROJECTION_STACK_DEPTH 10 投影矩陣堆棧的深度
GL_MAX_TEXTURE_STACK_DEPTH 10 紋理矩陣堆棧的深度
GL_MAX_ATTRIB_STACK_DEPTH 16 屬性矩陣堆棧的深度

獲取模型視圖矩陣深度示例:

  1. GLint params[1];
  2. glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH,params);

OpenGL之旋轉

OpenGL之旋轉

旋轉glRotatef()使模形圍繞軸向量進行旋轉.先設定旋轉矩陣後繪畫模型.

旋轉 簡介
void glRotatef (

GLfloat angle,

GLfloat x,

GLfloat y,

GLfloat z);

單精度版本

angle:旋轉角度

逆時針旋轉:角度為正

順時針旋轉:角度為負

xyz:旋轉軸向量

void glRotated (

GLdouble angle,

GLdouble x,

GLdouble y,

GLdouble z);

雙精度版本

函式示例分別對XYZ進行旋轉:

  1. 設定模型視圖矩陣glMatrixMode(GL_MODELVIEW);
  2. 載入單位矩陣glLoadIdentity();
  3. 繞X軸旋轉glRotatef(angleX,1,0,0);
  4. 繞Y軸旋轉glRotatef(angleY,0,1,0);
  5. 繞Z軸旋轉glRotatef(angleZ,0,0,1);
  6. 繪畫立方體Draw();
旋轉示例 簡介
glRotatef(45.0f,1.0f,0.0f,0.0f); 繞X軸以逆時針方向旋轉45度
glRotatef(-90.0f,0.0f,1.0f,0.0f); 繞Y軸以順時針方向旋轉45度
glRotatef(135.0f,0.0f,0.0f,1.0f); 繞Z軸以逆時針方向旋轉135度

旋轉演示程式如上圖:下載

  1. 按UP/DOWN鍵繞X軸旋轉
  2. 按LEFT/RIGHT鍵繞Y軸旋轉
  3. 按Z+LEFT/Z+RIGHT鍵繞Z軸旋轉
  4. 按F1鍵打開幫助
  5. 按ESC鍵模型旋轉角度重置

OpenGL之縮放

OpenGL之縮放

縮放glScalef()可在XYZ三軸指定不同縮放系數,放大或縮小模型或坐標系統的大小.

放大: 縮放系數大於(>1),若設為2放大一倍

縮小: 縮放系數為(1.0~0.0),若設為0.5側縮小一倍

函式示例:

  1. 設定模型視圖矩陣glMatrixMode(GL_MODELVIEW);
  2. 載入單位矩陣glLoadIdentity();
  3. 縮放glScalef(x,y,z);參數xyz為縮放系數,若縮放系數为1侧不缩放.縮放操作就是乘以縮放系數.
  4. 繪畫立方體Draw();
縮放 簡介
void glScalef(

GLfloat x,

GLfloat y,

GLfloat z);

單精度版本

對模型放大一倍:

1.    縮放glScalef(2,2,2)

2.    後再繪畫Draw()

void glScaled(

GLdouble x,

GLdouble y,

GLdouble z);

雙精度版本

縮放演示程式如上圖:下載

  1. 按UP/DOWN鍵對XYZ三軸進行模型縮放
  2. 按LEFT/RIGHT鍵繞Y軸旋轉
  3. 按F1鍵打開幫助
  4. 按ESC鍵模型縮放重置

OpenGL之平移

OpenGL之平移

平移Translate可將模型在3D世界中移動,先設定平移矩陣後繪畫模型:

函式示例:

  1. 設定模型視圖矩陣glMatrixMode(GL_MODELVIEW);
  2. 載入單位矩陣glLoadIdentity();
  3. 移動3D坐標glTranslatef(x,y,z);參數xyz為3D世界坐標的偏移量
  4. 繪畫立方體Draw();
平移 簡介
void glTranslatef(

GLfloat x,

GLfloat y,

GLfloat z);

單精度版本

如在3D世界(6,6,6)繪畫模型:

1.     先平移glTranslatef(6,6,6)

2.     後在繪畫Draw()

void glTranslated(

GLdouble x,

GLdouble y,

GLdouble z);

雙精度版本

平移演示程式如上圖:下載

  1. 按LEFT/RIGHT鍵模型在X軸中移動
  2. 按UP/DOWN鍵模型在Z軸中移動
  3. 按F1鍵打開幫助
  4. 按ESC鍵模型歸位

OpenGL之投影變換

OpenGL之投影變換

投影變換是指設定視口面積和剪切平面,它在模型變換與視圖變換之後執行,用於確定那些多邊型模型位於視口之內. OpenGL支持兩類投影

投影變換(PROJECTION transformation) 簡介
透視投影

glFrustum()

gluPerspective()

用於3D世界的顯示與真實世界一樣, 多邊型模型呈現近大遠小
正交投影

glOrtho()

gluOrtho2D()

不考濾與攝影機的距離,顯示多邊型模型真實的大小,常用於CAD軟件和2D遊戲,文本顯示

 

透視投影 簡介
void gluPerspective (

GLdouble fovy,

GLdouble aspect,

GLdouble zNear,

GLdouble zFar);

直接指定視角和屏幕寬高比從而計算觀察截體.
Fovy 可視角度一般設為45度至90度
Aspect 屏幕的寬高比(Width/Height)
zNear 近端剪切面距離
zFar 遠端剪切面距離

 

透視投影 簡介
void glFrustum (

GLdouble left,

GLdouble right,

GLdouble bottom,

GLdouble top,

GLdouble zNear,

GLdouble zFar);

觀察截體的計算由近端剪切面與遠端剪切面確定
Left right bottom top 近端剪切面的範圍
zNear 近端剪切面距離
zFar 遠端剪切面距離

 

正交投影 簡介
Void glOrtho (

GLdouble left,

GLdouble right,

GLdouble bottom,

GLdouble top,

GLdouble zNear,

GLdouble zFar);

相同的模型不管與攝影機距離的遠近,其呈現的相同大小
left right bottom top 剪切面的範圍
zNear 近端剪切面距離
zFar 遠端剪切面距離

 

正交投影 簡介
void gluOrtho2D (

GLdouble left,

GLdouble right,

GLdouble bottom,

GLdouble top);

相當於glOrtho(left,right,bottom,top,-1,1);
left right bottom top 剪切面的範圍

投影示例

  1. 選擇投影矩陣堆棧glMatrixMode(GL_PROJECTION);
  2. 載入單位矩陣glLoadIdentity()
  3. 設定透視投影或正交投影

投影函式

void Set_Projection_OpenGL(bool Is3D)

{

::glViewport(0,0,OpenGL_Width,OpenGL_Height); // 重置視區尺寸

::glMatrixMode(GL_PROJECTION); // 設定投影矩陣

::glLoadIdentity();// 載入單位矩陣

if(Is3D == true) // 3D投影計算窗口尺寸比例

gluPerspective(54.0f,(GLfloat)OpenGL_Width/(GLfloat)OpenGL_Height,1.0f,1000.0f);

else  // 設為2D投影

gluOrtho2D(0, OpenGL_Width, 0, OpenGL_Height);

::glMatrixMode(GL_MODELVIEW);  // 設定模型視圖矩陣

::glLoadIdentity();// 載入單位矩陣

}

投影演示程式如上圖:下載

  1. 按P鍵在正交投影與透視投影之間切換
  2. 按S鍵切換抗鋸齒功能
  3. 按1鍵切換為黃色
  4. 按2鍵切換為綠色
  5. 按3鍵切換為紅色
  6. 按F1鍵打開幫助
  7. 按ESC鍵旋轉角度清零
  8. 按+鍵加大直線寬度
  9. 按-鍵減小直線寬度

Windows訪問鍵盤

Windows訪問鍵盤

此程式用於查閱鍵消息的虛擬代碼(Virtual Code)與按鍵狀態(Key state)如上圖:下載程式

在Windows訪問鍵盤有五種方法

  1. 接收WM_CHAR消息
  2. 接收WM_KEYDOWN消息
  3. 接收WM_KEYUP消息
  4. 調用GetAsyncKeyState()函式,需要輸入虛擬代碼(Virtual Code)
  5. DirectInput
Windows鍵盤消息 觸發條件
WM_CHAR 按下鍵盤
WM_KEYDOWN 按下鍵盤
WM_KEYUP 鬆開鍵盤
GetAsyncKeyState() 任何時候都可讀取鍵盤

 

Windows鍵盤消息 wParam lParam
WM_CHAR ASCII碼(ASCII Code) 按鍵狀態Key state
WM_KEYDOWN 虛擬代碼(Virtual Code)
WM_KEYUP

 

按鍵狀態Key state(BIT) 變量 簡介
0~15 整數 按鍵重複次數(repeat count)
16~12 整數 掃描碼(scan code)
24 bool 擴展鍵標識,若為1為該鍵為擴展鍵,如右側的ALT鍵和CTRL鍵
25~28 無使用
29 bool 若為1則ALT鍵被按下,否則為0
30 bool 前一個鍵的狀態
31 bool 若為1鍵被釋放,若為0鍵被按住.

 

OpenGL之繪畫多邊形

OpenGL之繪畫多邊形

OpenGL多邊形的演示程式如上圖:下載

  1. 按鼠標左鍵點擊繪畫多邊形,繪畫時頂點的走向為逆時針多邊形為正面,否則為背面.
  2. 按+鍵加大直線寬度
  3. 按-鍵減小直線寬度
  4. 按S鍵切換抗鋸齒功能
  5. 按.鍵切換多邊形點畫模式
  6. 按C鍵切換多邊形隱面裁剪
  7. 按1鍵填充模式
  8. 按2鍵線框模式
  9. 按3鍵頂點模式
  10. 按4鍵切換為白色
  11. 按5鍵切換為黃色
  12. 按6鍵切換為紅色
  13. 按F1鍵打開幫助
  14. 按ESC鍵清空畫面

繪畫多邊形,頂點不能小於3個

  1. glBegin(GL_POLYGON);準備繪畫多邊形
  2. for (int i = 0; i < count; ++i)
  3. glVertex3f(v[i].x,v[i].y,v[i].z);繪畫多邊形頂點
  4. glEnd();結束繪畫

多邊形其它設定請參考三角形

OpenGL之繪畫四邊形

OpenGL之繪畫四邊形

OpenGL四邊形的演示程式如上圖:下載

  1. 按鼠標左鍵點擊繪畫四邊形,繪畫時頂點的走向為逆時針四邊形為正面,否則為背面.
  2. 按+鍵加大直線寬度
  3. 按-鍵減小直線寬度
  4. 按S鍵切換抗鋸齒功能
  5. 按.鍵切換四邊形點畫模式
  6. 按C鍵切換四邊形隱面裁剪
  7. 按1鍵填充模式
  8. 按2鍵線框模式
  9. 按3鍵頂點模式
  10. 按4鍵每四個頂點組成四邊形
  11. 按5鍵頂點相連的四邊形

繪畫四邊形

  1. glBegin(GL_TRIANGLES);準備繪畫四邊形
  2. for (int i = 0; i < count; ++i)
  3. glVertex3f(v[i].x,v[i].y,v[i].z);繪畫四邊形頂點
  4. glEnd();結束繪畫
glBegin()繪畫四邊形參數 簡介
GL_QUADS 每四個頂點組成四邊形
GL_QUAD_STRIP 頂點相連的四邊形,需要把第三第四個頂點的渲染順序交換.

四邊形也屬於多邊形其它設定請參考三角形

 

OpenGL之繪畫三角形

OpenGL之繪畫三角形

OpenGL三角形屬於多邊形.演示程式如上圖:下載

  1. 按鼠標左鍵點擊繪畫三角形,繪畫時頂點的走向為逆時針三角形為正面,否則為背面.
  2. 按+鍵加大直線寬度
  3. 按-鍵減小直線寬度
  4. 按S鍵切換抗鋸齒功能
  5. 按.鍵切換三角形點畫模式
  6. 按C鍵切換三角形隱面裁剪
  7. 按1鍵填充模式
  8. 按2鍵線框模式
  9. 按3鍵頂點模式
  10. 按4鍵每三個頂點組成三角形
  11. 按5鍵頂點相連的三角形
  12. 按6鍵第一個頂點作為三角形的共同頂點

繪畫三角形

  1. glBegin(GL_TRIANGLES);準備繪畫三角形
  2. glVertex3f(x1,y1,z1);繪畫三角形頂點1
  3. glVertex3f(x2,y2,z2);繪畫三角形頂點2
  4. glVertex3f(x3,y3,z3);繪畫三角形頂點3
  5. glEnd();結束繪畫
glBegin()繪畫直線參數 簡介
GL_TRIANGLES 每三個頂點組成三角形
GL_TRIANGLE_STRIP 頂點相連的三角形
GL_TRIANGLE_FAN 第一個頂點作為三角形的共同頂點

因屏幕由像素組成,三角形邊緣會產生鋸齒,啟用抗鋸齒算法後會變得平滑,並修改邊緣像素的顏色:

  1. glEnable(GL_POLYGON_SMOOTH);啟用多邊形的平滑模式(抗鋸齒功能)
  2. glEnable(GL_BLEND);啟用混合

多邊形模式(正面默認為填充模式)

void glPolygonMode(GLenum face,GLenum mode);

多邊形面(face) 簡介
GL_FRONT 多邊形正面:頂點的走向為逆時針(默認)
GL_BACK 多邊形背面:頂點的走向為順時針
GL_FRONT_AND_BACK 正面與背面

 

多邊形模式(mode) 簡介
GL_FILL 填充模式:對多邊形內部進行顏色填充(默認)
GL_LINE 線框模式:多邊形只繪畫直先不填充
GL_POINT 頂點模式:只繪畫多邊形頂點

設置多邊形隱面裁剪

3D圖形渲染的工作量非常大,把不可見的面剔除則可節減大量變換和渲染時間.

  1. glEnable(GL_CULL_FACE);啟用隱面裁剪
  2. glCullFace(GL_BACK);設背面為隱面
  3. glFrontFace(GL_CCW);多邊形正面使用逆時針
正面模式(MODE) 簡介
GL_CCW 多邊形正面使用逆時針
GL_CW 多邊形反面使用順時針

多邊形點畫模式可用於簡單的填充(不太常用)

void glPolygonStipple(GLushort * mask);

mask:掩碼大小寬8byte*高16byte=128(byte)=1024(bit),1填充像素,0不填充

  1. glEnable(GL_POLYGON_STIPPLE);啟用點畫模式
  2. glPolygonStipple(mask);設置掩碼

 

OpenGL之繪畫直線

OpenGL之繪畫直線

OpenGL支持基本幾何直線繪畫,使用glVertex()生成繪畫相連直線的演示程式如上圖:下載

  1. 按鼠標左鍵點擊繪畫相連直線
  2. 按+鍵加大直線寬度
  3. 按-鍵減小直線寬度
  4. 按S鍵切換直線抗鋸齒功能
  5. 按.鍵切換直線點畫模式(虛線)
  6. 按1鍵切換为白色
  7. 按2鍵切換为黄色
  8. 按3鍵切換为红色
  9. 按4鍵每兩個頂點組成的直線
  10. 按5鍵由多個頂點組成的相連直線
  11. 按6鍵由多個頂點組成相連的閉合直線

繪畫直線

  1. glLineWidth(width);設置直線寬度
  2. glBegin(GL_LINE_STRIP);準備繪畫連續直線
  3. glVertex3f(x1,y1,z1);繪畫直線頂點1
  4. glVertex3f(x2,y2,z2);繪畫直線頂點2
  5. glEnd();結束繪畫
glBegin()繪畫直線參數 簡介
GL_LINES 由兩個頂點組成的直線
GL_LINE_STRIP 由多個頂點組成的相連直線
GL_LINE_LOOP 由多個頂點組成相連的閉合直線,第一個與最後一個頂點自動相連

因屏幕由像素組成,直線邊緣會產生鋸齒,OpenGL有抗鋸齒算法,啟用後直線會變得平滑,並修改邊緣像素的顏色:

  1. glEnable(GL_LINE_SMOOTH);啟用直線的平滑模式(抗鋸齒功能)
  2. glEnable(GL_BLEND);啟用混合

點畫模式通常用繪畫虛線

void glLineStipple(GLint factor,GLushort pattern);

factor:模板每BIT對應像素量

pattern:由2個Btye組成點畫模板

  1. glEnable(GL_LINE_STIPPLE);設置點畫模式(虛線)
  2. glLineStipple(5,0xfafa);設置模板

開啟直線抗鋸齒算法後,直線寬度範圍受到限制,若輸入不受支持直線寬度,會改為最接近的支持數值:

  1. GLfloat widths[2];浮點數數組
  2. glGetFloatv(GL_LINE_WIDTH_RANGE, widths);提取直線寬度的範圍
  3. GLfloat min = widths[0];最小
  4. GLfloat max = widths[1];最大
  5. GLfloat granularity;
  6. glGetFloatv(GL_LINE_WIDTH_GRANULARITY,&granularity);提取直線寬度的粒度
  7. GLfloat width;
  8. glGetFloatv(GL_LINE_WIDTH,&width);獲取當前直線寬度
  9. width = width + granularity;加大
  10. width = width – granularity;減小
  11. glPointSize(width);設置當前直線寬度,但不能在glBegin()與glEnd()之間調用

Microsoft Visual C++之鍵盤快捷鍵

Microsoft Visual C++之鍵盤快捷鍵

因為VC是最好用的基於Windwos的 C編譯器,但如果配合快捷鍵使用將會事半功倍

快捷鍵 簡介
CTRL+U 選擇文本轉為小寫
CTRL+SHIFT+U 選擇文本轉為大寫
CTRL+F Find(查找字符串),但Find In Files顯示輸出欄Output比Find更好用
CTRL+H 替換字符串,VC最好用的文本編輯工具
CTRL+C 拷貝文本
CTRL+V 粘貼文本
CTRL+Z 撤消文本
CTRL+Y 恢復文本
CTRL+A 全選文本
CTRL+R 編輯資源文檔resources.rc
CTRL+S 保存文檔,使用率最高的快捷鍵.良好使用習慣
F7 編譯所有文檔
CTRL+F7 編譯當前文檔
ALT+F7 工程設置(Project Settings)較小使用
ALT+2 顯示輸出欄Output
ALT+0 打開並把焦點切換到workspace
CTRL+W 嚮導無用
CTRL+G Go to很小使用
ATL+F2 BOOKMARKS書簽
CTRL+F2 標記
F11 單步調試
CTRL+F10 Run to cursor運行到遊標
F5 把修改項編譯並執行程式,或斷點後繼續執行,常用鍵之一.
CTRL+F5 不重新編譯只執行程式,用於編譯時長耐工程
CTRL+ SHIFT+8 View whitespace在空格加入或刪除”~”無用的工能只會讓人困惑.
CTRL+SHIFT+SPACE Parameter info查看函式的參數,最好用的快捷鍵之一
CTRL+T Type Info查看函式或變量的類型信息,最好的用快捷鍵之一
CTRL+ALT+T 自動彈出全局變量與全局函式,按::也可自動彈出,最好用的快捷鍵之一

 

WordPress之Jetpack外掛

WordPress之Jetpack外掛

終於可以成功啟用Jetpack梯來它有很強的系統依賴性,我之前是Godaddy的Windows的主機,我把所有舊版Jetpack都嘗試安裝無一成功,後更改為Linux主機後成功安裝. Jetpack是Wordpress的十全大補外掛,因此我刪除左三個重複外掛!你需要wordpress.com的帳號但很多服務需要收費,有點點雞肋的感覺.

Jetpack提供 簡介
分享按扭 安裝Jetpack的原因之一,第三方分享按扭大多如人意,而且大多經過跳轉.
第三方帳號登錄 安裝Jetpack的最大誘因,允許使用WordPress.com、Twitter、Facebook 或 Google+帳號登錄
自動分享 本人認為手動分享更零活
點贊按扭 對於Blog意義不大
相關文章 Contextual Related Posts選項更多

Jetpack只可顯示三個相關文章,意義不大.

網誌統計 流量統計分析與感覺一般,可以整合Google Analytics但需要收費.
廣告ADS 廣告需要收費暈
文章摘要 Jetpack支持文章摘要,但只支持移動主題.
SEO 暈又收費
網站地圖 XML自動傳送至所有主要搜尋引擎進行索引。Wordpress本已內置同步訂閱,而且更好用.
聯繫表單 意見反應,有一定作用,但可使用迴響替代.
短網址 短網址對於Blog意義不大
電郵發表文章 智能手機時代意義不大
留言Markdown 文本標記語言
留言點贊 有一定意義
大頭貼 無用過
惡意登入 主動阻擋惡意登入嘗試
備份 自動備份整個網站,收費
停機監控 郵件通知
無限捲動 手機移動閱覽時效果

 

OpenGL之繪畫頂點

OpenGL之繪畫頂點

OpenGL支持基本幾何頂點繪畫,使用glVertex()生成畫點的演示程式如上圖:下載

  1. 按鼠標左鍵繪畫頂點
  2. 按+鍵加大頂點尺寸
  3. 按-鍵減小頂點尺寸
  4. 按S鍵切換抗鋸齒功能
  5. 按1鍵切換為白色
  6. 按2鍵切換為黃色
  7. 按3鍵切換為紅色

繪畫單個頂點

  1. glPointSize(size);設置頂點的大小
  2. glBegin(GL_POINTS); 準備繪畫
  3. glVertex3f(x,y,z); 繪畫頂點(浮點數版)
  4. glVertex3i(x,y,z); 繪畫頂點(整數版)
  5. glEnd(); 結束繪畫

因屏幕由像素組成,縮放頂點時邊緣會產生鋸齒,OpenGL有其抗鋸齒算法,啟用後頂定會由方變圓,並修改邊緣像素的顏色:

if (glIsEnabled(GL_POINT_SMOOTH) == false)// 判斷抗鋸齒是否已啟用

{

glEnable(GL_POINT_SMOOTH); // 啟用頂點的平滑模式(抗鋸齒功能)

glEnable(GL_BLEND);// 需啟用混合

}

開啟抗鋸齒算法後,頂點尺寸範圍受到限制,若輸入不受支持頂點的尺寸,會改為最接近的支持數值:

  1. GLfloat sizes[2];浮點數數組
  2. glGetFloatv(GL_POINT_SIZE_RANGE,sizes);提取頂點尺寸的範圍
  3. GLfloat min = sizes[0];最小
  4. GLfloat max = sizes[1];最大
  5. GLfloat granularity;
  6. glGetFloatv(GL_POINT_SIZE_GRANULARITY,&granularity);提取頂點尺寸的粒度
  7. GLfloat size;
  8. glGetFloatv(GL_POINT_SIZE,&size);獲取當前頂點尺寸
  9. size = size + granularity;加大
  • size = size – granularity;減小
  • glPointSize(size);設置當前頂點的大小,但不能在glBegin()與glEnd()之間調用

OpenGL之速度與質量

OpenGL之速度與質量

因顯卡性能各異,所以OpenGL可給用戶在速度與質量之間作出選擇,參數在下表給出.並給出示例代碼:

Void glHint(GLenum target, GLenum hint);

HINT 簡介
GL_FASTEST 使用最快速度和效率,但畫面質量有所下降.
GL_NICEST 使用最高畫面質量,但運行速度有所下降
GL_DONT_CARE 由顯卡的OpenGL驅動在速度和質量之間作出選擇

 

TARGET 簡介
GL_POINT_SMOOTH_HINT 指定在進行反鋸齒的操作中,點、線、多邊形的抽樣質量
GL_LINE_SMOOTH_HINT
GL_POLYGON_SMOOTH_HINT
GL_FOG_HINT 若hint設為GL_NICEST,煙霧的計算將以每像素的形式執行

若hint設為GL_FASTEST,煙霧的計算將以每頂點的形式執行

GL_PERSPECTIVE_CORRECTION_HINT 指定顏色和紋理坐標的插值品質

設置OpenGL性能

hint:建議性能

GL_FASTEST:速度優先

GL_NICEST:最高畫面質量

GL_DONT_CARE:由顯卡驅動決定

void Set_Hint_OpenGL(GLenum hint)

{

glHint(GL_POINT_SMOOTH_HINT,          hint);// 點

glHint(GL_LINE_SMOOTH_HINT,           hint);// 線

glHint(GL_POLYGON_SMOOTH_HINT,        hint);// 多邊形

glHint(GL_FOG_HINT,                   hint);// 煙霧

glHint(GL_PERSPECTIVE_CORRECTION_HINT,hint);//紋理坐標

}

OpenGL之錯誤碼

OpenGL之錯誤碼

OpenGL內部有ERROR錯誤標記,若向OpenGL的函式傳遞不正確的參數,函式會設置錯誤碼並返回.錯誤代碼一但產生就不會修改,直到調用

GLenum error = glGetError();

它將返回下表的錯誤代碼,並把標記重設為GL_NO_ERROR:

錯誤碼 簡介
GL_NO_ERROR 無錯誤
GL_INVALID_ENUM 傳遞不被支持枚舉型(enum)數值時產生此錯誤
GL_INVALID_VALUE 傳遞超出可接受範圍的數值時產生此錯誤
GL_INVALID_OPERATION 傳遞參數未能運行或當前設置未能運行,這錯誤碼較上兩者更難以追查錯誤
GL_STACK_OVERFLOW 堆盞溢出
GL_STACK_UNDERFLOW 堆盞不平衡
GL_OUT_OF_MEMORY 內存耗盡或內存洩漏
GL_TABLE_TOO_LARCE 過多使用TABLE而產生

 

OpenGL版本

OpenGL之查詢版本

調用glGetString()可以很方便提取顯卡的OpenGL信息,但需在wglMakeCurrent()之後調用,否則返回NULL.我使用此函式製作讀取OpenGL版本程式:下載

函式原型:

const GLubyte * glGetString(GLenum name);

name參數 簡介
GL_VENDOR 顯卡的製造商名稱
GL_RENDERER 顯卡型號和CPU的信息
GL_VERSION 顯卡驅動主輔版本號
GL_EXTENSIONS OpenGL擴展支持列表,以空格進行分割

 

OpenGL之全屏

OpenGL之全屏

從DOS,街機到手機遊戲都是以全屏出現,全屏顯示只需加入小量代碼

  1. 填充DEVMODE數據結構
  2. 設定屏幕寬度dmPelsWidth
  3. 設定屏幕高度dmPelsHeight
  4. 設定屏幕像素BIT數dmBitsPerPel
  5. 設定有效字dmFields
  6. 調用ChangeDisplaySettings(&devmode,CDS_FULLSCREEN)進入全屏模式,成功設定返回DISP_CHANGE_SUCCESSFUL
  7. 創建窗口CreateWindowEx()
  8. 擴展樣式設為全屏窗口WS_EX_APPWINDOW
  9. 窗口樣式樣式設為無邊框窗口WS_POPUP
  10. 窗口寬高需等於屏幕寬高
  11. 隱藏鼠標ShowCursor(false);

設定為全屏需在CreateWindow之前調用,下面是完整的代碼

bool Set_FullScreen_OpenGL(int screenWidth,int screenHeight,int screenBpp )

{

DEVMODE devmode;

memset(&devmode,0,sizeof(devmode));// 清零

devmode.dmSize = sizeof(DEVMODE);// 填充DEVMODE

devmode.dmPelsWidth  = screenWidth;// 屏幕寬度

devmode.dmPelsHeight = screenHeight;// 屏幕高度

devmode.dmBitsPerPel = screenBpp;// 屏幕像素BIT數

devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;// 設定有效字段

// 設為全屏

if(ChangeDisplaySettings(&devmode,CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL)

OpenGL_FullScreen = true;

else

OpenGL_FullScreen = false;

return OpenGL_FullScreen;

}

退出程序時恢復為窗口模式

bool Set_Window_OpenGL()

{ // 設為窗口模式

if(ChangeDisplaySettings(NULL,0) == DISP_CHANGE_SUCCESSFUL)

{

OpenGL_FullScreen = false;

ShowCursor(true);// 顯示鼠標

}

return OpenGL_FullScreen;

}

OpenGL之重設窗口大小

OpenGL之重設窗口大小

當OpenGL窗口的大小發生改變時,OpenGL窗口會變形需要重新設定以適應新的窗口大小.

  1. 收到WM_SIZE消息後獲取窗口大小,高度為HIWORD(lParam),寬度為LOWORD(lparam)
  2. 重置視區尺寸glViewport(0,0,width,height);
  3. 設定投影矩陣glMatrixMode(GL_PROJECTION);
  4. 載入單位矩陣glLoadIdentity();
  5. 計算窗口尺寸比例gluPerspective();
  6. 設定模型視圖矩陣glMatrixMode(GL_MODELVIEW);
  7. 載入單位矩陣glLoadIdentity();

給出重設窗口大小完整代碼

void Set_WindowSize_OpenGL(int width,int height)

{

if(height == 0)

height = 1;// 确保分母不为0

// 重置视区尺寸

::glViewport(0,0,width,height);

// 设定投影矩阵

::glMatrixMode(GL_PROJECTION);

// 载入单位矩阵

::glLoadIdentity();

// 计算窗口尺寸比例

gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,1.0f,1000.0f);

// 设定模型视图矩阵

::glMatrixMode(GL_MODELVIEW);

// 载入单位矩阵

::glLoadIdentity();

}

OpenGL之繪製環境

OpenGL之繪製環境

繪製環境Context用於記錄OpenGL的設置和命令,但繪製環境必需在像素格式設置完成後調用.下麵是簡介和源碼

繪製環境 簡介
HGLRC 繪製環境的句柄
HGLRC wglCreateContext(HDC hDC); 創建繪製環境,並返回繪製環境句柄, 在WM_CREATE消息下調用
BOOL wglDeleteContext(HDC hDC,HGLRC hRC); 刪除繪製環境, 在WM_CLOSE消息下調用
BOOL wglMakeCurrent(HDC hDC,HGLRC hRC); 設置當前繪製環境,若HGLRC設為NULL則取消當前設定的繪製環境

創建繪製環境

void Create_Context_OpenGL(HDC hDC)

{ //創建繪製環境

hGLRC = ::wglCreateContext(hDC);

// 設置為繪製環境

::wglMakeCurrent(hDC,hGLRC);

}

刪除繪製環境

void Delete_Context_OpenGL(HDC hDC)

{ // 取消設定的為繪製環境

::wglMakeCurrent(hDC,NULL);

// 刪除繪製環境

::wglDeleteContext(hGLRC);

}

OpenGL之像素格式

OpenGL之像素格式

在OpenGL工作之前需要設定當前環境設備(顯卡)像素格式,只需三步:

設定像素格式 簡介
PIXELFORMATDESCRIPTOR 填充像素格式
ChoosePixelFormat() 獲取顯卡支持的像素格式,返回索引
SetPixelFormat() 設置當前環境設備(顯卡)的像素格式

PIXELFORMATDESCRIPTOR需要填補的數值較多

字段 填充數值 像素格式簡介
iPixelType sizeof(PIXELFORMATDESCRIPTOR) 結構的大小
nVersion 1 版本號填1
dwFlags PFD_DRAW_TO_WINDOW 支持在窗口繪畫
PFD_DRAW_TO_BITMAP 支持在位圖繪畫
PFD_SUPPORT_GDI 緩存支持GUI繪畫
PFD_SUPPORT_OPENGL 緩存支持OPENGL繪畫
PFD_GENERIC_ACCELERATED
PFD_GENERIC_FORMAT
PFD_NEED_PALETTE
PFD_NEED_SYSTEM_PALETTE
PFD_DOUBLEBUFFER 支持雙緩存
PFD_STEREO
PFD_SWAP_LAYER_BUFFERS 支持交換Layer緩存
PFD_DEPTH_DONTCARE 支持Z緩存
PFD_DOUBLEBUFFER_DONTCARE
PFD_STEREO_DONTCARE
iPixelType PFD_TYPE_RGBA RGBA像素
PFD_TYPE_COLORINDEX 256色使用調色板索引
cColorBits 32、24、16、8 每像素所占字節數
cRedBits 0 紅色所占Bit數
cRedShift 0 紅色偏移Bit量
cGreenBits 0 綠色所占Bit數
cGreenShift 0 綠色偏移Bit量
cBlueBits 0 藍色所占Bit數
cBlueShift 0 藍色偏移Bit量
cAlphaBits 0 Alpha所占Bit數
cAlphaShift 0 Alpha偏移Bit量
cAccumBits 0 累加緩存Bit數
cAccumRedBits 0 紅色累加緩存Bit數
cAccumGreenBits 0 綠色累加緩存Bit數
cAccumBlueBits 0 藍色累加緩存Bit數
cAccumAlphaBits 0 Alpha累加緩存Bit數
cDepthBits 16 z-buffer(Z緩存)大小
cStencilBits 0 模板緩存Bit數
cAuxBuffers 0 輔助緩存Bit數
iLayerType 0 繪製平面
bReserved 0 保留字段
dwLayerMask 0 不在使用
dwVisibleMask 0 透明色掩碼索引
dwDamageMask 0 不在使用

 

最後給出完整代碼

void Setup_PixelFormat_OpenGL(HDC hDC)

{

PIXELFORMATDESCRIPTOR pfd;

int index;

pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);// 結構的大小

pfd.nVersion = 1;//版本號填1

pfd.dwFlags  = PFD_DRAW_TO_WINDOW |//  支持窗口

PFD_SUPPORT_OPENGL |// 支持OPENGL

PFD_DOUBLEBUFFER   ;// 支持雙緩存

pfd.iPixelType = PFD_TYPE_RGBA;// 像素數據類型RGBA

pfd.cColorBits = 16;// 16bit每像素所占字節數

pfd.cRedBits   = 0;// 紅色所占Bit數

pfd.cRedShift  = 0;// 紅色偏移Bit量

pfd.cGreenBits   = 0;// 綠色所占Bit數

pfd.cGreenShift  = 0;// 綠色偏移Bit量

pfd.cBlueBits   = 0;// 藍色所占Bit數

pfd.cBlueShift  = 0;// 藍色偏移Bit量

pfd.cAlphaBits  = 0;// Alpha所占Bit數

pfd.cAlphaShift  = 0;// Alpha偏移Bit量

pfd.cAccumBits      = 0;// 累加緩存Bit數

pfd.cAccumRedBits   = 0;// 紅色累加緩存Bit數

pfd.cAccumGreenBits = 0;// 綠色累加緩存Bit數

pfd.cAccumBlueBits  = 0;// 藍色累加緩存Bit數

pfd.cAccumAlphaBits = 0;// Alpha累加緩存Bit數

pfd.cDepthBits      = 16;// 16bit z-buffer(Z緩存)大小

pfd.cStencilBits    = 0;// 模板緩存Bit數

pfd.cAuxBuffers     = 0;// 輔助緩存Bit數

pfd.iLayerType      = 0;// 無繪製平面

pfd.bReserved       = 0;// 保留字段

pfd.dwLayerMask     = 0;// 不在使用

pfd.dwVisibleMask   = 0;// 透明色掩碼索引

pfd.dwDamageMask    = 0;// 不再使用了

// 獲取當前環境設備(顯卡)支持的像素格式,返回索引

index = ::ChoosePixelFormat(hDC,&pfd);

// 設置當前環境設備(顯卡)的像素格式

::SetPixelFormat(hDC,index,&pfd);

}

OpenGL簡介

OpenGL簡介

在DOS時代因為當時硬件品類小,程序直接控制硬件,但當硬件品類不斷增加,要對所有硬件進行支持變得不現實.所以便有OpenGL的出現,把硬件的支持交還給硬件開發商.

最初OpenGL由Silicon Graphics,Inc(SGI)開發的一個可以跨平臺使用的圖形編程接口, GL就是Graphics library的縮寫,最初用於UNIX工作站.

1992年OpenGL Architecture Review Board(ARB)委員會創建,由ATI,Compaq,Evans&Sutherland,Hewlett-packard,IBM,Intel,Intergraph,Nvidia,Microsoft,Silicon Graphics組成

1995年微軟在遊戲廠商進逼下不得已在WinNT中支持OpenGL

程式庫 簡介 下載點
OpenGL 標準OpenGL 下載1下載2
GLU (實用庫)OpenGL的補充

 

GLUT (OpenGL Utility Toolkit)應用工具包,與系統無關且便於移於移植.作為AUX庫的的替代品.

 

下載

 

下載並解壓後,更據文檔的擴展名拷貝到各自對應的VC目錄

文件 文檔類形 目錄
include files .h文檔 C:\Program Files\Microsoft Visual Studio\VC98\Include\GL
Library files .lib文檔 C:\Program Files\Microsoft Visual Studio\VC98\Lib
Executable files .dll文檔 C:\Program Files\Microsoft Visual Studio\VC98\Bin

 

程式頭文檔 程式庫文檔 程式二進制文檔 簡介
gl.h Opengl32.lib OPENGL32.DLL 標準OpenGL頭文件
glu.h Glu32.lib GLU32.DLL OpenGL實用工具庫
glaux.h GLAUX.LIB OpenGL輔助函數庫
glut.h glut.lib glut.dll OpenGL應用工具包
glut32.lib glut32.dll

 

DIY打印絕版書

DIY打印絕版書
DIY打印絕版書

對於愛書之人最疼心的你愛的書已絕版無緣一讀.但如果作者公開左它的(電子版)PDF文檔,則你還有一線希望,但電子版是無法替代紙質版(如果你真正讀書).下面將教你如何打印整本書

  1. 準備A4打印紙(Double A)
  2. 打印機最好支持正反面打印,否則要奇偶頁分開打印
  3. 介質選”普通紙”.
  4. 打印質量選”標準”.
  5. 頁面縮放方式選”適合可打印區域”
  6. 我只使用黑色墨盒,在打印前先加墨.
  7. 打印後用木板輕拍對齊所有紙張
  8. 放一張空白A4紙在書面,在左側畫四個鑽孔坐標,繪畫距離邊為10MM的直線,在上下兩邊距15MM繪畫兩條交線,在中間距離6MM畫兩條交線(如上圖).
  9. 鋼夾一個到兩個,用於夾緊所有A4紙
  10. 台鑽一台,2MM鑽嘴一支.
  11. 長針一支長約90MM
  12. 轉一個孔就紮一條線,四個孔分別紮.
  13. 再對四個孔穿插紮線.
  14. 封皮請勿使用毛巾

佳能打印機5200錯誤碼

佳能打印機5200錯誤碼
佳能打印機5200錯誤碼

Canon打印機5200錯誤碼是指墨頭的溫度過高,報警燈不停的閃,提示關閉打印機後重啟.通常是沒有墨水導致的,可能是之前墨盒鑽孔無轉穿,墨水無滲透如海綿,令墨水枯乾損壞墨頭, 打印頭噴嘴出現堵塞,大面積打印就出現5200錯誤碼,最後只能更換墨盒解決!!!

記注墨盒一定不能幹透會損壞墨盒!

URL編解碼器

URL編解碼器

URL連接只支持ASCII碼進行傳送,若要傳送非ASCII碼則需進行編碼.很多時因網絡問題,需要進行URL編碼與解碼.所以便製作URL編解碼器.代碼是我在2010寫的下載軟件移植過來.支持下列類型編解碼

類型 簡介
thunder 迅雷
flashget 快車
qqdl QQ旋風
Binary 所有代碼進行編碼
http 標準編碼
ALL 對\ : & =進行編碼

Win32版下載

Windows之設置EDITTEXT為只讀模式

Windows之設置EDITTEXT為只讀模式

近日需要把文本輸入框(EDITTEXT)設為不可編輯,也就是只讀模式.發現在Dialog下無法啟用,並且在WM_INITDIALOG設置STYLE也無作用.下面給出設置方法:

  1. HWND hWnd = CreateDialog();創建Dialog後
  2. hWnd hEdit= ::GetDlgItem(hWnd,IDDEIT);
  3. SendMessage(hEdit,EM_SETREADONLY,true,0);
  4. WPARAM設為TRUE則啟用只讀模式,設為FALSE則啟用編輯模式

Windows文件拖放

Windows文件拖放

近日要實現文件拖放,如果只實現接收則較為簡單,下麵把實現原理記下.

  1. 令主窗口可以接受文件拖放::DragAcceptFiles(hWnd,TRUE);
  2. 處理WM_DROPFILES消息wParam為HDROP文件拖放句柄
  3. 獲取拖放文件的個數::DragQueryFile(hdrop,-1,NULL,0);
  4. 獲取拖放文件的路徑DragQueryFile(hdrop,File_Index,File_Path,sizeof(File_Path));
  5. 處理拖放文件File_Path
  6. 重複第四第五步提取拖放文件的路徑
  7. 釋放拖放空間::DragFinish(hdrop);

 

int Query_DragAndDrop(HDROP  hdrop,PROC_DRAGANDDROP Proc_DragAndDrop)

{

int  File_Num;

TCHAR File_Path[2056];

int  File_Index;

File_Num = ::DragQueryFile(hdrop,-1,NULL,0);// 獲取文件個數

for(File_Index = 0; File_Index < File_Num; ++File_Index)

{ // 獲取拖放文件

::DragQueryFile(hdrop,File_Index,File_Path,sizeof(File_Path));

Proc_DragAndDrop(File_Path);// 處理文件

}

::DragFinish(hdrop);// 釋放空間

return 1;

}

HASH校驗器

HASH校驗器

HASH(哈希碼)用於生成文件的指紋,如果兩個文件的哈希碼一致,則代表文件是相同的.令外也用於生成密碼指紋.此軟件用於生成文件的哈希碼,支持SHA1,SHA256,SHA384,SHA512,MD5,MD4,MD2,CRC32,CRC64.大部分的哈希校驗碼是我在2009年所寫.所以此軟件製作較順利.加入文件拖放和拷貝剪貼板,全部使用純C代碼所寫速度快,體積小.

Win32版下載:HASH

 

Windows設置按扭圖標

Windows設置按扭圖標

按扭BUTTON可以設定圖標,但有幾點需要需注意:

  1. 準備一張ICO圖標
  2. 在你VC工程目標下創建ICON文件夾,把ICO圖標複製於此.
  3. 把ICO圖標編譯進程序,在RC文件加上IDR_LOGO ICON        “ICO\\logo.ico”
  4. 按扭BUTTON樣式style需加上BS_ICON
  5. 獲取應用實例句柄HMODULE hModule = ::GetModuleHandle(0);
  6. 獲取ICON圖標句柄HICON hIcon = ::LoadIcon(hModule,_T(”IDR_LOGO”));
  7. 設置按扭圖標::SendMessage(hWnd, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon);

SEO外鏈蜘蛛

SEO外鏈蜘蛛

外鏈即指向您的網站的連結,它確定你從搜索引擎獲得多小流量.但要獲得大量的外鏈並不容易,而對於個人Blog(博客)應把精力集中于文章的質量而不是把精力用於增加外鏈.但個人博客主可以通過域名查詢網站增加外鏈,通過查詢域名流下查詢記錄,並產生一條指向你域名鏈接,而域名查詢網站首頁也會產生最新查詢鏈接,如果搜索引擎剛好來訪,你的外鏈就會增加.但天天查詢網站域名更會耗費大量精力,不過你可以製作全自動化域名查詢蜘蛛.下麵給出軟件的製作思路.

  1. 把域名查詢網站保存於文本數據庫
  2. 在圖形界面放置ComboBox下拉文本輸入框,用於輸入域名.
  3. 域名前面不加”HTTP://”後面不添加”/”
  4. 獲取默認瀏覽器路徑
  5. 創建新的線程_beginthread()
  6. 讀取一條記錄fgets()
  7. 啟動瀏覽器並打開網頁
  8. 等待30秒
  9. 關閉瀏覽器
  10. 重複第6至9步

Windows對話框圖標

Windows對話框圖標

對話框圖標在模板中不能設置,需要

1.       準備一張512×512圖片

2.       使用IconWorkshop轉換成ICO圖標

3.       分辯率勾選48×48,32×32,24×24,16×16,位數32Bit(RGBA),16Bit,8Bit(256色)即可.

4.       在你VC工程目標下創建ICON文件夾,把ICO圖標複製於此.

5.       在RSOURCE.RC文件加上,要注意第一條記錄也是應用圖標

IDR_MAINFRAME     ICON        “ICO\\logo.ico”

6.       在對話框WM_INITDIALOG設置

HICON hIcon = LoadIcon(main_instance,_T(“IDR_MAINFRAME”));//載入圖標

::SendMessage(hWnd, WM_SETICON, true, (LPARAM)hIcon);//設置大圖標

::SendMessage(hWnd, WM_SETICON, false, (LPARAM)hIcon);//設置小圖標

Windows輕量級文本數據庫

Windows輕量級文本數據庫

如果程式需要讀取大量數據可使用SQLite3關係數據庫,但如果只是讀寫小量文本數據,則使用文本一行行地保存文本更方便,擴展名最好改為.db下麵給設計思路.

讀取文本數據

  1. 以文本只讀方式打開文件_wfopen(),使用寬字符版路徑帶有中文也可打開,
  2. 讀取一行文本fgets()並進行處理
  3. 循環第二步,如返回NULL則讀取完畢.
  4. 關閉文件句柄fclose()

寫入文本數據

  1. 以文本寫入方式打開文件_wfopen(),模式使用w代表文件長度清零,否則使用a在文件尾寫入數據
  2. 寫入一行文本fputs()
  3. 寫入換行fputs(“\n”,stream);
  4. 循環第二第三步,如返回NULL則讀取完畢.
  5. 關閉文件句柄fclose()

 

讀取文本的C代碼

bool Read_DB()

{

FILE * stream=NULL; // 文件流句柄

char text[2056];

stream = _wfopen(L”text.dat”,L”r+t”);// 以文本方式打開文件

if(stream == NULL)

return false;// 無法打開文件

// 讀取一行

while(fgets(text,sizeof(text),stream) != NULL)

{  //去除字符串中最後面 “換行符”  “空格”

TrimRight(text);

// 處理文本

// ……….

}

fclose(stream); // 關閉文件句柄

return true;

}

追加一行文本的C代碼

bool Save_DB(char * text)

{

FILE * stream=NULL; // 文件流句柄

// 以文本方式打開文件

stream = _wfopen(L”text.dat”,L”a+t”);

if(stream == NULL)

return false;// 無法打開文件

::fputs(text,stream);// 寫入數據

::fputs(“\n”,stream);// 換行

fclose(stream);// 關閉文件句柄

return true;

}

Windows對話框在屏幕居中顯示

Windows對話框在屏幕居中顯示

對話框(DIALOG)模板可以設定顯示位置,但因屏幕大小不一,總想讓對話框在屏幕居中顯示.

  1. 獲取窗口的矩形區域GetWindowRect(),計算窗口的寬和高
  2. 獲取屏幕寬和高GetSystemMetrics()
  3. 重新設置窗口位置

下面給出C源代碼便於移值到其它工程

bool CentreWindow(HWND hWnd)

{

RECT rect;

int width,height;

int x,y;

if(IsWindow(hWnd) == false)

return false;

::GetWindowRect(hWnd,&rect); // 獲取窗口的

width  = rect.right – rect.left; // 計算窗口寬度

height = rect.bottom – rect.top; // 計算窗口高度

x = GetSystemMetrics(SM_CXSCREEN)/2-width/2;// 計算窗口居中X

y = GetSystemMetrics(SM_CYSCREEN)/2-height/2;// 計算窗口居中Y

SetWindowPos(hWnd,HWND_TOP,x,y,0,0,SWP_NOSIZE);  // 移動窗口

return true;

}

Windows啟動瀏覽器並打開網頁

Windows啟動瀏覽器並打開網頁

啟動瀏覽器最簡單的方法是使用ShellExecute(),但無返回進程句炳,要關閉瀏覽器只能查找窗口.更好的方法是CreateProcess()啟動瀏覽器新進程並打帶網頁,並返回進程句柄,方便關閉瀏覽器.

BOOL CreateProcess(LPCTSTR lpApplicationName,//執行模塊名填空NULL即可

LPTSTR  lpCommandLine,//命令行填”瀏覽器Path+空格+網頁URL”

LPSECURITY_ATTRIBUTES lpProcessAttributes,//進程屬性  LPSECURITY_ATTRIBUTES lpThreadAttributes,//線程屬性

BOOL bInheritHandles,  //繼承進程句柄false

DWORD dwCreationFlags, //創建標誌填CREATE_NEW_CONSOLE

LPVOID lpEnvironment, //進程環境

LPCTSTR lpCurrentDirectory,// 進程的工作路徑填NULL

LPSTARTUPINFO lpStartupInfo, //STARTUPINFO結構

LPPROCESS_INFORMATION lpProcessInformation//PROCESS_INFORMATION結構

);

  1. 要注意的是命令行lpCommandLine:瀏覽器Path+空格+網頁URL
  2. 命令行最好使用寬字符Unicode否則路徑有漢字或非ASCII碼則無法運行
  3. 返回不為false則調用成功
  4. 保存lpProcessInformation返回瀏覽器新進柄

 

下麵給打開網頁源代碼,便於

bool Open_Url(char * url,char * browser_Path)

{

int result = 0;

char CommandA[2056];

WCHAR CommandW[2056];

int length;

SECURITY_ATTRIBUTES Security_Attributes_Process;// 進程屬性

SECURITY_ATTRIBUTES Security_Attributes_Thread;// 線程屬性

STARTUPINFO        Startup_Info;// 啟動信息

PROCESS_INFORMATION Process_Information;//  進程信息

strcpy(CommandA,browser_Path);

strcat(CommandA,” “);

strcat(CommandA,url);

// 轉換UNICODE

length = MultiByteToWideChar(CP_ACP, NULL, CommandA, strlen(CommandA), CommandW, sizeof(CommandW));

CommandW[length] = NULL;

// 進程屬性

Security_Attributes_Process.nLength              = sizeof(SECURITY_ATTRIBUTES);

Security_Attributes_Process.lpSecurityDescriptor = NULL;

Security_Attributes_Process.bInheritHandle       = true;

// 線程屬性

Security_Attributes_Thread.nLength               = sizeof(SECURITY_ATTRIBUTES);

Security_Attributes_Thread.lpSecurityDescriptor  = NULL;

Security_Attributes_Thread.bInheritHandle        = true;

// 啟動信息

ZeroMemory( &Startup_Info, sizeof(STARTUPINFO) );

Startup_Info.cb = sizeof(STARTUPINFO);

ZeroMemory( &Process_Information, sizeof(PROCESS_INFORMATION) );

// 創建進程

result = CreateProcessW(NULL,

CommandW,

&Security_Attributes_Process,

&Security_Attributes_Thread,

FALSE,

CREATE_NEW_CONSOLE,

NULL,

NULL,

&Startup_Info,

&Process_Information);

// 獲取進程句柄

if(result != 0)

return true;

else

return false;

}

Windows 默認瀏覽器路徑

Windows 默認瀏覽器路徑

Windows默認瀏覽器的路徑在註冊表(REGEDIT.EXE)的HKEY_CLASSES_ROOT\http\shell\open\command\,提取數據需要使用下面三個註冊表操作函數.並給出設計思路源碼

  1. 打開註冊表句柄RegOpenKeyEx()
  2. 提取數據RegQueryValueEx()
  3. 關閉註冊表句柄RegCloseKey()
  4. 提取在雙引號中的瀏覽器路徑

 

char   Browser_Path[2056];// 瀏覽器路徑

// ————————————————————–

// 獲取系統默認瀏覽器路徑

// ————————————————————–

char * Get_WebBrowserPath_SEO(void)

{

long ret;

HKEY hKey;// 註冊表句柄

WCHAR path[2056];//

char  data[2056];

DWORD length;

// 打開註冊表

// HKEY_CLASSES_ROOT\http\shell\open\command

ret = RegOpenKeyExW(HKEY_CLASSES_ROOT,L”http\\shell\\open\\command”,0,KEY_ALL_ACCESS,&hKey);

if(ret != ERROR_SUCCESS)

return NULL;

// 獲取REG_SZ

DWORD type = REG_SZ;//類型

length = sizeof(path);//

ret = RegQueryValueExW(hKey,NULL,NULL,&type,(PBYTE)path,&length);

if(ret != ERROR_SUCCESS)

return NULL;

// 關閉註冊表句柄

RegCloseKey(hKey);

// 轉換為UTF-8

length  = WideCharToMultiByte(CP_UTF8, NULL, path, wcslen(path), data, sizeof(data), NULL, NULL);

data[length] = NULL;

// 清零

memset(Browser_Path,0,sizeof(Browser_Path));

// 提取路徑

for(int i = 0,index = 0;i<(int)length; ++i)

{

if(data[i] == ‘”‘ && index != 0)

break;// 讀取完畢跳出

if(data[i] != ‘”‘)

{

Browser_Path[index] = data[i];

++index;

}

}

return Browser_Path;// 返回路徑

}

Windows之ANSI和UNICODE與UTF8相互轉換

Windows之ANSI和UNICODE與UTF8相互轉換

因為Windows控件全部使用UNICODE編碼字符(或ANSI),而我文人卻喜歡使用UTF8編碼字符,所以需要在UTF8與UNICODE之間相互轉換,而我在2010年12月7日寫的一個字符轉換函式庫剛好派上用場.所有轉換MultiByteToWideChar()與WideCharToMultiByte()兩個函式完成,轉換後以NULL字符結尾.特將其簡化並記錄如下,便於以後移植使用.

多字節字符(ANSI/UTF-8)轉換寬字符(UNICODE)

int MultiByteToWideChar(

UINT CodePage,         // 代碼頁

DWORD dwFlags,         // 字符標誌, 默認設為0

LPCSTR lpMultiByteStr, //多字節字符

int cchMultiByte,      //多字節字符個數

LPWSTR lpWideCharStr,  // 寬字符輸出緩存

int cchWideChar        //寬字符緩存大小

);

寬字符(UNICODE)轉換多字節字符(ANSI/UTF-8)

int WideCharToMultiByte(

UINT CodePage,         //代碼頁

DWORD dwFlags,         // 字符標誌, 默認設為0

LPCWSTR lpWideCharStr, // 寬字符

int cchWideChar,       //寬字符長度

LPSTR lpMultiByteStr,  //多字節字符輸出緩存

int cchMultiByte,      //多字節字符緩存輸出大小

LPCSTR lpDefaultChar,  // 自定義寬字符,默認設為NULL

LPBOOL lpUsedDefaultChar   // 是否使用寬字符

);

//——————————————————————

// Ansi轉換Unicode

// Unicode:Unicode碼文本輸出

// Unicode_Size:Unicode碼輸出緩衝區WORD的長度

// Ansi:ANSI碼文本輸入,以NULL字符接尾

// Encode:ANSI文本字符編碼

// 返回值:Unicode 字符個數!(Unicode一個字符需兩個字節)

//——————————————————————

int Ansi_To_Unicode(WCHAR * Unicode,int Unicode_Size,char * Ansi,int Encode)

{

int Unicode_Length;// Unicode 字符個數!非字節數!

if(Unicode == NULL || Ansi == NULL)

return 0;

// Ansi轉換Unicode

Unicode_Length = MultiByteToWideChar(Encode, NULL, Ansi,strlen(Ansi), Unicode, Unicode_Size);// 轉換

Unicode[Unicode_Length] = 0;

return Unicode_Length;

}

 

//——————————————————————

//Unicode轉換Ansi

//Ansi:ANSI碼文本輸出

//Unicode_Size:Unicode碼輸出緩衝區WORD的長度

//Unicode:Unicode碼文本輸入

//返回值:Ansi所占字節數!

//——————————————————————

int Unicode_To_Ansi(char* Ansi,int Ansi_Size,PWORD Unicode)

{

int Ansi_Length;

if(Ansi == NULL || Unicode == 0)

return 0;

//Unicode轉換Ansi

Ansi_Length = WideCharToMultiByte(CP_ACP, NULL, Unicode, wcslen(Unicode), Ansi, Ansi_Size, NULL, NULL);

Ansi[Ansi_Length] = NULL;

return Ansi_Length;

}

 

//——————————————————————

// UTF-8 轉 Unicode

//Unicode:Unicode碼文本輸出

//Unicode_Size:Unicode碼輸出緩衝區WORD的長度

//Utf8:Utf-8文本輸入

//返回值:UTF-8字符個數!

//——————————————————————

int Utf8_To_Unicode(WCHAR * Unicode,int Unicode_SIze,char * Utf8)

{

int Unicode_Length;

if(Utf8 == NULL || Unicode == NULL )

return 0;

// UTF-8 轉 Unicode

Unicode_Length = MultiByteToWideChar(CP_UTF8, NULL, Utf8, strlen(Utf8), Unicode, Unicode_SIze);

Unicode[Unicode_Length] = NULL;

return Unicode_Length;

}

 

//——————————————————————

// UTF-8 轉 Unicode

//Utf8:UTF-8字符輸出

//Utf8_Size:UTF-8碼輸出緩衝區BYTE的長度

//Unicode:Unicode寬字符輸入

//返回值:Unicode所占字節數!

//——————————————————————

int Unicode_To_Utf8(char * Utf8,int Utf8_Size,WCHAR * Unicode)

{

int Utf8_Length;

if(Utf8 == NULL || Unicode == NULL)

return 0;

// UTF-8 轉 Unicode

Utf8_Length = WideCharToMultiByte(CP_UTF8, NULL, Unicode, wcslen(Unicode), Utf8, Utf8_Size, NULL, NULL);

Utf8[Utf8_Length] = NULL;

return Utf8_Length;

}

 

//—————————————————————————

//Ansi 轉 Utf8

//Utf8:UTF-8字符輸出

//Utf8_Size:UTF-8碼輸出緩衝區BYTE的長度

//Ansi:ANSI文本輸入

//Encode:ANSI文本字符編碼

//返回值:Utf8字節長度

//—————————————————————————

int Ansi_To_Utf8(char * Utf8,int Utf8_Size,char * Ansi,int Encode)

{

int Utf8_Length = NULL;

PWORD Unicode;

int   Unicode_Size;

int   Unicode_Length;

Unicode = (PWORD)Utf8;

Unicode_Size = Utf8_Size/2;

// Ansi 轉 Unicode

//Unicode_Length = Ansi_To_Unicode(Unicode,Unicode_Size,Ansi,Encode);

Unicode_Length = MultiByteToWideChar(Encode, NULL, Ansi,strlen(Ansi), Unicode, Unicode_Size);// 轉換

Unicode[Unicode_Length] = 0;

// Unicode 轉 Utf8

//Utf8_Length = ::Unicode_To_Utf8(Utf8,Utf8_Size,Unicode);

Utf8_Length = WideCharToMultiByte(CP_UTF8, NULL, Unicode, wcslen(Unicode), Utf8, Utf8_Size, NULL, NULL);

Utf8[Utf8_Length] = NULL;

return Utf8_Length;

}

//—————————————————————————

// Utf8 轉換 Ansi

// Ansi: ANSI文本輸出

// Ansi_Size:ANSI碼輸出緩衝區BYTE的長度

// Utf8: UTF-8字符輸入

// 返回值:Ansi字節長度

//—————————————————————————

int Utf8_To_Ansi(char * Ansi,int Ansi_Size,char * Utf8)

{

int Ansi_Length = NULL;

PWORD Unicode;

int   Unicode_Size;

int   Unicode_Length;

Unicode = (PWORD)Ansi;

Unicode_Size = Ansi_Size/2;

// Utf8 轉 Unicode

//Unicode_Length = Utf8_To_Unicode(Unicode,Unicode_Size,Utf8);

Unicode_Length = MultiByteToWideChar(CP_UTF8, NULL, Utf8, strlen(Utf8), Unicode, Unicode_Size);

Unicode[Unicode_Length] = NULL;

// Unicode 轉 Ansi

//Ansi_Length = ::Unicode_To_Ansi(Ansi,Ansi_Size,Unicode);

Ansi_Length = WideCharToMultiByte(CP_ACP, NULL, Unicode, wcslen(Unicode), Ansi, Ansi_Size, NULL, NULL);

Ansi[Ansi_Length] = NULL;

return Ansi_Length;

}

 

編碼類型 數值 說明
CP_ACP 0 默認ANSI代碼頁
CP_OEMCP 1 默認OEM代碼頁
CP_MACCP 2 默認MAC代碼頁
CP_THREAD_ACP 3 本線程ANSI代碼頁
CP_SYMBOL 42 SYMBOL轉換
CP_UTF7 65000 UTF-7轉換
CP_UTF8 65001 UTF-8轉換
CP_ANSI 1252 通用ANSI 代碼頁
ISO_8859_1 28591 西歐語言
ARABIC 1256 阿拉伯語
GENERAL 1252 通用
DUTCH 1252 荷蘭,德國
CZECH 1250 捷克斯洛伐克
HUNGARIAN 1250 匈牙利
ICELANDIC 1252 冰島
NORDIC 1252 北歐日耳曼民族的
NORWDAN 1252
POLISH 1250 波蘭
CYRILLIC 1251 西裏爾字母
SPANISH 1252 西班牙
SWEDFIN 1252
TURKISH 1254 土耳其語, 突厥語族
GREEK 1253 希臘
HEBREW 1255 希伯來語
JAPANESE 932 日本
KOREAN 949 朝鮮
BIG5 950 正體中文
GB2312 936 簡體中文
GBK 936 簡體中文
GB18030 54936 簡體中文
SLOVENIAN 1250 未開發

 

 

 

Windows之ANSI與UNICODE

Windows之ANSI與UNICODE

近日寫SEO應用程式,因現在目錄路徑可能會有中文字符或非ASCII字符,所以使用寬字符版的程式,但出現_T()與_TEXT()宏指令無定義:

error C2065: ‘_T’ : undeclared identifier

又不想直接使用L()宏指令定義寬自字符,百思不得其解.原來_T()與_TEXT()宏指令的定義在TCHAR.H文件,添加#include <TCHAR.h>即可解決.

VC使用#define _MBCS定義則使用ANSI字符,而定義#define _UNICODE 則使用UNICODE寬字符.如過想全局定義_MBCS或_UNICOD可在Settings設置如上圖.

Project Settings/C/C++/Category/General/Preprocessor definitions/ WIN32,_DEBUG,_WINDOWS,_UNICODE

鋼琴自學-加線音符和八度記號

鋼琴自學-加線音符和八度記號

加線音符(ledger line notes)是指在五線譜上或下加上短線的音符.

高八度記號用”8va”標記外加上一條標記範圍的直線,在高音譜號上表示彈奏音符的高八度,

低八度記號用”8vb”標記外加上一條標記範圍的直線,在低音譜號上表示彈奏音符的低八度.

十六度記號用”16va”標記外加上一條標記範圍的直線,在高音譜號上表示彈奏音符的高兩八度音,在低音譜號上表示彈奏音符的低兩八度音.

 

Overture是專業五線譜軟件,特記下”八度記號”加入步驟.

  1. 選擇工具
  2. 選擇音符
  3. 音符/組/八度記號
  4. 按確定

鋼琴自學-拍號

鋼琴自學-拍號

拍號由上下兩數組成,在五線譜調號後面,上面的數字表示一小節含幾拍,下面的數字表示音值比率

 

上面的數字表示一小節含幾拍

4/4表示一個小節後四拍,該小節所有音符加來是四拍, 4/4因為用得多所以使用大寫C表示.

3/4表示一個小節後三拍,該小節所有音符加來是三拍

 

下面的數字表示音符的音值比率

4是最常見音值比率,意即四分音符為一單位拍,按照這個比值算如下表

音符
八分音符 1/2拍
四分音符 一拍
二分音符 二拍
符點二分音符 三拍
全音符 四拍

 

8意即八分音符為一單位拍,如下表

音符
八分音符 一拍
四分音符 二拍
二分音符 四拍
符點二分音符 六拍
全音符 八拍

 

示例如上圖

3/4表示每一小節3拍,四分音符為一單位拍,第一小節3個C每個一拍,第二小節二分音符C兩拍,加上四分音符C一拍,一共三拍.

鋼琴自學-調號

鋼琴自學-調號

調號是指寫在指寫在五線譜譜號後面的變音記號,包括升號和降號.

調號在五線譜的高音譜號和低音譜號的後面,調號標明該作品所使用的調.調號是作品的一部分,它將傳遞給你作品的重要信息,通過調號你可以瞭解整段作品的的遊戲規則,直到在調號變化之前.

如果調號的標記是FL,那麼所有的F都有升半音,直到F”的出現

如果調號的標記是Bb和E:,那麼所有的B和E都要降半音,直到B”和E”的出現

如果在五線譜的開端無看到升號或降號,那並不是說作品就沒有調,而是表明作品是C調沒有升音或降音.

平板電腦-安裝Windows10

平板電腦-安裝Windows10

我果台雜牌平板更換電池後獲得新的生命.平板本為雙系統Win8+Android.因為硬盤只有64GB再分給兩系統使用可利用率實在太低.故想重新分區安裝Win10.在微軟下載Windows10 ISO官方鏡像.版本號為1709居然無法安裝第三應用,只可以安裝在應用商店下載的應用或者購買專業版…暈!也就想激活Win10都無可能.之後安裝早期的Win10-ISO鏡像才成攻激活.

鋼琴自學-升號和降號與還原記號

鋼琴自學-升號和降號
鋼琴自學-還原記號

黑鍵是根據相鄰白鍵所發音來命名,在白鍵的音名上加”升號”或”降號”

 

升號(sharp)

五線譜音符左側”#”稱為”升號”,它表示把音符的音級升高一個變化音級

不論彈奏高音譜表(右手)或低音譜表(左手),音符前的升號都對應該音符所示白鍵右側的黑鍵

沒有B#因為B和C之間沒有黑鍵

沒有E#因為E和F之間沒有黑鍵

 

降號(flat)

五線譜音符左側”b”稱為”降號”,它表示把音符的音級降低一個變化音級

不論彈奏高音譜表(右手)或低音譜表(左手),音符前的降號都對應該音符所示白鍵左側的黑鍵

沒有Cb因為B和C之間沒有黑鍵

沒有Fb因為E和F之間沒有黑鍵

 

還原記號(natural sign)

還原記號(“),即取消升號或降號,從升音或降音之後的黑鍵回到初始的白鍵,

在音符前標記的升號與降號,對本小節同音高的音起作用,直到出現還原記號,而到下一個小節又恢復原先的調號

 

 

 

Word輸入音符

Word輸入音符

在撰寫與音樂相關的文章時會大量用到五線譜音符,但系統自帶的字體一般都不帶五線譜音符.幸好有專用的五線譜字體

  1. 下載akvo.ttf五線譜字體
  2. 解壓後把ttf字體文件存放到系統的Fonts字體文件夾,以WinXP為例路徑為”C:\WINDOWS\Fonts”
  3. 打開WORD
  4. 字體選擇akvo字體
  5. 輸入鍵對應的音符、休止符、譜號查下表
  6. 按Shift可以改變音符的符幹方向
音符、休止符、譜號對應的輸入鍵

鋼琴自學-音符時值

鋼琴自學-音符時值
鋼琴自學-音符時值

全音符(whole note)

全音符只有空心符頭沒有符幹(符頭延伸的直線).一個全音符時值為四拍,即按下琴鍵並保持四拍,上圖彈E並保持四拍.

 

二分音符(half note)

全音符由空心符頭和符幹組成.一個二分音符時值為兩拍,即按下琴鍵並保持兩拍,上圖彈兩個G每個兩拍

 

四分音符(quarter note)

四分音符由實心符頭和符幹組成.一個四分音符時值為一拍,即按下琴鍵並保持一拍,上圖彈四個F每個保持一拍

 

八分音符(eighth note)

八分音符由實心符頭于符幹和符尾組成,符尾為符幹旁側伸出的一條彎曲,一個八分音符時值為1/2,當兩個或以上的八分音符挨在一起時在它們上面加一條橫線進行標記, 上圖彈七個E每個保持1/2

 

符點二分音符(dotted half note)

音符後有一個點表示增加該音符時值1/2.符點二分音符時值為三拍,二分音符為兩拍加符點表示加1/2拍既三拍.

 

休止符(tacet)

休止符用於表示停頓的時間長短

 

全休止符(whole tacet)

全休止符表示停頓四拍

 

二分休止符(half tacet)

二分休止符表示停頓兩拍

 

四分休止符(quarter tacet)

四分休止符表示停頓一拍

 

八分休止符(eighth tacet)

八分休止符表示停頓1/2

 

音符

時值

符標

全音符

四拍

A

二分音符

兩拍

B

四分音符

一拍

C

八分音符

1/2

D

符點二分音符

三拍

H

 

 

休止符

停頓時長

符標

全休止符

四拍

U

二分休止符

兩拍

V

四分休止符

一拍

W

八分休止符

1/2

X

 

鋼琴自學-音符與琴鍵對號入座

鋼琴自學-音符與琴鍵對號入座

鋼琴自學-音符與琴鍵對號入座

右手部分

”高音譜號”的五條線對應五個音符,分別是E、G、B、D和F

”高音譜號”的四個間對應四個音符,分別是F、A、C和E.你可以記為FACE

 

右手部分

”低音譜號”的五條線對應五個音符,分別是G、B、D、F和A

”低音譜號”的四個間對應四個音符,分別是A、C、E和G

Word輸入頓號

Word輸入頓號

漢字本來是無標點符號是進代先引入.所以頓號是漢字標點符號,要在Word或其它文本中輸入頓號”、”

  1. 按Ctrl+Shift切換為中文輸入法
  2. 按Ctrl+Period(句號鍵)切換為中文標點
  3. 按“|”鍵則可輸入頓號”、”

 

總結左下輸入法快捷鍵如下

  1. 按Ctrl+Shift切換輸入法
  2. 按Shift+Space(空格鍵)全角與半角切換
  3. 按Ctrl+Space(空格鍵)輸入法與非輸入法之間切換
  4. 按Ctrl+Period(句號鍵)中英文標點切換

 

 

鋼琴自學-五線譜的構成

鋼琴自學-五線譜的構成

鋼琴五線譜由兩組五線譜組成,把兩組五線譜用花括號連接起來構成大譜表.上方一組用右手彈奏,下方一組用左手彈奏.每組五線譜都包括了五條平行橫”線”和四個”間”.線和間用於記錄鋼琴音符.

 

高音譜號(treble clef)~

上方五線譜最左邊的記號”~”是”高音譜號”,用於指示它後面的音符用右手彈奏.它另有“G譜號”之稱.”高音譜號”的中段要畫在五線譜的第二線開始捲曲標記,這條線用於記錄音符G.

 

低音譜號(bass clef)`

下方五線譜最左邊的記號”`”是”低音譜號”,用於指示它後面的音符用左手彈奏.它另有“F譜號”之稱. ”低音譜號”的兩個圓點要畫在五線譜的第二線的上下兩個”間”,這條線用於記錄音符F.

 

小節(measure)和小節線(bar line)

“小節”是指小節線之間的部分,小節線把各小節隔開,不同節可以採用不同的拍子

平板電腦-無鍵盤進入Bios

平板電腦-無鍵盤進入Bios

要進入平板的Bios只需在開機時按ESC鍵即可,但如過你身邊無平板鍵盤,也可以通過軟鍵盤進入Bios

  1. 開機點擊屏幕中下側邊,彈出軟鍵盤.要點觸多幾下.
  2. ESC在F1下面,即第二行第一個
  3. 默認只有兩秒,一定要快
  4. 進入Bios後可設置提示超時,Boot/Setup Prompt Timeout.修該為5至8秒放便按軟鍵盤
  5. 保存設置並重啟Save & Exit/Save Changes and Reset

 

平板電腦-更換鋰電池

平板電腦-更換鋰電池

本人在多年買的一台雜牌平板電腦,因電池衰老已無法開機,其實新機也是一到兩個小時,一直閒置在家.近日在網上買得兼容電池,原裝的鋰電池是3.8V(伏)8000mAh(毫安),但兼容電池是3.7V(伏)12000mAh(毫安).由兩塊6000mah鋰電池並聯而成.紅白黑三線鋰電池,紅線為電池正極,黑線為電池負極,白線為溫控檢測端,當鋰電池放電時產生化學反應鋰電池溫度會升高,溫控熱敏電阻輸出信號給電池保護電路,讓電池停止放電起保護作用.但安裝去後只能充到95%就充不入.不過台平板可以重新運作OK.

鋼琴自學-坐姿與手形

鋼琴自學-坐姿與手形

鋼琴彈奏時正確的座姿與手形可使你身題保持放鬆,避免勞累與酸疼

距離:

移動琴凳尋找身體與鋼琴的最佳距離

 

坐姿:

量好的坐姿是兩肩自然下垂並略略向後拉伸,面向鍵盤正中而坐,雙腳平穩的接觸地面,與踏板對齊偏於踩踏.膝蓋在鍵盤下放,手肘與鍵盤基盤平行.

 

駝背:

琴凳距離鍵盤過遠

 

聳肩:

琴凳過矮造成琴鍵過高引起,並會引起頸背肌肉酸痛

 

手形

正確的手形是把雙手放在琴鍵上,收心供起,手指放鬆用指肚觸鍵,如過手指塌掉會影響彈奏速度.

鋼琴自學-拇指穿過與三指越過

鋼琴自學-拇指穿過與三指越過

按下表練習三指越過,把右手大拇指放在中央C上,HC表示“高八度C”,注意指法特別是拇指穿過三指.

標記 1 2 3 1 2 3 4 5
音符 C D E F G A B HC
唱名 Do Re Mi Fa Sol La Si Do

把右手小指放在高八度C下行至中央C

標記 5 4 3 2 1 3 2 1
音符 HC B A G F E D C
唱名 Do Si La Sol Fa Mi Re Do

按下表練習拇指穿過,右手大拇指放在中央C張開手掌用小指觸及高八度C,左右彈奏這兩個音感受跨八個音時手掌的伸展,HC表示“高八度C”

標記 1 5 1 5 1 5 1 5
音符 C HC C HC C HC C HC
唱名 Do Do Do Do Do Do Do Do

 

按下表練習左手三指越過,把左手大拇指放在中央C上,LC表示“底八度C”,注意指法特別是大拇指穿越三指.

標記 1 2 3 1 2 3 4 5
音符 C B A G F E D LC
唱名 Do Si La Sol Fa Mi Re Do

把左手小指放在底八度C上行至中央C

標記 5 4 3 4 5 3 4 5
音符 LC D E F G A B C
唱名 Do Re Mi Fa Sol La Si Do
唱名 Do Si La Sol Fa Mi Re Do

練習左手拇指穿過,左手放在中央C張開手掌用小指觸及低八度C,左右彈奏這兩個音感受跨八個音時手掌的伸展,LC表示“低八度C”

標記 1 5 1 5 1 5 1 5
音符 C LC C LC C LC C LC
唱名 Do Do Do Do Do Do Do Do

 

標記請閱讀手指位置

鋼琴自學-手指位置

鋼琴自學-手指位置右手
鋼琴自學-手指位置左手

琴建手指位置的擺放如下表,彈奏時說出各指對應的唱名

 

右手

音符 C D E F G
標記 1 2 3 4 5
手指 大拇指 食指 中指 無名指 小指
唱名 Do Re Mi Fa Sol

 

左手

音符 C B A G F
標記 1 2 3 4 5
手指 大拇指 食指 中指 無名指 小指
唱名 Do Si La Sol Fa

 

鋼琴自學-中央C

鋼琴自學-中央C

鋼琴自學-中央C

  1. 鋼琴鍵盤上較中心位置的C鍵稱為中央C 第40號鍵
  2. 中央C下行(往左)一個八度稱為“低八度C”
  3. 中央C上行(往右)一個八度稱為“高八度C”
  4. 右手大拇指按中央C感受下

 

右手練習

  1. 右手大拇指按中央C五次,並說出Do
  2. 右手大拇指按G五次,並說出Sol
  3. 先彈C在彈G交錯反復彈奏
  4. 在所有的八度上的C與G都要嘗試彈奏

 

左手練習

  1. 左手大拇指按中央C五次,並說出Do
  2. 左手小指按F五次,並說出Fa
  3. 先彈C在彈F交錯反復彈奏
  4. 在所有的八度上的C與F都要嘗試彈奏

 

踩下延音踏瓣梯下音效的變化

鋼琴自學-鍵盤分組

鋼琴自學-鍵盤分組

鍵盤分組

當代鋼琴共有88鍵,白鍵52黑鍵36

 

兩個黑鍵組合

  1. 鍵盤有兩個黑鍵是挨在一起和其它黑鍵分開
  2. 從鍵盤上的最左側的開始向右逐次同時按下兩個黑鍵組合,籮籮感覺
  3. 兩個黑鍵連接的有三個白鍵C,D和
  4. C位於兩個黑鍵左側,從左向右依次按下所有C鍵
  5. D位於兩個黑鍵中間,從左向右依次按下所有D鍵
  6. E位於兩個黑鍵右側,從左向右依次按下所有E鍵

 

三個黑鍵組合

  1. 鍵盤有三個黑鍵是挨在一其和其它黑鍵分開
  2. 從鍵盤上的最左側的開始向右逐次同時按下兩個黑鍵組合,籮感覺
  3. 三個黑鍵連接的有四個白鍵F,G,A和B
  4. F位於三個黑鍵第一個白鍵,從左向右依次按下所有F鍵
  5. G位於三個黑鍵第二個白鍵,從左向右依次按下所有G鍵
  6. A位於三個黑鍵第三個白鍵,從左向右依次按下所有A鍵
  7. B位於三個黑鍵第四個白鍵,從左向右依次按下所有B鍵

 

八度各鍵

  1. 一個八度包含8個音符,C,D,E,F,G,A,B加上高八度C
  2. 你按下一個C在往上按下一C,分別是低八度和高八度
1 2 3 4 5 6 7 8
C D E F G A B C
Do Re Mi Fa Sol La Si Do

 

電池測量

測量電流
測量電壓
測量電流

我地可以在市面上買很多不同牌子的鹼性5號與7號電池,價格低廉但電池電量卻參差不齊,通過萬能表測量其電壓與電流

 

測量電壓voltage

  1. 紅線插電錶正極
  2. 黑線插電錶負極
  3. 擋位轉至直流5V
  4. 紅筆壓住電池正極
  5. 黑筆壓住電池負極
  6. 錶盤指針轉動,梯250刻度再除以100

 

測量電流current

  1. 黑線插電錶負極
  2. 紅線插電錶+2.5A,無的話串聯一隻電阻
  3. 擋位轉至直流250Ma
  4. 紅筆壓住電池正極
  5. 黑筆壓住電池負極
  6. 錶盤指針轉動, 梯250刻度再除以100

 

類型 號數 直徑 高度
D型 1號 32 mm 60 mm
C型 2號 26 mm 50 mm
SC 3號 22mm 42mm
A 4號 16.8 mm 49 mm
AA 5號 14mm 49mm
AAA 7號 10.5mm 44.5mm

 

Godaddy之更換主機

Godaddy之更換主機

因為Godaddy獨立IP價格高昂加上虛擬主機的錢可以購買最便宜的VPN-Linux主機.但可以通過更改主機而達到更換IP的目的.

  1. 備份數據庫Databases/MySQL/Setup/back up
  2. 數據庫SQL文見保存在_db_backups下載保存
  3. 備份文件最好使用FTP客戶端
  4. 更換主機”我的帳戶/我的產品/虛擬主機/設定選項/自訂/方案”
  5. 選擇”作業系統變更”並確認,狀態變為待決(Status/Pending Account Change)
  6. 之後等待快則1日慢則3日
  7. 要注意Linux主機是區分大小寫,在Hosted Domains中要注意目錄的大小寫
  8. 重設”固定網址設定”

3D打印-地圖之製作塞門刀車

3D打印-地圖之製作塞門刀車

塞門刀車顧名思義用於塞住門口阻擋敵兵,並且前方裝有尖刀.然而話是用於狹窄的巷戰,但也可用平坦的地形.一字排開對付騎兵的衝鋒並其到保護步兵的作用,缺點是移動速度慢.但只要運用得當它的威力異常強大,在陸戰兵器排名第二.

 

建模並打印下列物品

  1. 車輪20mm*2
  2. 車輪軸套*1
  3. 尖刀*4
  4. 刀架
  5. 盾牌格仔
  6. 車架*1
  7. 3MM*40MM鋼軸*1

 

裝配

  1. 使用介紙刀刮去軸套底部的毛次
  2. 使用介紙刀盾牌尖的抽絲
  3. 因為PLA較脆,安裝時不要心急
  4. 上色

3D打印-製作塞門刀車之車架

3D打印-製作塞門刀車之車架
3D打印-製作塞門刀車之車架
3D打印-製作塞門刀車之車架
3D打印-製作塞門刀車之車架
3D打印-製作塞門刀車之車架

車架是整個模型的關鍵,需具有一定的剛性並與各組件連接.

  1. 打開SOLIDWORKS新建零件模型
  2. 選擇”上視基準面”繪畫橫樑草圖
  3. 繪畫高3MM寬24MM距離原點坐標14MM的長方形作為橫樑
  4. 使用”特徵/拉伸凸台”深度填3MM生成橫樑實體
  5. 選擇”上視基準面”繪畫底板草圖
  6. 繪畫四個寬3MM高16MM長方形間隔1MM作為底板
  7. 使用”特徵/拉伸凸台”深度填3MM生成底版實體
  8. 點選“插入/參考幾何體/基準面”,參考面選擇”前視基準面”面,偏移距離50MM生成”側板基準面”
  9. 選擇”側板基準面”繪畫側板草圖
  10. 繪畫四個寬3MM高18MM長方形間隔1MM作為側板
  11. 使用”特徵/拉伸凸台”深度填2MM生成側板實體
  12. 選擇”側板基準面”繪畫扶手草圖
  13. 繪畫寬3MM長22MM長方形作為扶手
  14. 使用”特徵/拉伸凸台”方向1深度填5MM, 方向2深度填0.5MM生成扶手實體
  15. 選擇”側板基準面”繪畫推手草圖
  16. 繪畫3MM*3MM正方形作為推手
  17. 使用”特徵/拉伸凸台”深度填15MM生成推手實體
  18. 使用”特徵/圓角”對車架邊角位進行倒圓角
  19. 使用”特徵/鏡向”生成整個車架
  20. 選擇”上視基準面”繪畫軸套槽口草圖
  21. 繪畫兩個5MM*6.2MM長方形作為軸套槽口
  22. 使用”特徵/拉伸切除”方向選擇”完全貫穿”在底板切出軸套槽口
  23. 選擇”側板基準面”繪畫盾牌銷口草圖
  24. 繪畫直徑2MM圓並且與扶手相切作為盾牌銷口
  25. 使用”特徵/拉伸切除”方向選擇”完全貫穿”在側板切出盾牌銷口
  26. 放置刀架在車架前側

3D打印-製作塞門刀車之刀架

3D打印-製作塞門刀車之刀架
3D打印-製作塞門刀車之刀架
3D打印-製作塞門刀車之刀架

刀架是塞門刀車前側的護盾

  1. 打開SOLIDWORKS新建零件模型
  2. 選擇”上視基準面”,繪畫護盾草圖
  3. 在原點坐標繪畫高2MM寬28MM圓弧半徑28MM護盾草圖
  4. 使用”特徵/拉伸凸台”深度填28MM生成護盾實體
  5. 使用”特徵/圓角”對護盾的四個角進行倒圓角
  6. 選擇”前視基準面”,繪畫由兩個正方組成凸面草圖
  7. 使用” 特徵/包裹”工具,包裹參數勾選”浮雕”,”包裹草圖的面”選擇” 護盾正面”,厚度填5MM生成凸面
  8. 選擇”前視基準面”,繪畫由兩個正方組成凹面草圖
  9. 使用” 特徵/包裹”工具,包裹參數勾選”蝕雕”,”包裹草圖的面”選擇” 護盾正面”,厚度填5MM生成凹面
  10. 護盾背面凹凸造形與正面一致
  11. 選擇”上視基準面”,繪畫刀槽草圖,由四個寬2mm*高8.2mm的長方形所組成
  12. 使用”特徵/切除凸台”方向選則”完全貫穿”切出刀槽

3D打印-製作塞門刀車之尖刀

3D打印-製作塞門刀車之尖刀

因尺寸很細建模時驚打印吾到,不過最終效果還是幾好.

  1. 打開SOLIDWORKS新建零件模型
  2. 選擇”前視基準面”,繪畫尖刀草圖
  3. 在原點坐標繪畫高8MM寬4MM的長方型作為刀柄
  4. 使用”條樣曲線”繪畫兩條長16MM尖刀弧線
  5. 使用”特徵/拉伸凸台”深度填4MM生成尖刀實體
  6. 使用”特徵/倒角”對尖刀的的四條邊進行倒角

3D打印-自建懸空支撐和附著平臺

3D打印-自建懸空支撐和附著平臺

懸空支撐和平臺附著可以通過Cura自動生成,但打印效果卻得不到保證,而自建支撐和平臺需要注意以下幾點

  1. 支撐厚度設為噴准孔徑,我這台3D打印為4MM
  2. 沿懸空邊緣建立支撐
  3. 支撐儘量離開垂直的實體,以免造成抽絲.
  4. 支撐與懸空連接儘量小,才容易脫離
  5. 附著平臺繪畫為圓型

3D打印-盾牌之米字扣合版

3D打印-盾牌之米字扣合版
3D打印-盾牌之米字扣合版
3D打印-盾牌之米字扣合版
3D打印-盾牌之米字扣合版

最新版本摸盾牌將實現一體打印無需粘合,而且自建懸空支撐和平臺附著.通過標準扣合進行裝配效果一流.填充密度設為20%密度太高光潔度反而下降.

繪製盾牌米字版之扣合

  1. 打開SOLIDWORKS新建零件模型
  2. 選擇”上視基準面”作為繪畫平面.進入草圖模式
  3. 繪畫一個寬16MM 厚度是使用”3點原弧”畫弧半徑為28MM.繪畫呈外凸弧形盾牌剖面草圖
  4. 使用”特徵/拉伸凸台”工具向上拉伸16MM形成盾牌實體
  5. 選擇”上視基準面”繪畫盾牌外觀弧形
  6. 使用“條樣曲線”繪畫一側的弧形然後在鏡向另一側
  7. 使用”特徵/拉伸切除”工具,選擇兩側對稱,深度填10MM,切出盾牌外形
  8. 選擇”前視基準面”,繪畫盾牌凸面草圖
  9. 使用”等距實體”繪畫小2MM的盾牌外形,在中心繪畫十字線使用”裁剪實體”刪除不必要的對角弧線
  10. 使用”特徵/包裹”工具,包裹參數勾選”浮雕”,”包裹草圖的面”選擇” 盾牌正面”,厚度填5MM生成米字凸面
  11. 米字凹面與米字凸面一樣不同是包裹參數勾選”蝕雕”
  12. 背面與正面基本一致,米字凸面的包裹參數使用”蝕雕”,而米字凹面的包裹參數使用”浮雕”
  13. 點選“插入/參考幾何體/基準面”,參考面選擇”上視基準面”面,偏移距離填8MM生成”中心基準面”
  14. 選擇”中心基準面”,繪畫扣合草圖
  15. 扣合長度3MM厚度2MM彈雞外伸0.6MM,如上圖.
  16. 使用”特徵/拉伸凸台”工具,方向選擇”兩側對稱”深度填3MM拉伸形成扣合實體
  17. 自建懸空支撐和平臺附著

3D打印-盾牌之米字版

3D打印-盾牌之米字版正面
3D打印-盾牌之米字版正面
3D打印-盾牌之米字版背面
3D打印-盾牌之米字版背面
3D打印-盾牌之米字版

盾牌因其正面與背面弧形設計,再加其下尖上圓的外形令其極難打印,所以重新設計分正面與背面各自打印.然後再粘合.並且背面帶有銷用於裝配.

繪製盾牌正面(Front)

  1. 打開SOLIDWORKS新建零件模型
  2. 選擇”上視基準面”作為繪畫平面.進入草圖模式
  3. 繪畫一個寬16MM 厚度是使用”3點原弧”畫弧半徑為28MM.繪畫呈外凸弧形盾牌剖面草圖
  4. 使用”特徵/拉伸凸台”工具向上拉伸16MM形成盾牌實體
  5. 選擇”上視基準面”繪畫盾牌外觀弧形
  6. 使用“條樣曲線”繪畫一側的弧形然後在鏡向另一側
  7. 使用”特徵/拉伸切除”工具,選擇兩側對稱,深度填10MM,切出盾牌外形
  8. 選擇”前視基準面”,繪畫盾牌凸面草圖
  9. 使用”等距實體”繪畫小2MM的盾牌外形,在中心繪畫十字線使用”裁剪實體”刪除不必要的對角弧線
  10. 使用”特徵/包裹”工具,包裹參數勾選”浮雕”,”包裹草圖的面”選擇” 盾牌正面”,厚度填5MM生成米字凸面
  11. 米字凹面與米字凸面一樣不同是包裹參數勾選”蝕雕”

 

繪製盾牌背面(Back)

  1. 背面與正面基本一致
  2. 不同是盾牌背面呈內凹弧形盾牌剖面草圖
  3. 米字凸面的包裹參數使用”蝕雕”,而米字凹面的包裹參數使用”浮雕”
  4. 選擇”前視基準面”繪畫銷草圖
  5. 繪畫2MM圓銷的草圖
  6. 使用”特徵/拉伸凸台”工具拉伸5MM形成圓銷實體

 

粘合盾牌

  1. 準備ABS膠水
  2. 粘合並緊壓盾牌

3D打印-ABS原生膠水

3D打印-ABS原生膠水

通過底座和支撐可以一次性打印出整個複雜的模型,但效果就難以保證,更好的方法是分開打印然後再組合,較大的模型可以通過扣合或鑼絲, 較細的模型通過膠水粘合也不失為一個好方法.當然你可以購買502AB,但如果使用ABS為源料製作的膠水效果也會很好.

  1. 準備丙酮溶液用於溶解ABS
  2. 準備125ML的大口砂塞樽”.用於存放ABS膠水
  3. 準備不銹鋼筷子一支用於塗抹ABS膠水
  4. 準備廢棄ABS,顆粒不要太大否則融解要較長時間
  5. 100ML”丙酮溶液砂塞樽
  6. 10”ABS顆粒砂塞樽
  7. 等待56個鐘讓其完全溶解形成高濃度的ABS源漿
  8. 平時存放陰涼位置
  9. 使用不銹鋼筷子取出ABS源漿塗抹在粘合劑面上

3D打印-上色之砂紙打磨與拋光

3D打印-上色之砂紙打磨與拋光
3D打印-上色之砂紙打磨與拋光

在上色之前需要對模型進行打磨與拋光,因PLA與ABS並不太硬所以最好使用砂紙,而砂紙分號數,號數越大粒度越小,號數越小粒度大,一般只需買240,320,360,400,500,600,800,1000梯下表

號數/目數 用途
60# 玉石打磨
80# 玉石打磨
100# 金屬打磨
120# 金屬打磨
150# 木材打磨
180# 木材打磨
240# 模型初步粗打磨
280# 模型初步粗打磨
320# 模型二次打磨
360# 模型二次打磨
400# 模型精細打磨
500# 模型精細打磨
600# 模型初步拋光
800# 模型二次拋光
1000# 模型精細拋光
1200# 金屬拋光
1500# 玉石拋光
2000# 用於金屬玉石精細拋光
5000# 用於金屬玉石鏡面拋光

 

打磨與拋光的的三個基本步驟

  1. 先把寬280MM*長320MM砂紙平均分割成四份,便於保存
  2. 再分割出寬15MM條狀砂紙
  3. 然後平均分割成四份,大約寬15MM*長25MM,實際大小可視打磨面積而定
  4. 準備金屬鑷子,如上圖
  5. 把分割出條狀砂紙包裹鑷子一尖端
  6. 然後鑷子合攏令砂紙不能移動.開此打磨
  7. 打磨的過程砂紙可沾點水
  8. 初步粗打磨砂紙採用240#~280#
  9. 二次打磨砂紙採用320#~360#
  10. 拋光砂紙採用600#~1000#
  11. 沖洗模型

3D打印-地圖之製作車輪軸套

3D打印-地圖之製作車輪軸套
3D打印-地圖之製作車輪軸套

軸套與車輪均為作為戰車車架標準件,因車軸不能獨立打印,故使用直徑3MM滾針.採用滑動配合最好使用ABS打印.其視它就是一個“法蘭“,把車軸固定在車架下側.

  1. 打開SOLIDWORKS新建零件模型
  2. 選擇”前視基準面”,繪畫軸套草圖
  3. 在原點繪畫兩個同心圓,內圓直徑4MM,外圓直徑8MM
  4. 使用”特徵/拉伸凸台”深度填6MM生成軸套實體
  5. 選擇”前視基準面”, 繪畫軸架草圖
  6. 軸架就是凹槽,深2MM寬3MM厚2MM如上圖
  7. 使用”特徵/拉伸凸台”深度填6MM生成軸架實體

攝影-測光

攝影-測光
攝影-測光

拍攝合格照片在主要的層次和細節都要得都體現,而如果曝光過度或不足都是不合格的,特別是使用手動模式下.現在的單反相機都帶測光裝置.

  1. 安裝帶CPU的鏡頭
  2. ”手動B門”與”遙控B門”
  3. 按下Info按扭
  4. 取景器與信息顯示都會有曝光指示
  5. 最佳曝光:指示為0
  6. 曝光過度:指示為正刻度值向左,減小光圈或加快快門
  7. 曝光不足:指示為負刻度值向右,加大光圈或減慢快門

 

測光方式共有三種

方式 說面
矩陣測光 在大多數情況下可產生自然效果
中央重點測光 常用於人像攝影
點測光 對當前焦點進行測光,用於前景與背景的亮度差異非常大情況,對拍攝對像進行正確的曝光

 

攝影-D3000實現間隔定時拍攝

攝影-D3000實現間隔定時拍攝

我果台D3000無”間隔定時拍攝”實再是重大缺陷,只能買快門線.不過我有個方法可實現,曝光最長30秒,兩秒間隔連續拍攝

  1. 相機安裝三腳架
  2. 旋轉指令撥盤到M擋,設定為手動模式
  3. 設置”快門釋放模式/2S延拍遙控”
  4. 旋轉快門轉盤設置曝光
  5. 按住遙控按扭
  6. 相機等待兩秒,打開快門開始曝光
  7. 一直拍到電池耗盡為止
  8. 不過你需要製作螺帽形式的夾具,夾主遙控按扭並邊掛在相機一側.
  9. 另外我的兩個遙控只有原裝果個可以做到這點.

攝影-快門與B門

攝影-快門與B門

快門(Shutter)用於控制照片的曝光時間裝置,通常為30秒~1/4000秒.

B門(Build)手動釋放快門,只有超長時間曝光才會用它.

 

B門設置之手動

  1. 相機安裝三腳架
  2. 旋轉指令撥盤到M擋,設定為手動模式
  3. 設置”快門釋放模式/單張”
  4. 旋轉快門轉盤至Build(手動B門)向左轉至最盡.
  5. 按住快門按扭,打開快門開始曝光
  6. 開始計時
  7. 鬆開快門按扭,關閉快門結束曝光
  8. 因為長時間按住快門按扭會產生震動,最好使用遙控器或快門線.

 

B門設置之遙控

  1. 相機安裝三腳架
  2. 旋轉指令撥盤到M擋,設定為手動模式
  3. 設置”快門釋放模式/即拍遙控”
  4. 旋轉快門轉盤至Time(遙控B門)向左轉至最盡.
  5. 按下遙控按扭,打開快門開始曝光
  6. 開始計時
  7. 再按遙控按扭,關閉快門結束曝光
B門夜空30分鐘

B門夜空30分鐘,雲層與光嘈都太犀利.

 

3D打印-地圖之製作車輪

3D打印-地圖之製作車輪
3D打印-地圖之製作車輪
3D打印-地圖之製作車輪

車輪作為戰車重要組成部分,因車軸不能獨立打印,故使用直徑3MM滾針.採用緊配合最好使用ABS打印.不過要注意的是車輪是有分左右的,不過可以在Cura中進行鏡向操作,無須獨立製作多一個SLDPRT文檔.

  1. 打開SOLIDWORKS新建零件模型
  2. 選擇”前視基準面”,繪畫直徑16MM車輪草圖
  3. 車輪厚度2MM,分開三番
  4. 因滾針3MM故軸孔設為2MM,預留0.2MM作公差,如若使用ABS配合公差應設為0.1-0MM之間
  5. 使用”特徵/拉伸凸台”深度填3MM生成車輪實體
  6. 選擇”右視基準面”,繪畫輪胎與軸套草圖如上圖.厚度均為2MM.
  7. 使用”特徵/旋轉凸台”生成輪胎與軸套實體
  8. 選擇”上視基準面”,繪畫胎紋草圖,如箭嘴,
  9. 使用”草圖/線性草圖陣列”,在X-軸,間距填14.實例數添16
  10. 使用”特徵/包覆”工具,參數勾選浮雕,厚度填5MM.生成16個胎紋實體
  11. 選擇”上視基準面”,繪畫軸紋草圖,寬3MM高2MM的平行四邊形
  12. 使用”草圖/線性草圖陣列”,在X-軸,間距填86133333MM.實例數添3
  13. 使用”特徵/包覆”工具,參數勾選浮雕,厚度填生成3個軸紋實體
  14. 使用“文件/另存為/STL文件”,導出生成左車輪STL文件.並導入到Cura中.
  15. 複製多一個新模型,然後Mirror-Z軸鏡向,最後繞Z軸轉180度.生成右車輪.

3D打印-磁性燈座

3D打印-磁性燈座
3D打印-磁性燈座

3D打印機大都帶有LED燈,但若用於照明或攝影側略有不足,而市面上的補光燈在安裝與移動上也略有不便.而磁性表座側可以輕易地吸附與脫離3D打印機的金屬機身.如上圖.它是我多年前購買一直閒置在家.雖然有點破舊但並沒有消磁.

  1. 表座上有磁性開關
  2. 拔向ON側表座具有磁性
  3. 拔向OFF側表座消退磁性
  4. 表座的底座與背面都可用於磁性吸附.
  5. 表座可以在多台3D打印機之間輕易部置大瓦數LED燈.

3D打印-上色之調色盒

3D打印-上色之調色盒

調色盒的運用

  1. 你需要方格的調色盒,如上圖
  2. 每種顏色需要兩個方格
  3. 一格放丙烯顏料而旁邊一格放清水
  4. 清水用小油桶裝載,不要用筆洗裏面的水,以保正清水的純淨.
  5. 通過勾線筆用清水對顏料進性勾對,以控制顏料稀薄.
  6. 通過方格邊邊捲動勾線筆,讓筆鋒毛合攏不要開叉,否則影響落筆.

3D打印-上色之域名立牌

3D打印-上色之域名立牌

域名立牌要上兩隻顏色,分別是底色和字色,因為平面面積較大最好噴水補土.這樣較易上色.有一點要注意的是等待顏料幹透時,萬不可放在太陽底下暴曬,會造成PLA變型.

  1. 打印域名立牌
  2. 準備水補土,不要噴得太厚,等30分種另其幹透
  3. 準備丙烯顏料
  4. 準備1#畫筆,上底色用鈦白色.
  5. 若噴水補土.底色兩到三次即可完成上色.
  6. 不噴水補土,丙烯顏料要儘量稀薄,幹透後再上第二次色.重複多次才可完成底色上色
  7. 準備00#勾線筆,上字色用黑色.
  8. 不要用開叉的勾線筆,水只能落一點點.對凹字進行勾色,一到兩次即可完成上色.
  9. 等待幹透
  10. 準備00#勾線筆,再次對底色進行填充.
  11. 最後一步,水只能落一點點.不要讓顏料滲到凹字裏.

3D打印-燈箱補光燈罩

3D打印-燈箱補光燈罩
3D打印-燈箱補光燈罩
3D打印-燈箱補光燈罩
3D打印-燈箱補光燈罩

因為買左攝影燈箱與相機鏡頭,博客的照片質量大幅提升有目共睹,但燈箱的送LED燈是非標,不可以使用市面上的大瓦數的螺頭LED攝影燈.也不可以在黃光與白光之間切換.所以便萌生製作攝影燈頭想法.給出下列設計指標.

  1. 模塊化設計,便於修改與替換
  2. 燈罩可上下移動
  3. 帶有開關
  4. 置於燈箱上側的攝影孔
  5. 為以後的4燈設計留有餘地

 

苦想多日最終簡化為以下三模型

  1. 環型螺紋套:高度不應低於60MM最好為120MM以上,直徑120MM最好為180MM因為大瓦數LED燈的直徑較大
  2. 圓型底座:用於安裝E27螺紋燈頭和開關,並且設有散熱孔.如果使用鎢絲燈請使用ABS打印
  3. 環型鎖:需要打印兩個,用於鎖定環型螺紋套在燈箱上側

 

裝配燈罩

  1. 圓型微型開關
  2. 自攻鑼絲2MM*2
  3. 電源線5 米
  4. 接線端子*2+保護套*2
  5. 電源線經其中一個散熱孔進入
  6. 紅色火線經開關在到燈頭
  7. 燈頭在修鑼絲時不要太大力以免反牙
  8. 圓型底座裝在頂部
  9. 兩塊環型鎖夾住燈箱帆布

 

因手上未有大瓦數的LED攝影燈,照片以後在補.

3D打印-燈箱補光燈罩之環型鎖

3D打印-燈箱補光燈罩之環型鎖
3D打印-燈箱補光燈罩之環型鎖

3D打印-燈箱補光燈罩之環型鎖

  1. 打開SOLIDWORKS新建零件模型
  2. 選擇”前視基準面”,繪畫如上圖的草圖,使用”特徵/旋轉凸台”生成環型鎖實體
  3. 選擇”上視基準面”在原點繪畫直徑118MM的圓使用”插入/曲線/螺旋線”工具,定義方式選擇”螺距和圈數”,圈數填2MM,螺距填1MM,起始角度0,勾選”逆時針”,生成右螺紋.
  4. 選擇”前視基準面”,在”螺旋線”的起點繪畫三角形”螺牙”,高99MM,長2MM.並且與螺旋線相切.
  5. 使用”掃描切除”輪廓選擇”螺牙”,路徑選擇”螺紋線”.按確定生成螺紋
  6. 選擇”上視基準面”在環型邊繪畫直徑2MM的圓.並使用”圓周陣列草圖”以原點為中心,生成160個圓
  7. 使用”特徵/拉伸切除”,方向選擇”完全貫穿”,生成花紋切口用於旋轉環型鎖

3D打印-燈箱補光燈罩之環型螺紋套

3D打印-燈箱補光燈罩之環型螺紋套
3D打印-燈箱補光燈罩之環型螺紋套

3D打印-燈箱補光燈罩之環型螺紋套

  1. 打開SOLIDWORKS新建零件模型
  2. 選擇”前視基準面”,距離圓點60MM繪畫,繪畫寬5MM圓高60MM的長方形
  3. 使用”特徵/旋轉凸台”生成螺紋套實體
  4. 選擇”上視基準面”在原點繪畫直徑120MM的圓使用”插入/曲線/螺旋線”工具,定義方式選擇”螺距和圈數”,圈數填30MM,螺距填1MM,起始角度0,勾選”逆時針”,生成右螺紋.
  5. 選擇”前視基準面”,在”螺旋線”的起點繪畫三角形”螺牙”,高99MM,長2MM.並且與螺旋線相切.
  6. 使用”掃描切除”輪廓選擇”螺牙”,路徑選擇”螺紋線”.按確定生成外螺紋
  7. 重複3至5步圓的直徑為120MM,生成內螺紋

3D打印-燈箱補光燈罩之圓型底座

3D打印-燈箱補光燈罩之圓型底座
3D打印-燈箱補光燈罩之圓型底座
3D打印-燈箱補光燈罩之圓型底座
3D打印-燈箱補光燈罩之圓型底座

3D打印-燈箱補光燈罩之圓型底座

  1. 打開SOLIDWORKS新建零件模型
  2. 選擇”前視基準面”,繪畫如上圖的草圖,使用”特徵/旋轉凸台”生成底座實體
  3. 選擇”上視基準面”在原點兩側繪畫直徑分別為3MM和5MM的同心圓,使用”特徵/拉伸凸台”深度16MM生成螺絲孔實體
  4. 選擇”上視基準面”在原點繪畫直徑6MM的圓使用”插入/曲線/螺旋線”工具,定義方式選擇”螺距和圈數”,圈數填2MM,螺距填1MM,起始角度0,勾選”逆時針”,生成右螺紋.
  5. 選擇”前視基準面”,在”螺旋線”的起點繪畫三角形”螺牙”,高99MM,長2MM.並且與螺旋線相切.
  6. 使用”掃描切除”輪廓選擇”螺牙”,路徑選擇”螺紋線”.按確定生成螺紋
  7. 選擇”底座面”,繪畫圓形開關孔草圖,使用”特徵/拉伸切除”,方向選擇”完全貫穿”生成開關切口
  8. 選擇”底座面”在原點兩側繪畫直徑為3MM的圓,使用”特徵/拉伸切除”方向選擇”完全貫穿”切出螺絲孔
  9. 選擇”底座面”以原點為中繪畫8個直徑為12MM的圓,使用”特徵/拉伸切除”方向選擇”完全貫穿”切出散熱孔
  10. 選擇”上視基準面”在其中一個散熱孔繪畫圍邊草圖,內圓12mm外圓4mm的同心圓,
  11. 使用”特徵/拉伸凸台”深度填4MM生成散熱孔圍邊實體
  12. 使用”特徵/圓周陣列”生成8個散熱孔圍邊實體,跳過開關切口.
  13. 選擇”前視基準面”,在”螺旋線”的起點繪畫三角形”螺牙”,高99MM,長2MM.並且與螺旋線相切.
  14. 選擇”前視基準面”,在螺絲孔實體生成兩張半圓型草圖.
  15. 使用”特徵/放樣”輪廓選擇兩個”螺絲孔圓”,路徑選擇兩個”半圓型草圖”.按確定生成半圓型實體

3D打印-上色之平地

3D打印-上色之平地
3D打印-上色之平地

平地上色是最簡單的.左邊是無噴水補土的,右邊有噴水補土,兩者最終效果差不多.

  1. 打印平地模型
  2. 準備水補土,不要噴得太厚
  3. 準備丙烯顏料,平地上的是泥土,當然是使用土黃色(676),也可以通過紅色對黃色2:5的比例來配出土黃色.
  4. 準備一支1#畫筆.
  5. 注意水不要落太多.幹透後在上第二次色.
  6. 顏料太濃的話也會堵塞間隙.
  7. 一到兩次就可以完成上色.當然也可以不噴水補土.
  8. 上色次數越多效果越好.

 

攝影-濾鏡之CPL偏光鏡

攝影-濾鏡之CPL偏光鏡

偏光鏡也叫偏振鏡,簡稱PL鏡屬於濾色境.主要實現下面功能.

  1. 消除反光,能有選擇地讓某個方向振動的光線通過,常用於消除或減弱非金屬表面的強反光.從而消除或減輕光斑.消除水面反光最好與水名呈45度夾角
  2. 增加色彩濃度,加深天空藍色,突出白雲.不要面對直射的強光或者太陽(不可光)
  3. 增加飽和度,還原色彩平衡,光線一定要充足,否則會有反效果.
  4. 日光太強替代灰鏡進行減光.
攝影-濾鏡之CPL偏光鏡

影作張木瓜花蕾作對比照,體現更多細節並且色彩更飽滿.但如果光線不足反而要增加暴光時間.

相機 尼康D3000
鏡頭 AF Nikkor 50mm f/1.8D
快門 1/1000秒
光圈: F/1.8
感光度 100
焦距 50mm

 

攝影-濾鏡之STAR星光鏡

攝影-STAR星光濾鏡

星光鏡又稱為光芒鏡和散射鏡,對點光源形成光芒四射效果.細看鏡片上有多條平行和垂直的交叉細線,主要用於珠寶,水面,星光,燈光等拍攝場景.並且柔化影像.使照片產生夢幻般的藝術效果.

星光濾鏡分有3種線數 效果
4線 十字鏡
6線 水字鏡/雪花鏡
8線 米字鏡

我手上只有6線(雪花鏡),我影左張夜景對比照效果顯著.最奇特的是令雲層反射地面燈光.

攝影-STAR星光濾鏡
相機 尼康D3000
鏡頭 AF Nikkor 50mm f/1.8D
快門 1秒, 需要脚架
光圈: F/1.8
感光度 100
焦距 50mm

攝影-濾鏡之UV紫外線鏡

攝影-UV紫外線濾鏡

UV濾鏡是(UltraViolet)縮寫,意思是”紫外線濾光鏡”,用於過濾強紫外光,對其他可見與不可見光線均無過濾作用.在日常使用中對畫質提升並無幫助.除非紫外光極強.

所以有人拿UV鏡來保護鏡頭,但鏡片很脆很容爛,誤以為UV鏡的犧牲是對鏡頭的保護.

攝影-UV紫外線濾鏡
攝影-UV紫外線濾鏡

我影左幾張對比照,左則無濾鏡,右則裝UV濾鏡,畫質幾乎無差別.

相機 尼康D3000
鏡頭 AF Nikkor 50mm f/1.8D
快門 1/1000
光圈 F/1.8
感光度 100
焦距 50mm

3D打印-上色之筆洗

3D打印-上色之筆洗

因為使用丙烯顏料,丙烯變幹後便無發清洗,所以要備有筆洗,否則畫筆會報廢.在畫筆上的丙烯顏料幹透之前,一定要放在載有清水的筆洗中清洗.

我買的這個圓型筆洗筒並且帶有不銹鋼濾網,水位高於濾網即可,濾網設計便於清理與收集松節油.在滤网上轻扫画笔.

油壺用於裝載清水,其實可以使用一次性的紙杯無需另購.

3D打印-上色之水補土

3D打印-上色之水補土
3D打印-上色之水補土

水補土是一種合成樹脂塗料,雖然叫補土,只作為一種底漆使用,令模型上色更容易.

我買的是郡士(GSI)灰色1000號B-519噴罐水補土,郡士分有4個號數,號數越大顆粒越小噴塗表面越細越光滑

型號 顆粒
500# 顆粒較大
1000# 基本款
1200# 可修正細小瑕疵
1500# 細目型常用於車模

 

使用方法

  1. 處於通風透氣的地方
  2. 把模型放致於紙箱中
  3. 使用前勻約搖1-2分鐘
  4. 噴塗距離保持在約8cm左右,不要噴得太厚.
  5. 乾燥時間大約10分鐘,視當地的穩度與濕度而定.
  6. 乾透後再檢查補漏.

 

3D打印-上色之畫筆與勾線筆

3D打印-上色之畫筆與勾線筆

上色主要使用畫筆與勾線筆.我把型號與尺寸製錶,方便以後補買.

畫筆:平頭畫筆主要用於上色繪畫,分為十二種型號

勾線筆:顧名思義當然是用於勾線和描邊.分為十一種型號

勾線筆要選購不易開叉,否則影響落筆,一但開叉只能更換或剪掉開叉部分.

畫筆型號 筆鋒長(mm) 筆鋒寬(mm) 筆桿長(mm)
1# 8 5 205
2# 10 7 206
3# 11 7 205
4# 13 8 207
5# 14 9 205
6# 16 10 210
7# 16 11 210
8# 18 13 208
9# 20 14 212
10# 22 16 214
11# 23 19 220
12# 24 20 221

 

畫筆型號 筆鋒長(mm) 筆鋒寬(mm) 筆桿長(mm)
000# 8 1 171
00# 9 2 168
0# 10 2 175
1# 11 2 177
2# 13 2 178
3# 14 3 180
4# 16 3 182
5# 17 4 185
6# 18 4 186
7# 20 5 190
8# 22 5 192

 

3D打印-上色之丙烯顏料

3D打印-上色之丙烯顏料

丙烯顏料通常用於繪畫,色擇鮮豔亮麗,不退色,不龜裂,不脫落,最重要的附著力大,用於塑料上色最合適.

而且丙烯顏料乾燥快,乾燥後不容溶于水,隔幾分鐘幹透後可在覆蓋修蓋,但畫筆一定要在丙烯幹透之前清洗,否則畫筆報廢.

丙烯顏料有它專有的調和液(稀釋液),更容易上色.

其實用水都可以稀釋的.但要用無雜質純淨水,

  1. 儘量稀釋丙烯,
  2. 先薄薄的塗一層.
  3. 等幹透後在塗層,
  4. 重複多次才能完成上色.
  5. 稀與薄是重點

我買這款有36種顏色每支12毫升.每款顏色有其對應的數字,我製作顏色對照表便於以後單補買顏色

顏色 編號
鈦白 104
肉色 219
檸檬黃 215
淡黃 216
桔黃 301
桔紅 313
朱紅 324
大紅 302
深紅 315
玫瑰紅 336
紫紅 403
黃綠 562
粉綠 559
中綠 505
草綠 568
翠綠 560
天藍 447
天青藍 486
湖藍 455
鈷藍 453
群青 443
酞青藍 450
紫羅蘭 402
紫色 439
生赭 601
土黃 676
土紅 681
赭石 684
熟褐 687
生褐 688
威狄克棕 690
培恩灰 797
灰色 798
冷灰 795
黑色 793
中黃 227

 

丙烯調色表
紅+黃=橙
藍+黃=綠
藍+紅=紫
黑+白=灰
紅+黃=土黃
紅多+黃小=橙紅
紅小+黃多=紅橙
紅小+白多=淺紅
橙紅+黑=暗橘色
橙紅+白=淺橘色
藍小+紅多=紫羅蘭
藍多+紅小=藍紫
黃小+藍多=翠綠
黃多+藍小=嫩綠
橙紅+黑+白=桔灰
黑小+白多=淺灰
黑多+白小=深灰

 

攝影-尼康鏡頭之技術與分類

攝影-尼康鏡頭之技術與分類

Nikkor漢譯為尼克爾是尼康鏡頭的品牌.尼康鏡頭的全部使用縮寫或簡稱.所以我查找說明書儘量找出其含意並列於下表.

簡稱 簡介
FX 全畫幅/膠片畫幅,感光芯片尺寸如135菲林24*36mm大小.F代表Film, X代表對角線
DX APS畫幅,感光芯片尺寸為23.7*15.7mm大小,D代表Digital, X代表對角線
APS 高級照片系統Advanced Photo System
AF 自動對焦鏡頭
AF-S 含有靜音馬達對焦技術的自動對焦鏡頭
AF-P 含有步進馬達(STM)驅動的自動對焦鏡頭
PC 移軸鏡頭,配有傾斜/移軸機械裝置
PC-E 內置電磁光圈的移軸鏡頭
MF 手動對焦鏡頭
HRI 高折射率鏡頭
Micro 微距鏡頭
D D代表距離,內置距離信號輸出的能力,AF,AF-S,PC,PC-E均內置有距離信號,並且具有光圈環
G G鏡頭沒有光圈環,但有距離信號輸出.
E E鏡頭內置電磁光圈
STM 用步進馬達(STM)驅動實現自動對焦
M/A 自動對焦到手動對焦快速切換技術
A/M 與M/A一樣,但自動對焦優先與手動對焦
A-M 自動對焦與手動對焦模式切換環
SWM 靜音馬達對焦技術
F 光圈值,如f/3.5-5.6
VR 減振技術在保持穩定取鏡器的同時修正模糊
N 納米結晶塗層,降低鬼影與眩光以實現清晰影像
ED 超低色散鏡片減小遠攝鏡頭的色差
AS 非球面鏡片實現修正色差
ASED 非球面低色散(ED)鏡片
FL 螢石鏡片
PF 菲涅爾相位鏡片,利用照片衍射現象有效補償色差
IF 中組鏡片移動對焦
RF 後組鏡片移動對焦
CRC 近距矯正系統
HB 刺刀式遮光罩
HN 旋入式遮光罩
HK 插入式遮光罩
HS 卡入式遮光罩
HR 橡膠式遮光罩

 

攝影-尼康鏡頭之AF Zoom-Nikkor 70-300mm f4-5.6G

攝影-尼康鏡頭之AF Zoom-Nikkor 70-300mm f4-5.6G

AF Zoom-Nikkor 70-300mm f4-5.6G是尼康的遠攝,擁有最大300m的長焦距.不過最近對焦要1.5m它只適合日光下的遠鏡拍攝,”室內””人像””近鏡”它的效果都強差人意.

拍攝風鏡也不太合適,但視角窄全畫幅FX視角:34.10-8.10度, 非全畫幅DX視角更窄:22.50-5.20度.拍攝風鏡需要視角覺大鏡頭.

需然它外殼鏡筒連卡口都是都塑料製造,但依然有425g加上相機的重量,步行太遠路程也有小小負擔.

因為是G型鏡頭並無光圈環可以在機身上設頂廣圈,但如果你的相機無對焦馬達,則只能手動對焦.

不過它倒合適於影距離較遠的花鳥魚蟲蔬菜水果.

攝影-尼康鏡頭之AF Zoom-Nikkor 70-300mm f4-5.6G
攝影-尼康鏡頭之AF Zoom-Nikkor 70-300mm f4-5.6G

相機:尼康D3000

鏡頭: AF Zoom-Nikkor 70-300mm f4-5.6G

快門:1/500

光圈:F/4

感光度:100

焦距:300mm

需然鏡頭中價格低廉.但用處不大.買之前一定要想清楚.下麵是我找到機身參數

鏡頭結構 9組13片
最近對焦 1.5m
最大複製比率 1/3.9倍
濾鏡大小 62mm
遮光罩 HB-26

 

攝影-尼康鏡頭之AF Nikkor 50mm f/1.8D

攝影-尼康鏡頭之AF Nikkor 50mm f/1.8D

尼康AF Nikkor 50mm f/1.8D鏡頭是因為要拍攝模型照片才買的,但性價比超高.需然話是人像鏡頭,但因為鏡頭光圈大對焦模型時,背鏡產生模糊效果效果其佳.而且此款鏡頭極其緊湊輕便只重155g,最適合用於外出街拍,最重要的是適合日常大多數拍攝環景.

雖然此款鏡頭帶有光圈環,但只是給菲林相機使用的.數碼單反只能通過機身來調節光圈.當你裝上鏡頭便會顯示”以最小光圈鎖定鏡頭光圈環(最大f/-值)”,需如下調節(第一張圖).

  1. 轉動鏡頭光圈環調至最小F22,22要正對白圓點或白豎杠.
  2. 鎖止鍵向下鎖定光圈環.
攝影-尼康鏡頭之AF Nikkor 50mm f/1.8D

第二張圖是我拍在不同焦點下的模糊效果

相機:尼康D3000

鏡頭:AF Nikkor 50mm f/1.8D

快門:1/500

光圈:F/1.8

感光度:100

焦距:50mm

鏡頭參數
鏡頭結構 5組6片
最近對焦 0.45m
視角 46度
最大複製比率 1.66倍
濾鏡大小 52mm
鏡頭套 CL-0715
銀色Logo脫色

不過我買的這個鏡頭蓋的銀色Logo是會脫色的,而且造工較差.暈得一陣陣.