TOSHIBA-XG3-M.2-MVME-MLC-1TB東芝固態磁碟

TOSHIBA-XG3-M.2-MVME-MLC-1TB東芝固態磁碟
TOSHIBA-XG3-M.2-MVME-MLC-1TB東芝固態磁碟
TOSHIBA-XG3-M.2-MVME-MLC-1TB東芝固態磁碟
TOSHIBA-XG3-M.2-MVME-MLC-1TB東芝固態磁碟

近日Win10經常死機,本想重裝.但發現『希捷磁碟』出現壞道『重定位磁區計數』達100.而且速度太慢.發現TOSHIBA『東芝』XG3-1TB-M.2-MVME-MLC顆粒.勝在壽命長.主控是三星芯片標稱『讀』2400MB/S『寫』1500MB/S.果斷購入.

  1. 2接口SSD安裝
  2. 讀寫性能測試CrystalDiskMark 基本達標
  3. CrystalDiskInfo磁碟檢測溫度達65度.可煎蛋.

 

1GiB測試 讀Read[MB/s] 寫Write[MB/s]
Seq Q32T1 2357.5 1448.3
4KiB Q8T8 1097.0 481.4
4KiB Q32T1 344.1 230.2
4KiB Q1T1 43.01 125.3

 

SSD 簡介
TOSHIBA CORPORATION 製造商東芝公司
SOLID STATE DRIVE 固態驅動器
THNSN51T02DU7
8SSSD0F66227T2PL7210028
CAPACITY 1024GB 容量1TB. 4塊256GB顆粒組成.
FW 410557LA
FPU:00UP610
20FEB2017
1708KBZ
S/N 27KS1024TFGT
LI P/N:SSD0F66227 零件代碼
WARRANTY VOID IF REMOVED 若撕毀無保養
3.3V 電壓
2.0A 電流
MADE IN PHILIPPINES菲律賓製造 產地

 

顆粒 簡介
TOSHIBA 東芝
TH58TFT1JFLBAEG 元件型號
U79907 製造商編號
JAPAN 產地
1705KAE
256GB 容量

 

主控 簡介
SAMSUNG        643 三星
K4E8304EE-EGCE
YGG583HEC

 

M.2模塊安裝

M.2模塊安裝

Windows10系統對硬件要求非常高.如果SSD磁碟是『太子參』級補品.則安裝M.2接口SSD磁碟有『脫胎換骨』之效

  1. 準備『十字螺絲批』
  2. 在底板找出2模塊接口.通常位於第一條PICe*16插槽旁.需要先拆除顯卡.
  3. 從『螺絲底座』上拆除『螺絲』
  4. 拆除『螺絲底座』
  5. 2模塊有四種長度,將『螺絲底座』移到SSD長度並擰緊.
  6. 將2模塊約30度插入M.2接口
  7. 將『螺絲』對準2模塊後緣缺口上並擰緊到『螺絲底座』

Kingston之DT101 G2 64GB

Kingston之DT101 G2 64GB
Kingston之DT101 G2 64GB
Kingston之DT101 G2 64GB

美囯金士頓U盤一直是信得過產品.剛買入Kingston DT101 G2 64GB雖然是USB2.0 『寫入』大約 8M/S.比之前買16GB速度快.但價格低廉.而且U盤在讀寫會閃燈.之前買無閃燈.

性能 速度
1.5GB
8MB/S

 

勒索病毒愛馬仕

勒索病毒愛馬仕

重裝Windows10後手多多關左『病毒與威脅防護』即Windows Defender.後在網上Download左只軟體.無耐發現大量文檔後綴被加上[unlockmeplease@cock.li].HRM並且出現DECRYPT_INFORMATION.html一睇話你知文檔以被『愛馬仕HERMES』以RSA2048算法加密.只有支付比特幣作為解密贖金.睇來是中左大名頂頂『勒索病毒』.為免中毒加重『文檔被加密』.果斷關機重裝Win10.經點算大量文檔與被加密.好彩有備份數據實制損失十幾篇blog文章與Android代碼. 此病毒與2017年舉世聞名『魔窟WannaCry』同一原理.其毒害之處再於加密所有檔案,而非破壞運行程式.令你有大量數據損失.經此一劫總結如下:

  1. 『病毒與威脅防護』Windows Defender只可短暫關閉並經常更新數據庫
  2. 經常備分數據

點陣字體生成器CBFG

點陣字體生成器CBFG

之前講解在Android遊戲種使用『點陣字體』使用Photoshop繪畫.但要對齊所有字符效果並不理想.但『Codehead’s Bitmap Font Generator』可以幫助你生成『點陣字體』.而且把非等距字體自動對齊.通過記錄每個自體寬度生成非等距文本.可以從www.codehead.co.uk/cbfg/免費獲取.以創建羅馬體為例:

  1. 下載並啟動exe
  2. 字體選擇『Times New Roman』
  3. 圖像尺寸『Image Size』輸入512*512(像素)
  4. 單元格寬與高『Cell Height』與『Cell Width』均輸入即每行16個單元格共16行.
  5. 跳過非打印字符『Start Characte』總是輸入32
  6. 字體高與寬『Font Height』『Font Height』均輸入
  7. 顏色『Color』文本白色(最常用顏色).背景黑色.
  8. 抗鋸齒『Anti-Aliasing』選無『None』即可
  9. 效准『Adjust Selection(255) Only』
  10. 字體位置『Position』x與y均輸入否則文本可能超出單元格
  11. 渲染單元格『Show Grid』與渲染寬度『Show Widths』
  12. 字體渲染『粗體』Bold與『斜體』Italic
  13. 輸出『圖像字符』File->Export->Bitmap(BMP).路徑一定要是英文不能漢文.否則不能保存.
  14. 使用Photoshop去除背景顏色.並保存為png圖檔.

 

合成音效發生器as3sfxr

合成音效發生器as3sfxr

最早8bit遊戲機非常適合使用芯片音(chip tunes).芯片音是一種音效通過合成器生成.而as3sfxr則是專業音效工具.可以通過www.bfxr.net下載WINDOWSMAC版本.跳躍音效生成簡介.

  1. 勾選『Create New Sound』自動新建音效
  2. 點擊左上側『Jump』按鍵.隨機生成跳躍『音效』.
  3. 點擊Synth有9種『合成器』可選
  4. 在左下側點選播放『音效』
  5. 點擊右側『Export Wave』按鍵.儲存wav音檔
音效 簡介
Pickup/Coin 拾取/硬幣
Laser/Shoot 激光/射擊
Explosion 爆炸
Powerup 加電
Hit/Hurt 命中/傷害
Jump 跳躍
Blip/Select 彈開/選擇
Randomize 隨機
Mutation 異變

 

合成器 簡介
Triangle 三角形濾波
Sin 正弦濾波
Square 平方濾波
Saw 聲表面波濾波器
Breaker 斷路
Tan 正切濾波
Whistle  
White  
Pink 粉紅噪聲

 

按扭 簡介
Export Wave 儲存單個wav『音效』
Export All Waves 儲存所有wav『音效』
Clear All 清除所有wav『音效』
Duplicate Synth 複製合成『音效』
Copy Link 複製『音效』鏈接

 

FPS第一人稱視角射擊遊戲

是時候將之前所學OpenGL/DirectX知識粘合成一完整遊戲.最簡單是『第一人稱視角射擊遊戲』FPS(First-person Shooter). 通過控制『準星』描准『怪物』按滑鼠左鍵發射『飛彈』.若擊中便會『爆炸』並擊殺『怪物』,其實它會在另地在生.若擊中地面則會『爆炸』.按鍵盤上下鍵在山地中前後移動.若近距離接近『怪物』它會另轉面自動走開(AI部分). 所有『怪物』與『飛彈』都是MD2模型.按ESC鍵退出遊戲.下載FPS:

下面所需要文章與代碼:

  1. AI之行走
  2. 準星
  3. 粒子爆炸特效
  4. 邊界球
  5. MD2文檔讀取與解析
  6. WAV音檔分釋與讀取
  7. DirectSound3D
  8. DirectInput之查詢滑鼠
  9. DirectInput之查詢鍵盤
  10. 粒子系統
  11. 廣告牌
  12. 紋理地形
  13. 天幕
  14. 紋理映射

AI之行走

AI之行走

AI也就是『人工智能』在遊戲中實現多數使用『狀態機』.通過定義大量狀態.然後通過條件判斷而切換當前狀態.從而實現對外界作出反應. 當『怪物』它會觀察四周.當你接近它時會另轉面走開.

首先定義下面幾個狀態

#define AI_IDLE       0 // 站立

#define AI_RUN        1 // 奔跑

#define AI_DEATH      3// 死亡

初此AI狀態變量設為站立

int ai = AI_IDLE;

『狀態機』判斷結構

if (ai == AI_IDLE) // 站立

{

}

else

if (ai == AI_RUN)// 奔跑

{

}

else

if (ai == AI_DEATH)// 死亡

{

}

 

站立轉身走開AI代碼

1.首先計算兩者距離

VECTOR3D distance = pos – player.pos;

length = Length_VECTOR3D(&distance);

2.計算『怪物』與『玩加』 矢量之間夾角

Normalize_VECTOR3D(&distance);// 長度歸一

VECTOR3D v;

Init_VECTOR3D(&v, 0, 0, -1);

angle = RAD_TO_DEG(Angle_VECTOR3D(&distance, &v0));// 角度

2.若距離小於10米則會轉身離開

if (length < 10  ){

ai = AI_RUN;// 奔跑

rot.y = (angle – 90) + ((rand() % 90) – 45);// 轉身走開.有45度隨機角度

}

 

遊戲建模之碰撞時間

遊戲建模之碰撞時間

『物體』運動核心是碰撞.你試想下當『物體』高速運動時有可能會穿越牆壁.這因遊戲世界中CPU會輪詢處理所有『物體』. 並只會分到有限『運算/時間』,所以每一次你都需要準確計算碰撞時間.通過不斷遞歸而確定最後移動位置

通過使用基於時間二維方程式進行碰撞檢測.

xf=x0+v0t+(1/2)at2

ax2+bx+c=0

利用係數替換可得到

a=(1/2)*a

b=v0

c=x0-xf

將其擴展可得到三維方程式

xt=cx+bxt+axt2

yt=cy+byt+ayt2

zt=cz+bzt+azt2

如果將三維方程應用於平面方程可得

Axt+Byt+C*zt+D=0

此方程說面如果物體與平面發生碰撞.其碰撞點位於(xt,yt,zt)通過代數運算可得到

(Aax+Bay+Caz)x2+(Abx+Bby+Cbz)x+(Acx+Bcy+Ccz)+D=0

這其實就是平面二次方程式(ax2+bx+c=0) ,其點積形式為:

ax2=(Aax+Bay+Caz)x2=N•(1/2)A

利用點積得到二次方程係數:

加速度係數: a=N•(0.5A)

速度係數:  b=N•V

距離係數:  c=N•X+D

有上序二次方程係數就可計算碰撞時間

float a = n % (acceleration * 0.5f);// 加速度係數

float b = n % velocity;// 速度係數

float c = n % position + D – radius;// 距離係數

若a=0加速度係數為零,碰撞時間等於距離係數除以速度係數.因為距離係數小於零所以要去負值.

collisionTime = -c/b;

若a!=≠0加速度係數不為零,可以使用二次方程計算碰撞時間:

x=(-b+√(b2-4ac) ) / 2a

在計算碰撞時間之前可先計算D=b2-4ac 若D小於零則無解.若D大於零則有解

float D = b * b – 4 * a*c;

if (D > 0) // 如果判斷式大於等於零

collisionTime = (-b – sqrtf(D)) / (2 * a); // 計算碰撞時間

因為發生碰撞物體會彈開,方向矢量產生返射需要重新計算位置.通過減去碰撞時間進行遞歸.直到『幀時間』為零

 

下面是『曲棍球』碰撞函式.

puck 是曲棍球.

table 是球臺

deltaTime是幀時間

void Update_Puck(PUCK_PTR puck, TABLE_PTR table, float deltaTime){

float  fastestTime = deltaTime;// 最早碰撞時間

float  collisionTime;// 碰撞時間

PLANE3D_PTR plane          = NULL;// 平面

PLANE3D_PTR planeCollision = NULL;// 碰撞平面

if (deltaTime <= 0.000f)// 遞歸

return;

// 對球臺四個圍邊檢查碰撞

for (int i = 0; i < 4; i++){

plane = &table->wall[i];// 平面

// 點積二次方程

float a = plane->n % (puck->acceleration * 0.5f);// 加速度係數

float b = plane->n % puck->velocity;// 速度係數

float c = plane->n % puck->position + plane->D – puck->radius;// 距離係數

if (a == 0 && b != 0 && c != 0){// 如果無加速度

// 碰撞時間等於距離除以速度

collisionTime = -c/b;// 碰撞時間

if (collisionTime >= 0 && collisionTime < fastestTime){// 發生碰撞

fastestTime = collisionTime;// 保存碰撞時間

planeCollision = plane;// 平面

}

}

else

if(a != 0){

// 加速度a不等於零

// 計算判別式

float D = b * b – 4 * a*c;

if (D > 0) {// 如果判斷式大於等於零

// 計算碰撞時間

collisionTime = (-b – sqrtf(D)) / (2 * a);

if (collisionTime >= 0.0f && collisionTime < fastestTime) {// 發生碰撞

fastestTime = collisionTime;

planeCollision = plane;

}

}

}

}// END FOR

// 速度設上限每秒800米

if (Length_VECTOR3D(&puck->velocity) > 800)

puck->velocity = Normalize_VECTOR3D(&puck->velocity) * 800;

// 如果冰球正移動,則應用磨擦力

if (Length_VECTOR3D(&puck->velocity) > 0)

puck->acceleration = -puck->velocity * 0.2f;// 計算加速度

// 計算當前位置

puck->position = puck->position + puck->velocity * fastestTime + puck->acceleration * (fastestTimefastestTime0.5f);

// 應用磨擦力

puck->velocity = puck->velocity + puck->acceleration * fastestTime;

// 如果發生碰撞,反轉速度

if (planeCollision != NULL)// 碰撞平面

puck->velocity = Reflection_VECTOR3D(&puck->velocity, &planeCollision->n);

// 遞歸調用

Update_Puck(puck, table, deltaTime – fastestTime);

}

遊戲建模之碰撞反應

遊戲建模之碰撞反應

若3D模型發生碰撞後需要計算碰撞反應,不通物體運動有不同碰撞反應.但物體多數以直線運動.物體彈回角度和碰撞角度相等.

入射角度:桌球運動方向與邊沿平面法線向量之間夾角.

反射角度:垂直於運動方向矢量

例:當桌球撞向邊沿.它將按撞擊角度與之對等『入射角度』彈開

方程並沒有考慮球體旋轉作用力與磨擦力.最終得到計算反射方向方程式

給定運動方向矢量I與垂直法線N求碰撞反射方向F

F = (I – N2 (I % N)) * | I |;

計算反射方向代碼,dir為射線方向,normal為碰撞面法線

VECTOR3D Reflection_VECTOR3D(VECTOR3D_PTR dir,VECTOR3D_PTR normal){

VECTOR3D vec ;

Normalize_VECTOR3D(dir, &vec); // 單為化方向向量

*dir = (vec – *normal * 2.0f * (vec % *normal)) * Length_VECTOR3D(dir);

return *dir;

}