Canon MG3580無法識別墨盒

Canon MG3580無法識別黑色墨盒
Canon MG3580無法識別黑色墨盒PG-840XL
Canon MG3580無法識別墨盒
Canon MG3580無法識別墨盒

台『佳能』Canon噴墨Printer一段時間無用,台機墨盒居然無法識別.

支援代碼:1401

無法識別一下墨盒

黑色

由於墨盒可能安裝不正確或墨盒與本印表機不相容,無法執行列印.

安裝合適墨盒

如果想取消列印,按一下『取消列印』

  1. 錯誤代碼1401為黑色墨盒PG-840XL無法識別.
  2. 墨盒觸點接觸不良.需將墨盒拆落來,用『膠擦』擦墨盒觸點.
  3. 再重新裝入墨盒.再重啓
  4. 黑色墨盒已識別,但又到彩色墨盒無法識別.
支援代碼:1485

未安裝合適的墨盒

彩色

墨盒與本機不相容,無法執行列印.

如果想取消列印,按一下『取消列印』

  1. 錯誤代碼1401為彩色墨盒CL-841XL無法識別.
  2. 用『膠擦』擦墨盒觸點.重啓
  3. 重復嘗試仍然無法識別.只能買新彩色墨盒CL-841XL
  4. 但又到『捲紙滾輪』無發卷紙.廉價Printer問題多多.

 

2.5寸USB3.0移動磁碟盒

2.5寸USB3.0移動磁碟盒
2.5寸USB3.0移動磁碟盒
2.5寸USB3.0移動磁碟盒

買『東芝固態磁碟』後『希捷筆記本磁碟』淘汰落來.在網上買『硬盤盒』存放韓劇以廢物利用.買左USB3.0因為筆記本磁碟讀寫速度大約35M/S左右.而且USB前置分線器也是3.0買USB3.1根本無用.推開上蓋即可插入2.5寸磁盤.用CrystalDiskMark測試讀寫速度比與用SATA要慢.睇來是USB主控芯片問題.

電視機USB口帶有防反沖電保護,電壓會偏低.但它卻可直接用在電視機USB口,無需外接電源.肯定帶有穩壓裝置可在低壓下啓動.

端口
USB3.0移動硬盤盒 37.93MB/s 34.13MB/s
SATA 6Gb/s 171.3 MB/s 57.67 MB/s

 

端口 理論帶寬Bit/s 傳輸速率MB/S
USB1.1 Full Speed 12 Mbps 1.5MB/s
USB2.0 High Speed 480 Mbps 60MB/s
USB3.0 Super Speed 4.8 Gbps 600MB/s
USB3.1 Super Speed+ 10 Gbps 1.25GB/s
USB3.2 Super Speed+ 20 Gbit/s 2.5GB/s

 

Logitech羅技滑鼠M330

Logitech羅技滑鼠M330
羅技滑鼠M330/M280
Logitech羅技滑鼠M330

只羅技滑鼠M280其左右『觸點』已衰老.是時後購買新滑鼠替換. 羅技M330是M280靜音版但貴小小.其實我覺得M280手感更好.而電池是否更耐用則未知.

  1. 拆開底蓋安裝電池.
  2. 拔出藍牙控制器,插入電腦USB接口.
  3. Win10需安裝Logitech滑鼠驅動Logitech Options

 

WORD簡繁轉換

WORD簡繁轉換

WORD可將簡體轉為繁體.但需禁用詞彚轉換.以控制詞彚用法.

  • 『校閱』->『繁簡轉換』. 打開『中文繁簡轉換』
勾選『簡體中文轉成繁體中文』
勾選『使用台港澳等地字元』
取消『轉換常用詞彚』
  • 選文本 『校閱』->『簡轉繁』

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模塊後緣缺口上並擰緊到『螺絲底座』

Google移動設備易用性

Google移動設備易用性

近日Google Search Sonsole發現本網有『網頁不適合在移動設備上瀏覽』『此網頁可能難以在移動設備上瀏覽』.本網使用Wordpress不應出現這類情況.細睇之問題在於首頁『index.asp』『未設置視口』與『文字太小,無法閱讀』.此文檔只用作跳轉到wordpress.但Google也作『網址檢查』.本想唔理它,但Google話可能影響網站排名.此問題只以文本編輯『index.asp』在頭部添加viewport屬性.並以ASCII碼保存後上傳.

<meta name=”viewport” content=”width=device-width, initial-scale=1″ />

儅上傳後可讓Google重新進行『網址檢查』按右上角『測試實際網址』若通過則『可建立索引的網址』與『網頁適合透過行動裝置瀏覽』

問題 修改方法
未設置視口 <meta name=”viewport” content=”width=device-width, initial-scale=1″ />
文字太小,無法閱讀
內容寬度超過了屏幕顯示範圍 更換Wordpress佈景主題
可點擊元素之間的距離太近
使用了不兼容的插件 頁面使用Flash等插件刪除即可

 

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. 經常備分數據

火狐之書簽導入與導出

火狐之書簽導入與導出

Windows10安裝新版本『火狐』Firefox後.經一番努力先穩到書簽『導入』與『導出』選項.火狐將書簽導出為json文檔.用於JavaScript文本數據格式

『導出』書簽

  1. 啟用『火狐』按ALT鍵.彈出菜單.
  2. 『書簽->顯示所有書簽』或者按Ctrl+Shift+B彈出『收藏庫』
  3. 『匯入與備份->備份』json文檔

『導入』書簽

  1. 『匯入與備份->回復->選擇檔案』選你備份json文檔

Windows10磁碟基準測速

Windows10磁碟基準測速
Windows10磁碟基準測速

當想對『磁碟』測速.而手邊又無安裝CrystalDiskMark.可借助Windows10內置測速工具:

  1. 以系統管理員身份執行命令視窗CMD
  2. 『winsat disk -drive d』

D是盤符.但對希捷酷鷹2TB監控盤測量,結果可能有問題.讀取速度達7802.15MB/S

命令 簡介
winsat disk -drive d 執行下列所有讀寫測試
winsat disk -drive d -ran -read 磁盤隨機讀取16 MB時間

Disk Random 16.0 Read

winsat disk -drive d -seq -read 磁盤順序讀取64 MB時間

Disk Sequential 64.0 Read

winsat disk -drive d -seq -write 磁盤順序寫取64 MB時間

Disk Sequential 64.0 Write

winsat disk -drive d -flush -seq 循序寫入的平均讀取時間
winsat disk -drive d -flush -ran 隨機寫入的平均讀取時間

 

磁碟檢測HD Tune Pro之降噪延壽

磁碟檢測HD Tune Pro之降噪延壽
磁碟檢測HD Tune Pro之降噪延壽

『磁碟』製造商自上世紀未達到萬轉.但一直未有普及.而現役『磁碟』多為5400轉、5900轉、7200轉.可見轉速提高讀寫加快,但工藝與壽命都難以保障.

HD Tune Pro提供『自動噪聲管理』AAM(Automatic Acoustic Management),其原理降低『磁盤』轉速而減小震動和噪聲.從而延長使用壽命.因直接更改『磁碟』固件,所以一次更改永遠有效

  1. 啟動HD Tune Pro
  2. 『自動噪聲管理』AAM,按Test測速
  3. 勾選Enabel
  4. 設定速度『低噪聲』Low noise(128)与『高噪聲』High performance(254)之间选择.
  5. 按Set設定

 

SEAGATE希捷SKYHAWK酷鷹2TB監控盤

SEAGATE希捷SKYHAWK酷鷹2TB監控盤
SEAGATE希捷SKYHAWK酷鷹2TB監控盤
SEAGATE希捷SKYHAWK酷鷹2TB監控盤
SEAGATE希捷SKYHAWK酷鷹2TB監控盤
SEAGATE希捷SKYHAWK酷鷹2TB監控盤
SEAGATE希捷SKYHAWK酷鷹2TB監控盤

近日使用CrystalDiskInfo檢測希捷固態混合磁碟.『磁碟健康狀態』出現黃色警告.而『重定位磁區計數』以達100即已出現壞道.此『磁碟』只用一年多D.睇來只能更換『磁碟』.因為要儘量保障數據安全.聽講HGST『磁碟』故障率最低但價格稍高.而希捷酷鷹為監控而設計.可以長時間大量讀寫數據而不出故障.而且價格比HGST稍低.

網上落單盒裝全新行貨.安裝後分區並格式.使用CrystalDiskMark測『讀寫』速度均接近150MB/S,『機械磁碟』達如此高速,實超我預期.

性能 簡介
品牌 SEAGATE希捷
系列 SKYHAWK酷鷹
型號 ST200VX008
接口 SATA3 SATA 6GBS
轉速 5900轉
容量 2TB
級別 64路7*24全天監控級
讀取READ 149.4MB/S
寫入WRITE 148.6MB/S

磁碟檢測CrystalDiskInfo

磁碟檢測CrystalDiskInfo
磁碟檢測CrystalDiskInfo

S.M.A.R.T即『自監測分析與報告技術』據我記憶所及應在上世紀未出現.當時並不清其用途.近日使用CrystalDiskInfo檢測磁碟健康狀態.其工作原理就是讀取磁碟S.M.A.R.T.資訊.磁碟工作其間會自動監測電機、電路、磁盤、磁頭狀態進行分析與記錄.此技術支持『HDD,SSD, SSHD,USB,RAID,NVME』磁碟.在檢測『希捷固態混合磁碟』出現黃色警號.『重定位磁區計數』以達100遠超臨界值36.亦即壞道出現.雖然使用HD Tune Pro進行『錯誤掃描』未見壞區,這只是由於壞道被映射到後備扇區.屬于『磁碟』自我修復.當『磁碟』發現壞區時,便將其物理空間指向到特定無損區域進行重映射修復,從而使硬盤出現壞區仍可使用.但當過多壞道出現.後備扇區消耗殆盡而無法再重映射時,就會出現壞區並不可修復.若繼續使用必造成數據損失.此『磁碟』只使用一年多D睇來質量確實有問題.

警訊 簡介
綠色 安全使用
黃色 危險警告,更換磁碟轉移數據
紅色 死亡邊緣,備份數據暫停使用

 

ID 屬性名稱 簡介
01 底層資料讀取錯誤率 磁頭讀取數據時錯誤率.只有SSD此值為0
03 碟片啟動時間
04 馬達啟動關閉次數
05 重定位磁區計數 出現壞區.若數值不斷整長說面壞道擴散
07 尋道錯誤率
09 總通電時間 用於確定是否返修盤
0A 啟動重試次數 電機重啟量.有可能是USB電壓不足
0C 開關電源次數
B8 終端校驗出錯
BB 報告不可糾正錯誤
BC 通訊超時 磁碟無法連接.若非零則可能是電源或獲數據線問題
BD 磁頭寫入高度
BE 氣流溫度
BF 加速度錯誤率
C0 電源關閉磁頭收回計數
C1 載入/卸載迴圈計數
C2 硬碟溫度
C5 等候重定的磁區計數 假性壞區可修復
C6 無法校正的磁區計數 不修復壞區量
C7 UltraDMA高速傳輸模式錯誤次數

 

磁碟基準測試讀寫性能CrystalDiskMark

 

磁碟基準測試讀寫性能CrystalDiskMark

CrystalDiskMark用於測量各種存儲『HDD、SSD、USB』磁碟速度基準軟件.它由日本開發商Hiyohiyo開發而且是免費軟件.我手頭上只有幾款磁碟.讀寫速度差距非常之大.基本上都以SSD>HDD>USB這樣排列.從下表可睇到『固態混合型』HDD+SSD讀取快寫入慢.而最慢則是USB移動磁碟.

磁碟 類型 讀MB/S 寫MB/S
THNSNH128GBST : 128.0 GB SSD 548.1 502.7
ST2000VX008-2E3164 : 2000.3 GB HDD 149.4 148.6
ST500LX025-1U717D : 500.1GB SSHD 171.3 57.67
ST1000LM024 HN-M101MBB : 1000.2 GB HDD+USB3.0 39.10 36.28
  1. 啟動CrystalDiskMark可以睇到有三個下拉菜單.從左至右分別如下
  2. 測試次數,以最高速度為准,非平均速度.
  3. 讀寫數據量.越大越準確但時間越長.這裡1GB=1000MB、1MB=1000KB非1024
  4. 選擇測試『磁碟』
  5. 測試『間隔時間』默認為5秒無需修改
  6. 『佇列和執行緒』自定義下列四組測試
  7. 按ALL執行所有讀寫測試
測試 簡介
ALL 執行所有測試
Seq Q32T1 順序讀寫測試32隊列,1線程測試
4KiB Q8T8 4KiB分頁隨機讀寫測試8『佇列』,1『執行緒』
4KiB Q32T1 4KiB分頁隨機讀寫測試32『佇列』,1『執行緒』
4KiB Q1T1 4KiB分頁隨機讀寫測試1『佇列』,1『執行緒』

 

 

Windows10啟用全新磁碟分區並格式化

『儲存空間』建立分區並格式化

『磁碟管理』建立分區並格式化

若你購買全新磁碟非返修盤,必定是未建立分區.當你連結電源與SATA還需要建立分區.在Windows10有兩種方法分別是『儲存空間』與『磁碟管理』

使用『儲存空間』建立分區並格式化

  1. 控制台->所有控制台項目->儲存空間
  2. 建立新集區與儲存空間
  3. 『名稱』隨意填漢字也可
  4. 『磁碟機代號』不要選『A:』與『B:』應選『D:』或其之後盤符
  5. 『檔案系統』只可選NTFS
  6. 『備緩類型』選擇『簡單(無備緩)』.若使用其它備緩raid 1鏡像會浪費空間
  7. 『儲存空間大小(上限)』填總『集區容量』即可
  8. 點擊『建立儲存空間』.等待『格式化儲存空間』後即可.

使用『磁碟管理』建立分區並格式化

  1. 控制台->所有控制台項目->系統管理工具->電腦管理
  2. 電腦管理(本機)->存放裝置->磁盤管理
  3. 右擊『磁碟』->『格式化』
  4. 『磁碟區標簽』隨意填寫
  5. 『檔案系統』維一選擇NTFS
  6. 『配置單位』使用預設即可.或者選4096
  7. 勾選『執行快速格式化』
  8. 按『確定』等待『格式化』即可

點陣字體生成器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 複製『音效』鏈接

 

企業級雙頻千兆無線路郵器

企業級雙頻千兆無線路郵器
企業級雙頻千兆無線路郵器

近日無線(wifi)路郵壞左.剛好有只TP-LINK 150M無線路郵.但手機傳送速度很慢.在淘寶上睇到MERCURY-MER1200G『企業級千兆無線路郵』帶四條全向天線.個老細話與TP-Link同一間廠出.而且價格低廉所以馬上落單.

到手後所謂千兆只是『5G最高867Mbps』+『2.4G最高300Mbps』.並非正真千兆路郵.不過信號超強而且帶有TURBO按鈕.用於擴大路郵器無線覆蓋範圍並增強無線信號穩定性.設定時要啟用UPnP否則影響BT下載速度.而且無USB接口.是否能長時間運行還有待測試.

 

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;

}

遊戲建模-平面碰撞

遊戲建模-平面碰撞

平面是3D圖形學重要部分.平面有兩個重要概念.

1.3D平面都無窮遠延伸

2.所有平面都將整個空間分成兩個半空間.正半空間為法線指向空間,負半空間則是令一則空間.這個特性對於碰撞算法重要

平面描敘如下:

平面法線向量:n=(a,b,c)

平面任意點:p0=(x0,y0,z0)

平面任意點:p=(x,y,z)

平面與原點距離:d平面位移常量(plane-shift constant)

因為法線n與向量(p0->p)垂直. 因兩垂直向量點積為零:

n * (p0->p) = 0

轉為分量表示

(a,b,c)*(x-x0,y-y0,z-z0)=0

轉為『頂點』與『法線』表示

a(x-x0)+b(y-y0)+c*(z-z0)=0

ax+by+cz+(-ax0-by0-cz0)=0

令d=-ax0-by0-c*z0

『平面方程』如下:

ax+by+c*z+d=0

 

這足以定義平面結構

typedef struct PLANE3D_TYP{

VECTOR3D n;//平面法線向量(不必是單位向量)

float dist;//平面到原點最近距離

POINT3D p0;//平面上最近原點的點

}PLANE3D,*PLANE3D_PTR;

 

判斷『點』位於『平面』那個半空

3D世界中『視點』、『角色』並不能穿越牆壁.要做到這步需判斷點位於平正空間(法線指向)還是負空間.

要判斷這點需要下面的平面方程

hs=a(x-x0)+b(y-y0)+c*(z-z0)

只需將點(x,y,z)帶入方程中並計算結果

如果hs=0則該點位於平面之上

如果hs>0則該點位於平面正半空間(法線指向)中

如果hs<0則該點位於平面負半空間中

float Compute_Point_In_Plane3D(PLANE3D_PTR plane,VECTOR3D_PTR pt){

float hs = plane->A * pt->x + plane->B * pt->y + plane->C * pt->z + plane->D;

return(hs); // 返回半空間值

}

 

計算平面與直線之相交點(3D空間)

平面『頂點』與『法線』方程如下:

a(x-x0)+b(y-y0)+c*(z-z0)=0

3D直線方程如下:

(x-x0)/a = (y-y0)/b = (z-z0)/c

計算多邊形法線與直線方向點積

double a = plane->n % (line->v);

若為零則直線與平面平行

VECTOR3D Intersect;

if (a == 0)

Intersect = line->p0;

計算相交點

Intersect = line->p0 – (line->v) * ((plane->n % line->p0 + plane->D) / a);

3D線段與3D平面交點函式:

bool Intersect_Line3D_Plane3D(PLANE3D_PTR plane, PARMLINE3D_PTR line,POINT3D_PTR pt){

// 計算直線方向與多邊形法線點積

double a = plane->n % (line->v);

if (a == 0)

return false;

// 計算相交點

*pt = line->p0 – (line->v) * ((plane->n % line->p0 + plane->D) / a);

return true;

}

 

計算頂點是否為於多邊形之上,

首先計算頂點與多邊形所有頂點之間角度總和.如果該頂點位於多邊形之上.那麼此頂點與多邊形所有頂點之間角度總和將等於或接近2PI

bool Intersect_Vector3D_Polygon3D(VECTOR3D_PTR polygon, int num,VECTOR3D_PTR v){

VECTOR3D segment1, segment2;// 頂點 到 多邊形頂點 矢量

double length1, length2;// 矢量長度

double sumAngle = 0;// 矢量之間角度總和

double cosAngle = 0;// 兩矢量余弦角

// 編曆多邊形所有頂點

for (int index = 0; index < num; ++index)     {

segment1 = polygon[index] – *v;

segment2 = polygon[(index+1) % num] – *v; // % num 確保數值環形加一

length1 = Length_VECTOR3D(&segment1);

length2 = Length_VECTOR3D(&segment2);// 矢量長度

//檢查頂點是否落在多邊形邊界上

if ( length1 * length2 <= 0.0000001f){

// 多邊形邊界被認為是多邊形內部

sumAngle = PI2; // pai * 2

break;

}

// 計算上述兩個矢量之間余弦角

cosAngle = (segment1 % segment2) / (length1 * length2);

// 將計算結果累加入角度總和

sumAngle = sumAngle + acosf(cosAngle);

}

if ((sumAngle <= PI2 + 0.0000001f) && (sumAngle >= PI2 – 0.0000001f))

return true;// 頂點與多邊形發生碰撞

else

return false;

return true;

}

 

使用三個頂點初始化(定義)3D平面!

void Init_PLANE3D(PLANE3D_PTR plane,VECTOR3D_PTR va,VECTOR3D_PTR vb,VECTOR3D_PTR vc){

VECTOR3D normalA = *vc – *va;// 計算頂點C->A向量

VECTOR3D normalB = *vc – *vb;// 計算頂點C->B向量

plane->n = Cross_VECTOR3D(&normalA, &normalB);// 計算兩個3D向量叉積

plane->D = Dot_VECTOR3D(&(-(*va)), &plane->n); //距離等於va求返後與n求點積

}

遊戲建模-矢量運算

遊戲建模-矢量運算

矢量(VECTOR)也稱『向量』其實是抽象『量』它在遊戲世界被頂義為『位置』『速度』『磨擦』『方向』『點』等等. 矢量通常有3種

矢量 分量 簡序
2D矢量 x,y 2D空間
3D矢量 x,y,z 3D空間
4D矢量 x,y,z,w 3D空間w總是為1.用於方陣運算

首先定義3D矢量結構:

typedef struct VECTOR3D_TYP{

float x,y,z;

}VECTOR3D,*VECTOR3D_PTR;

下面是3D矢量(VECTOR)運算函式庫.

 

計算3D矢量長度,矢量長度也稱為範數(norm).將其理解為原點(0,0,0)到矢量(x,y,z)之距離

float Length_VECTOR3D(VECTOR3D_PTR va){

return( (float)sqrtf(va->xva->x + va->yva->y + va->z*va->z) );

}

 

3D矢量進行歸一化(normalize),也就使其長度縮放為1,但同時方向保持不變.它通常被用於無需理會長度之運算如『方向』

void Normalize_VECTOR3D(VECTOR3D_PTR va){

// 1.首先計算長度

float length = sqrtf(va->xva->x + va->yva->y + va->z*va->z);

//2.矢量除以長度得到歸一化矢量

va->x= va->x/length;

va->y= va->y/length;

va->z= va->z/length;

}

 

3D矢量點積運算可以理解為矢量乘法.先將各分量相乘後再相加得到一個標量

float operator%(VECTOR3D va, VECTOR3D vb){

return((va.x * vb.x) + (va.y * vb.y) + (va.z * vb.z));

}

float Dot_VECTOR3D(VECTOR3D_PTR va, VECTOR3D_PTR vb){

return( (va->x * vb->x) + (va->y * vb->y) + (va->z * vb->z) );

}

叉積是另一種矢量乘法,叉積運算最小要有3個分量才有效.

VECTOR3D operator^(VECTOR3D va, VECTOR3D vb){

VECTOR3D vn;

vn.x = ((va.y * vb.z) – (va.z * vb.y));

vn.y = -((va.x * vb.z) – (va.z * vb.x));

vn.z = ((va.x * vb.y) – (va.y * vb.x));

return(vn);

}

VECTOR3D Cross_VECTOR3D(VECTOR3D_PTR va, VECTOR3D_PTR vb){

VECTOR3D vn;

vn.x =  ( (va->y * vb->z) – (va->z * vb->y) );

vn.y = -( (va->x * vb->z) – (va->z * vb->x) );

vn.z =  ( (va->x * vb->y) – (va->y * vb->x) );

return(vn);

}

 

計算兩個3D矢量va和vb之間夾角余弦值

float CosTh_VECTOR3D(VECTOR3D_PTR va, VECTOR3D_PTR vb){

return(Dot_VECTOR3D(va,vb)/(Length_VECTOR3D(va)*Length_VECTOR3D(vb)));

}

 

 

計算三角形法線

void Normal_VECTOR3D(VECTOR3D_PTR normal,VECTOR3D_PTR va, VECTOR3D_PTR vb, VECTOR3D_PTR vc){

VECTOR3D u, v, n;

float length;

u = *vb – *va;

v = *vc – *va;

n = u^v;//Cross_VECTOR3D(&u, &v, &n);// 計算叉積

length = sqrtf(n.xn.x + n.yn.y + n.z*n.z);

normal->x = n.x/length;

normal->y = n.y/length;

normal->z = n.z/length;

}

 

將兩個3D矢量相加(va + vb),如用於位置移動

VECTOR3D operator+(VECTOR3D va, VECTOR3D vb){

VECTOR3D vsum;

vsum.x = va.x + vb.x;

vsum.y = va.y + vb.y;

vsum.z = va.z + vb.z;

return (vsum);//返回相加結果!

}

 

將兩個3D矢量相減(va – vb),如用於位置移動

VECTOR3D operator-(VECTOR3D va, VECTOR3D vb){

VECTOR3D vdiff;

vdiff.x = va.x – vb.x;

vdiff.y = va.y – vb.y;

vdiff.z = va.z – vb.z;

return(vdiff);     //返回相減向量!

}

 

3D矢量反數,如返轉方向

VECTOR3D operator-(VECTOR3D v){

VECTOR3D negation;

negation.x = -v.x ;

negation.y = -v.y ;

negation.z = -v.z ;

return(negation);     //返回反數向量!

}

 

使用縮放因子k對3D矢量進行縮放如:位置=位置+速度*時間

VECTOR3D operator*(VECTOR3D va, float k){

VECTOR3D vscaled;

vscaled.x = k * va.x;

vscaled.y = k * va.y;

vscaled.z = k * va.z;

return vscaled;// 返回縮放後向量

}

 

3D矢量賦值

void Init_VECTOR3D(VECTOR3D_PTR v, float x,float y,float z) {

v->x = x;  v->y = y; v->z = z;

}

 

3D矢量拷貝

Copy_VECTOR3D(VECTOR3D_PTR vdst, VECTOR3D_PTR vsrc){

vdst->x = vsrc->x;  vdst->y = vsrc->y; vdst->z = vsrc->z;

}

 

3D矢量比較

bool operator==(VECTOR3D vdst, VECTOR3D vsrc){

if (vdst.x == vsrc.x && vdst.y == vsrc.y && vdst.z == vsrc.z)

return true;

else

return false;

}

 

3D向量不等比較

bool operator!=(VECTOR3D vdst, VECTOR3D vsrc)

{

if (vdst.x != vsrc.x ||         vdst.y != vsrc.y ||vdst.z != vsrc.z)

return true;

else

return false;

}

 

向量歸零(3D向量)無方向,無距離,代表位於原點

void Zero_VECTOR3D(VECTOR3D_PTR v) {

v->x = v->y = v->z = 0.0f;

}

計算兩矢量之間夾角

float Angle_VECTOR3D(VECTOR3D_PTR va, VECTOR3D_PTR vb){

return acosf(*va % *vb);

}

角度轉弧度

#define DEG_TO_RAD(ang) ((ang)*PI/180.0)

弧度轉角度

#define RAD_TO_DEG(rads) ((rads)*180.0/PI)

隨機數 x:下限,  y:上限.

#define RAND_RANGE(x,y) ( (x) + (rand()%((y)-(x)+1)))

隨機數: -1.0 ~ 1.0

#define FRAND_RANGE1()   (((float)rand()-(float)rand())/RAND_MAX)

隨機數 0~1

#define FRAND_RANGE() ((float)rand() / (float)RAND_MAX)

遊戲建模之邊界盒

遊戲建模之邊界盒

邊界球』雖然可解卻大部3D模型『碰撞測試』問題.單若3D模型是長條形則不適合如『牆體』『長劍』.『軸對齊坐標邊界盒』axis-aligned bounding box(AABB)引入則可解決這類問題.每個『邊界盒』均由3D模型『中心點』與『最遠點』、『最近點』所組成.通過遍歷每個3D模型頂點找出XYZ三軸上最遠頂點.定義3D邊界盒:

typedef struct AABB_TYP {

VECTOR3D center;// 中心點

VECTOR3D far;// 最遠

VECTOR3D near;// 最近

}AABB, *AABB_PTR;

 

『3D模型』最遠點與最近點可遍歷所有3D模型頂點獲得:

1.最遠點與最近點清零

VECTOR3D far = {0,0,0};// 最遠點

VECTOR3D near = {0,0,0};// 最近點

2.遍歷所有3D頂點

for (int index = 0; index < vertex_num; ++index){

3.XYZ三軸最遠點

if (far.x > vertex_array[index].x)

vertex_array[index].x = far.x;

if (far.y > vertex_array[index].y)

vertex_array[index].y = far.y;

if (far.z > vertex_array[index].z)

vertex_array[index].z = far.z;

4.XYZ三軸最近點

if (near.x > vertex_array[index].x)

vertex_array[index].x = near.x;

if (near.y > vertex_array[index].y)

vertex_array[index].y = near.y;

if (near.z > vertex_array[index].z)

vertex_array[index].z = near.z;

}

 

判斷頂點是否為於邊界盒

bool Compute_Point_In_AABB(AABB_PTR aabb, VECTOR3D_PTR point)

{

if ((point->x >= aabb->center.x + aabb->near.x && point->x <= aabb->center.x + aabb->far.x) &&

(point->y >= aabb->center.y + aabb->near.y && point->y <= aabb->center.y + aabb->far.y) &&

(point->z >= aabb->center.z + aabb->near.z && point->z <= aabb->center.z + aabb->far.z) )

return true;

return false;

}

Visual Studio之編譯宏定義

Visual Studio之編譯宏定義

在未有win64出現之前只需要編譯x86程式.但出現win64後需要分別編譯x86與x64兩個版本.你需要分開進行編譯.

Visual Studio分別為平臺生成全域宏:

x86下編譯定義_WIN32宏

x64下編譯定義_WIN64宏

#ifdef _WIN64

// x64平臺

#else

// x86平臺

#endif

 

Visual Studio調試模式生成全域宏:

調試模式下編譯定義_DEBUG宏

發行模式下編譯無_DEBUG宏定義

#ifdef  _DEBUG

//調試模式

#else

//發行模式

#endif

 

DirectX SDK下載與設定

DirectX SDK下載與設定

DirectX本是用於取替OpenGL給遊戲廠商使用.但遊戲廠商集體反抗.才另microsoft支持OpenGL.而且自DirectX6全面使用COM模型開發.DirectX是設計用於『影片』『聲音』『輸入』『網絡』抽象軟件界面結口.DirectX接口由microsoft定義.而底層則有驅動程式與硬件進行通信.開發者完全無需理會硬件之間差異.如果硬件不支持則由DirectX進行模擬.

  1. DirectX SDK 下載『DirectX Software Development Kit
  2. 下載『exe』運行後自動進行解壓.
  3. 其實你只需要『Lib』與『Include』這兩個『資料夾』.『Lib』下面分別有『x86』與『x64』
  4. 接下來讓工程生成『DirectX』目錄並複製『Lib』與『Include』下所有『頭文檔』與『庫文檔』
  5. 包含『頭文檔』

#include “..\DirectX\Include\ddraw.h”

#include “..\DirectX\Include\dinput.h”

#include “..\DirectX\Include\dsound.h”

  1. 包含『庫文檔』你編譯時需要分開x86與x64的LIB文檔

#ifdef  _WIN64

#pragma comment(lib, “DirectX\Lib\x64\ddraw.LIB”)

#pragma comment(lib, “DirectX\Lib\x64\dinput8.LIB”)

#pragma comment(lib, “DirectX\Lib\x64\dxguid.LIB”)

#pragma comment(lib, “DirectX\Lib\x64\dsound.LIB”)

#else

#pragma comment(lib, “DirectX\Lib\x86\ddraw.LIB”)

#pragma comment(lib, “DirectX\Lib\x86\dinput8.LIB”)

#pragma comment(lib, “DirectX\Lib\x86\dxguid.LIB”)

#pragma comment(lib, “DirectX\Lib\x86\dsound.LIB”)

#endif

 

上面方法是指定工程目錄.令外你還可制定Visual Studio搜索目錄:

  1. 設定『項目』『屬性』『VC++目錄』.然後分別設定『Include目錄』與『程式庫目錄』
  2. 『Include目錄』包含『D:\ DirectX\Include』.
  3. Win32平臺『程式庫目錄』包含『D:\DirectX\Lib\x64』
  4. Win64平臺『程式庫目錄』包含『D:\DirectX\Lib\x86』
  5. 在包含『頭文檔』與『庫文檔』時無需設定相對路徑

 

在DirectX8之前分別使用DirectSound和DirectMusic處理音頻播放. DirectSound用于處理聲波回放和捕足,而DirectMusic則是加載和播放所有聲音主要組件.但在DirectX8之後合平DirectXAudio組件.若你需要播放MIDI睇『DirectMusic之播放MIDI

 

 

 

MD2文檔讀取與解析

MD2文檔讀取與解析
MD2文檔讀取與解析
MD2文檔讀取與解析

.MD2文檔由美國id Software為其QuakeII開發3D模型.雖然它無骨架但它讀取簡單,而最重要是可以通過Internet穩到大量MD2文檔.根據模型規範.MD2格式最多含198動畫幀編號為0~197. 動畫幀將用於組成『步行』『功擊』『站立』『死亡』等動畫.MD2文檔 通常有下面幾個文檔組成:

文檔 簡述
TRIS.MD2 角色3D模型
WEAPON.MD2 武器3D模型
TRIS.PCX 角色皮膚也就是紋理圖檔,通常為8Bit『256色』長寬為256*256保存為.PCX格式
WEAPON.PCX 武器皮膚

 

MD2格式 簡述
Head 文檔頭部格式3D模型描述
Data 3D數據

 

MD2文檔頭部格式 MD2_HEADER 簡述
int id; MD2文檔標記’IDP2′,用於判斷是否MD2文檔
int version; 版本號總為8
int skin_width 皮膚紋理圖寬度.此值相對於紋理座標textcoord,通常為256
int skin_height; 皮膚紋理圖高度.此值相對於紋理座標textcoord,通常為256
int frame_size; 每幀字節總量
int skin_num; 皮膚紋理總量,忽略.
int vertex_num; 單幀頂點量.每幀字節量均相同.有些教科書搞錯左此值.
int textcoord_num; 紋理座標總量
int polygon_num; 多邊形總量
int command_num; OpenGL命令總量,忽略
int frame_num; 幀總量id softwarek規定為198幀編號為0~197.有些模型可能多於此值
int skin_offset; 皮膚pcx偏移量每個64字節.因包含QuakeII專用路徑.忽略.
int textcoord_offset; 紋理座標偏移量
int polygon_offset; 多邊形偏移量
int frame_offset; 幀偏移量
int command_offset; 命令偏移量忽略
int end_offset; 結尾偏移量.相當於文檔長度

MD2紋理座標通過(data + textcoord_offset)得到,結構如下:

typedef struct MD2_TEXTCOORD_TYP {

WORD u, v;

}MD2_TEXTCOORD,*MD2_TEXTCOORD_PTR;

 

MD2多邊形通過(data + polygon_offset)得到,保存頂點與紋理索引.結構如下:

typedef struct MD2_POLYGON_TYP {

WORD vertex_index[3];// 頂點索引

WORD textcoord_index[3];// 紋理座標索引

}MD2_POLYGON,*MD2_POLYGON_PTR;

 

MD2關鍵幀通過(data + frame_offset)得到,幀頭包含對頂點進行縮放與平移因子.頂點數組長度由vertex_num確定.結構如下:

typedef struct MD2_FRAME_TYP{

float scale[3];// 縮放

float translate[3];// 平移

char  name[16];// 動畫幀ASCII名

MD2_POINT list[1];// 頂點數組

}MD2_FRAME,*MD2_FRAME_PTR;

 

MD2頂點包含於關鍵幀裡,每個頂點由『xyz座標』與『法線索引』組成.『法線索引表』你需要自已構建.法線將在運行時計算所以忽略.結構如下:

typedef struct MD2_POINT_TYP {

BYTE v[3];// xyz頂點

BYTE noraml_index;// 頂點法線索引,此值忽略

}MD2_POINT,*MD2_POINT_PTR;

 

MD2動畫,用於控制模型動作速度,以秒為單位.結構如下:

typedef struct MD2_ANIMATION_TYP{

int   start;  // 起始幀索引

int   end;    // 結束幀索引

float irate;   // 插幀頻率(0.0f~1.0f),1.0f表示不插幀

float speed;   // 用於控制動畫播放時間,一般設為0~10秒

} MD2_ANIMATION, *MD2_ANIMATION_PTR;

動畫索引 動作名 幀索引 插幀頻率(幀) 播放時間(秒)
0 STANDING_IDLE站立 0-39 0.5f 4
1 RUN奔跑 40-45 0.5f 4
2 ATTACK開火/攻擊 46-53 0.5f 2
3 PAIN1 54-57 0.5f 4
4 PAIN2 58-61 0.5f 4
5 PAIN3 62-65 0.5f 4
6 JUMP跳躍 66-71 0.5f 5
7 FLIP手勢 72-83 0.5f 3
8 SALUTE  敬禮 84-94 0.5f 5
9 TAUNT 嘲笑 95-111 0.5f 5
10 WAVE 揮手致意 112-122 0.5f 5
11 POINT 指向它人 123-134 0.5f 5
12 CROUCH STAND   蹲伏-不動 135-153 0.5f 5
13 CROUCH WALK    蹲伏-行走 154-159 0.5f 5
14 CROUCH ATTACK  蹲伏-開火 160-168 0.5f 5
15 CROUCH_PAIN    蹲伏-被擊打 169-172 0.5f 5
16 CROUCH_DEATH  蹲伏-死亡 173-177 0.25f 5
17 DEATH_BACK    死亡-後趴 178-183 0.25f 5
18 DEATH_FORWARD 死亡-前趴 184-189 0.25f 5
19 DEATH_SLOW   緩慢死亡 190-197 0.25f 5

現在需要MD2結構用於保存3D模型數據

MD2模型數據結構 簡述
MD2_ANIMATION animation_array[20] 動畫,MD2通常有20種不同動作
int animation_num; 動畫總量
int frame_num; 幀量id softwarek規定198幀
MD2_POLYGON_PTR polygon_array; 多邊形列表
int polygon_num; 多邊形總量
VECTOR3D_PTR  vertex_array; 頂點數組 長度=幀總量*單幀頂點量
int vertex_num; 單幀頂點量
VECTOR2D_PTR textcoord_array; 紋理座標數組,只有一組,由所有幀共享
int textcoord_num; 紋理座標總量
TEXTURE texture_array[8] 紋理skin
int texture_num; 皮膚紋理圖總量
float radius_avg; 平均半徑
float radius_max; 最大半徑

在遊戲中低級單位都一至如步兵.需要單獨保存位置、面方、動畫等狀態.需要一個新結構對MD2進行封裝.以共享數據節約空間.並且為讓動畫流暢需要對關鍵幀進行插值(插入其它幀).

3D模型結構定義(MODEL3D) 簡述
int state; 狀態, 死亡/存活
int attr; 屬性
int color; 沒有紋理時使用顏色 RGB(255,255,255)
VECTOR3D pos; 位置
VECTOR3D rot; 旋轉
int anim; 動畫索引
bool  loop; 循環播放
float speed; 動畫速度,(0.0f~1.0f)數值越小速度越慢,數值越大速度越快
float frame; 當前幀索引
float irate; 插幀頻率(0.0f~1.0f),1.0f表示不插幀
float count; 插幀計數器
bool complete; 動畫完成播放標記
VECTOR3D_PTR vertex_array; 單幀頂點量
VECTOR3D_PTR normal_array; 法線數組
TEXTURE_PTR texture; 指向紋理
MD2_PTR md2; 指向MD2模型

在載入數據之前還需要定義幾個頂點控制

#define MD2_INVERT_X       0x0001// 反轉X軸

#define MD2_INVERT_Y       0x0002// 反轉Y軸

#define MD2_INVERT_Z       0x0004// 反轉Z軸

#define MD2_SWAP_XY        0x0010// 交換XY軸

#define MD2_SWAP_YZ        0x0020// 交換YZ軸

#define MD2_SWAP_XZ        0x0040// 交換XZ軸

#define MD2_INVERT_WINDING_ORDER  0x0100 // 反轉環繞順序

基本結構已定義可以讀取數據並分釋:

bool Load_Data_MD2(MD2_PTR md2, PBYTE data, int size,float scale,DWORD flag ){

1.讀取MD2頭部,data為文檔數據

MD2_HEADER_PTR    header = (MD2_HEADER_PTR)data;

2.判斷是否MD2模型

if (header->id != ‘2PDI’) // MD2文檔標記

return false;

3.判斷版本號總為8

if (header->version != 8)

return false;

4.幀總量id softwarek規定198幀

md2->frame_num = header->frame_num;

5.皮膚紋理總量設為0

md2->texture_num   = 0;

4.多邊形總量

md2->polygon_num = header->polygon_num;

5.讀取幀頂點量

md2->vertex_num = header->vertex_num;

6.分配多邊形記憶體

md2->polygon_array = (MD2_POLYGON_PTR)malloc(md2->polygon_num*sizeof(MD2_POLYGON));

7.分配頂點記憶體

md2->vertex_array = (VECTOR3D_PTR)malloc(md2->frame_num * md2->vertex_num * sizeof(VECTOR3D));

8.分配紋理座標記憶體.以繪畫三角形進行排列

md2->textcoord_array = (VECTOR2D_PTR)malloc(md2->polygon_num * 3 * sizeof(VECTOR2D));

9.遍歷每一幀

for (int findex = 0; findex < md2->frame_num; ++findex){

MD2_FRAME_PTR frame;// 讀取幀

frame = (MD2_FRAME_PTR)(data+header->frame_offset + header->frame_size * findex);

10.遍歷每一頂點

for (int vindex = 0; vindex < md2->vertex_num; ++vindex){

VECTOR3D v ;

11.對頂點座標進行縮放和平移

v.x = frame->list[vindex].v[0] * frame->scale[0] + frame->translate[0];

v.y = frame->list[vindex].v[1] * frame->scale[1] + frame->translate[1];

v.z = frame->list[vindex].v[2] * frame->scale[2] + frame->translate[2];

12.跟據傳入參數進行縮放

if (scale != NULL)

v = v * scale;

13.反轉座標軸

if (flag & MD2_INVERT_X)

v.x = -v.x;

if (flag & MD2_INVERT_Y)

v.y = -v.y;

if (flag & MD2_INVERT_Z)

v.z = -v.z;

14.交換座標軸

float temp;

if (flag & MD2_SWAP_YZ)

SWAP(v.y, v.z, temp);

if (flag & MD2_SWAP_XZ)

SWAP(v.x, v.z, temp);

if (flag & MD2_SWAP_XY)

SWAP(v.x, v.y, temp);

15.將頂點插入列表中

md2->vertex_array[findex*md2->vertex_num + vindex] = v;

}

}

16.讀取紋理座標

MD2_TEXTCOORD_PTR textcoord = (MD2_TEXTCOORD_PTR)(data + header->textcoord_offset);

17.讀取多邊形

MD2_POLYGON_PTR polygon = (MD2_POLYGON_PTR)(data+header->polygon_offset);

18.遍歷多邊形

for (int pindex = 0; pindex<header->polygon_num; ++pindex){

if (flag & MD2_INVERT_WINDING_ORDER) {

19.反轉頂點環繞順序

md2->polygon_array[pindex].vertex_index[0] = polygon[pindex].vertex_index[2];

md2->polygon_array[pindex].vertex_index[1] = polygon[pindex].vertex_index[1];

md2->polygon_array[pindex].vertex_index[2] = polygon[pindex].vertex_index[0];

// 反轉紋理座標環繞順序

md2->polygon_array[pindex].textcoord_index[0] = polygon[pindex].textcoord_index[2];

md2->polygon_array[pindex].textcoord_index[1] = polygon[pindex].textcoord_index[1];

md2->polygon_array[pindex].textcoord_index[2] = polygon[pindex].textcoord_index[0];

}

else

{// 不改變頂點環繞順序

md2->polygon_array[pindex].vertex_index[0] = polygon[pindex].vertex_index[0];

md2->polygon_array[pindex].vertex_index[1] = polygon[pindex].vertex_index[1];

md2->polygon_array[pindex].vertex_index[2] = polygon[pindex].vertex_index[2];

// 不改變紋理座標環繞順序

md2->polygon_array[pindex].textcoord_index[0] = polygon[pindex].textcoord_index[0];

md2->polygon_array[pindex].textcoord_index[1] = polygon[pindex].textcoord_index[1];

md2->polygon_array[pindex].textcoord_index[2] = polygon[pindex].textcoord_index[2];

}

20.以繪畫順序讀取三角形頂點紋理座標,無需在提取幀是在生成.

int tindex0 = md2->polygon_array[pindex].textcoord_index[0];

int tindex1 = md2->polygon_array[pindex].textcoord_index[1];

int tindex2 = md2->polygon_array[pindex].textcoord_index[2];

21.讀取紋理座標轉換為0.0f~1.0f

md2->textcoord_array[pindex*3+0].u = (float)textcoord[tindex0].u / (float)header->skin_width;

md2->textcoord_array[pindex*3+0].v = (float)textcoord[tindex0].v / (float)header->skin_height;

md2->textcoord_array[pindex*3+1].u = (float)textcoord[tindex1].u / (float)header->skin_width;

md2->textcoord_array[pindex*3+1].v = (float)textcoord[tindex1].v / (float)header->skin_height;

md2->textcoord_array[pindex*3+2].u = (float)textcoord[tindex2].u / (float)header->skin_width;

md2->textcoord_array[pindex*3+2].v = (float)textcoord[tindex2].v / (float)header->skin_height;

}

22.遍歷每個頂點計算模型半徑

md2->radius_avg = 0;// 平均半徑

md2->radius_max = 0;// 最大半徑

for (int vindex = 0; vindex < header->vertex_num; ++vindex){

float dist;

dist = (float)sqrt(md2->vertex_array[vindex].x * md2->vertex_array[vindex].x +

md2->vertex_array[vindex].y * md2->vertex_array[vindex].y +

md2->vertex_array[vindex].z * md2->vertex_array[vindex].z);

md2->radius_avg = md2->radius_avg + dist;// 累加半徑

if (dist > md2->radius_max)

md2->radius_max = dist;// 最大半徑

}

23.計算平均半徑

md2->radius_avg = md2->radius_avg / header->vertex_num;//

23.載入默認動畫序列. md2_animations[]數組跟據上面動畫列表定義

for (int aindex = 0; aindex < (sizeof(md2_animations) / sizeof(MD2_ANIMATION)); ++aindex)

md2->animation_array[aindex] = md2_animations[aindex];

return true;

}

 

紋理需要另外載入,紋理高寬需為2x2x.如256256、128*128

bool Load_Texture_MD2(MD2_PTR md2, const char * path){

int index = md2->texture_num; // 索引

++md2->texture_num;// 紋理數量

Load_File_Texture(&md2->texture_array[index], path);// 載入

Bind_Image_Texture(&md2->texture_array[index]);// 綁定

return true;

}

 

3D模型動畫平滑運動需要幀插值.『當前幀』frame_curr帶有小數在0~127之間.按權重插值公式如下:

vi=v0(1-value) + v1value

逐幀提取函式:

void Extract_Frame_MD2(MD2_PTR md2,VECTOR3D_PTR  vertex_array,VECTOR3D_PTR normal_array,float frame_curr){

MD2_POLYGON_PTR polyon;

int vindex;

1.判斷幀是否插值得到

float ivalue = frame_curr – (int)frame_curr;

if (ivalue == 0.0f) {//判斷是否為整數

2.若為整數則直接讀取

int frame = (int)frame_curr;

if (frame >= md2->frame_num)

frame = md2->frame_num – 1;

3.計算當前幀索引頂點偏移

int base = md2->vertex_num * frame;

4.遍歷每個多邊形

for (int pindex = 0, index = 0; pindex < md2->polygon_num; ++pindex, index= index+3){

5.讀取多邊形每個頂點

polyon = &md2->polygon_array[pindex];

vindex = polyon->vertex_index[0];

vertex_array[index+0]    = md2->vertex_array[base + vindex];

vindex = polyon->vertex_index[1];

vertex_array[index + 1] = md2->vertex_array[base + vindex];

vindex = polyon->vertex_index[2];

vertex_array[index + 2] = md2->vertex_array[base + vindex];

6.計算三角形法線

Normal_VECTOR3D(&normal_array[pindex],&vertex_array[index + 0],&vertex_array[index + 1],&vertex_array[index + 2]);

}

}

else{

2.若有小數數則進行幀插值,讓動畫平滑

int frame0 = (int)frame_curr;

int frame1 = (int)frame_curr + 1;

if (frame0 >= md2->frame_num)

frame0 = md2->frame_num – 1;

if (frame1 >= md2->frame_num)

frame1 = md2->frame_num – 1;

int base0 = md2->vertex_num * frame0;

int base1 = md2->vertex_num * frame1;

3.偏曆三角形在兩幀之間插值計算頂點

for (int pindex = 0, index = 0; pindex < md2->polygon_num; ++pindex, index = index + 3){

4.讀取兩個多邊形頂點並行權重插值

polyon = &md2->polygon_array[pindex];

vindex = polyon->vertex_index[0];

vertex_array[index+0] = md2->vertex_array[base0 + vindex] * (1 – ivalue) +md2->vertex_array[base1 + vindex] * (ivalue);

vindex = polyon->vertex_index[1];

vertex_array[index + 1] = md2->vertex_array[base0 + vindex] * (1 – ivalue) +md2->vertex_array[base1 + vindex] * (ivalue);

vindex = polyon->vertex_index[2];

vertex_array[index + 2] = md2->vertex_array[base0 + vindex] * (1 – ivalue) + md2->vertex_array[base1 + vindex] * (ivalue);

5.計算三角形法線

Normal_VECTOR3D(&normal_array[pindex],&vertex_array[index + 0], &vertex_array[index + 1], &vertex_array[index + 2]);

}

}

}

 

載入MD2模型.讓MODEL3D

void Load_MD2_MODEL3D(MODEL3D_PTR model3D,MD2_PTR md2,int texture_index){

1.清零

memset(model3D, 0, sizeof(MODEL3D));

2.指向md2模型

model3D->md2 = md2;

3.分配每幀多邊形頂點記憶體

model3D->vertex_array = (VECTOR3D_PTR)malloc(md2->polygon_num * 3*sizeof(VECTOR3D));

4.分配每幀多邊形法線記憶體

model3D->normal_array = (VECTOR3D_PTR)malloc(md2->polygon_num * 3 * sizeof(VECTOR3D));

5.指向紋理

if (texture_index < md2->texture_num){

texture_index = md2->texture_num – 1;

model3D->texture = &md2->texture_array[texture_index];

}

}

 

設置模型動畫MD2有20個不同動作

void Set_Animation_MODEL3D(MODEL3D_PTR model3D,int anim,bool loop){

1.讀取MD2模型

MD2_PTR  md2= model3D->md2;

2.設定當前動畫索引

model3D->anim = anim;

3.動畫是否循環播放

model3D->loop = loop;

4.動畫播放標記設為未完成

model3D->complete = false;

5.動畫

MD2_ANIMATION_PTR  animation = md2->animation_array;

6.插幀頻率(0.0f~1.0f),1.0f表示不插幀

model3D->irate = animation[anim].irate;

7.當前幀

model3D->frame = animation[anim].start;

8.速度

model3D->speed = animation[anim].speed;

9.插幀計數器

model3D->count = 0;

10.提取動畫幀

Extract_Frame_MD2(model3D->md2,model3D->vertex_array,  model3D->normal_array,model3D->frame);

}

 

在遊戲引擎中你需要更新動畫, time為時間間隔通過Get_Counter_FPS(&fps);獲得

void Update_MODEL3D(MODEL3D_PTR model3D,float time){

MD2_PTR md2 = model3D->md2;

MD2_ANIMATION_PTR animation = md2->animation_array;

1.計算動畫有幾多幀

int   frame_num = animation->end – animation->start + 1;

2.計算每幀速度

float frame_speed = (float)frame_num / model3D->speed ;

3.當前幀帶小數以進行插值

model3D->frame = model3D->frame + frame_speed * time;

4.幀計數器控制插值

model3D->count = model3D->count + frame_speed * time;

5.判斷動畫是否播放完畢

if (model3D->frame > animation[model3D->anim].end)   {

if (model3D->loop == MD2_LOOP)  {// 循環播放動畫

model3D->count = 0;

model3D->frame = animation[model3D->anim].start;// 啟動幀

}

else{// 單次播放動畫

model3D->frame = animation[model3D->anim].end;// 結束幀

model3D->complete = true;// 以完成動作

}

}

  1. irate為插幀頻率(0.0f~1.0f), 1.0f表示不插幀

if (model3D->count >= model3D->irate || model3D->count == 0){

model3D->count = 0;//清零

8.提取動畫幀

Extract_Frame_MD2(model3D->md2, model3D->vertex_array,model3D->normal_array,model3D->frame);

}

}

 

每幀都要對3D模型進行渲染.這裡使用頂點數組進行渲染.當前你可以逐個三角形進行渲染但是會較慢.

void Render_MODEL3D(MODEL3D_PTR model3D){

1.當前矩陣堆棧壓棧

glPushMatrix();

  1. 移動多邊形位置並旋旋

glTranslatef(model3D->pos.x, model3D->pos.y, model3D->pos.z);// 移動

glRotatef(model3D->rot.x, 1.0f, 0.0f, 0.0f); // 繞X軸旋轉

glRotatef(model3D->rot.y, 0.0f, 1.0f, 0.0f); // 繞Y軸旋轉

glRotatef(model3D->rot.z, 0.0f, 0.0f, 1.0f); // 繞Z軸旋轉

3.壓入當前屬性

glPushAttrib( GL_DEPTH_BUFFER_BIT | GL_LIGHTING_BIT | GL_TEXTURE_BIT);

4.提取MD2模型

MD2_PTR md2 = model3D->md2;

5.綁定紋理

TEXTURE_PTR texture = model3D->texture;

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, texture->ID);

5.啟用頂點數組

glEnableClientState(GL_VERTEX_ARRAY);

6.啟用紋理座標數組

glEnableClientState(GL_TEXTURE_COORD_ARRAY);

7.啟用法線數組

glEnableClientState(GL_NORMAL_ARRAY);

8.指定頂點數組

glVertexPointer(3, GL_FLOAT, 0, model3D->vertex_array);

9.紋理座標

glTexCoordPointer(2, GL_FLOAT, 0, md2->textcoord_array);

10.三角形法線

glNormalPointer(GL_FLOAT,0, model3D->normal_array);

11.繪畫所有當前以啟用的頂點數組

glDrawArrays(GL_TRIANGLES, 0, md2->polygon_num * 3 );

12.啟用頂點數組

glDisableClientState(GL_VERTEX_ARRAY);

14.啟用紋理座標數組

glDisableClientState(GL_TEXTURE_COORD_ARRAY);

15.啟用法線數組

glDisableClientState(GL_NORMAL_ARRAY);

16.彈出當前屬性

glPopAttrib();

17.當前矩陣堆棧出棧

glPopMatrix();

}

MD2載入器程式:下載

  1. 可分別載入『角色』與『武器』MD2模型
  2. 紋理載入支持 『.PCX』『.BMP』『.TGA』
  3. 按ALT鍵彈出『MENU』點『ANIMATION』選切換不同的動畫.

Microsoft 無線霸雷鯊7000鼠標修復

Microsoft 無線霸雷鯊7000鼠標修復

鼠標輕觸開關是最容易損耗的,當鼠標出現連擊時,鼠標要準備退役,即使是最貴的鼠標使用壽命也相差唔多,就算鼠標有五年保養也不會幫你更換輕觸開關,唔信你可以試下拿它返廠.

如果你很喜歡你的滑鼠可以通過更換滑鼠的輕觸開關(如上圖),延長滑鼠使用壽命.因位兩層上錫要將它熔焊有D難度.因為『霸雷鯊7000』只有兩隻腳所以無分正負,貼緊上錫即可.

如果『霸雷鯊7000』出現斷幀可以償試拔掉其它USB設備.

 

Windows10輸入『』

Windows10輸入『』

「」與『』符號在標準的英語鍵盤中你是穩唔到這些按鍵,但可按以下方法輸入:

  1. 按CTRL+SHIFT切換到『微軟注音輸入法』
  2. 鼠標右鍵按『中/英』彈出菜單
  3. 按『輸入法整合器』
  4. 按『符』-『符號查詢『
  5. 『符號類別』選『標點符號』
  6. 選擇你想要的符號

如果在WORD可使用快捷鍵輸入,按住ALT鍵不放然後再按數字鍵,是唔是好方便呢.

字符 快捷鍵
ALT鍵+12302鍵
ALT鍵+12303鍵
ALT鍵+12300鍵
ALT鍵+12301鍵

 

 

Windows之ALT快捷鍵

Windows之ALT快捷鍵

之前一值無法使用ALT鍵,因查找唔到其VK_ALT對應的『VIRTUAL CODE』,近日把WinXP切底拋棄改用Win10,發現很多程式均使用ALT鍵展示或隱藏MENU. 細想VK_ALT即等於VK_MENU,下面是使用ALT鍵展示與隱藏MENU源代碼

1.在resource.h加入

#define IDALT                           1000

2.在resource.rc加入加速表,一定要加入ALT否則MENU會獲得焦點要按量下ALT鍵,另不要用VK_LMENU和VK_RMENU

ACCEL ACCELERATORS

BEGIN

VK_MENU,        IDALT,                  VIRTKEY, ALT, NOINVERT

END

3.在main()修改消息循環

MSG msg;//消息 msg是WINDOWS放置下一個消息的存儲器,

HACCEL hAccel; // 加速鍵表的句柄

hAccel =::LoadAccelerators(main_instance,”ACCEL”); // 加速鍵表的句柄

while(GetMessage(&msg,NULL,0,0)) //從事件對列中獲得消息

{  //由 PostQuitMessage(0) 發送的WM_QUIT消息,被PeekMessage()檢測到

if(msg.message == WM_QUIT)

break;// 跳出主循環

if(!::TranslateAccelerator(main_window,hAccel,&msg))// 處理加速鍵表

{

TranslateMessage(&msg);//處理和轉換加速鍵.

DispatchMessage(&msg);//調用WinProc對消息進行處理,從MSG結構取的參數並傳遞.

}

}

4.在WinProc加入

if(msg == WM_COMMAND)

{ // 處理菜單命令

if (LOWORD(wParam) == IDALT)

{     main_menu = ::LoadMenuA(NULL,”MAIN_MENU”);// 主菜單

if (::GetMenu(main_window) == NULL)

::SetMenu(main_window, main_menu);// 設定菜單

else

::SetMenu(main_window, NULL);// 設定菜單

}

}

Visual Studio 2017新增C專案

Visual Studio 2017新增C專案
Visual Studio 2017新增C專案

近日終於遠離最愛的VC6安裝VC2017,新增專案時居然無發現C/C++的選項,暈難道C已被拋棄?經一番鑽然才悟個中方法

  1. 運行Visual Studio 2017
  2. 『檔案/新增/專案』打開
  3. 『新增檔案/Visual C++/空白專案』
  4. 若無梯見請點按『開啟Visual Studio安裝程式』把與C++有關全部安裝
  5. 『名稱填』這裡填『OpenGL』
  6. 『位置填』這裡填『D:\C\』
  7. 取消勾選『為方案建目錄』單級目錄結構與VC6相若
  8. 按『確認』製作專案
  9. 右鍵點擊『OpenGL』打開屬性頁
  10. 打開『屬性頁/組態屬性/一般/字元集選則『使用Unicode字元集』.若選『使用多位元組字元集』則使用ANSI
  11. 打開『屬性頁/組態屬性/連接器/系統/子系統選則『Windows(/SUBSYSTEM:WINDOWS)』圖形界面。若選『主控台(/SUBSYSTEM:CONSOLE)』則為命令行界面
  12. 右鍵點擊『OpenGL』點擊『加入/新的篩選條件』填main
  13. 右鍵點擊『main』點擊『加入/新的篩選條件』
  14. 『名稱』填『main.c』副檔名為.c則使用C編譯器, 副檔名為.cpp則使用C++編譯器

 

 

OpenGL之點陣字體

OpenGL之點陣字體

在OpenGL輸出文字可用繪畫好的文本位圖,再繪畫上屏幕.也是遊戲製作通用手法.將基本ASCII文本存為16Bit*16Bit(32Byte)二進制點陣字體

指定位圖的繪畫位置

void glRasterPos2i(GLint x, GLint y);

繪畫位圖

void WINAPI glBitmap(

GLSizei width,         GLSizei height, ASCII文本的寬和高這裡均為16

GLfloat xorig,         GLfloat yorig,當前繪畫位置的偏移

GLfloat xmove,         GLfloat ymove, 下次繪畫位置的增量

const GLubyte *bitmap); 二進制點陣字體

以位畫字符B的函式為例:

  1. const unsigned char BITMAPFONT_B[] //16Bit * 16Bit 點陣字體={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x66,0x00,0x66,0x00,0x66,0x00, 0x66,0x00,0x7C,0x00,0x66,0x00,0x66,0x00,0x66,0x00,0xFC,0x00,0x00,0x00,0x00,0x00};
  2. glPixelStorei(GL_UNPACK_ALIGNMENT, 1);// 對齊像素字節
  3. glColor3f(1.0f, 1.0f, 1.0f);// 顏色
  4. glRasterPos2i(x, y);// 設定位圖的位置
  5. glBitmap(16, 16, 0, 0, 16, 0, BITMAPFONT_B);// 渲染字符B

點陣字體的程序示例:下載

  1. 把輸入法設為英文
  2. 通過WM_CHAR接收ASCII碼並在屏幕繪畫
  3. 在遊戲設計中此方法也適用漢字渲染,只要把漢字轉換為點陣字體

Windows10之切底禁用Update Assistant

Windows10之切底禁用Update Assistant

『Windows10 Update Assistant』又稱為『Windows 10 更新小幫手』會自動彈出下載並安裝更新.但更新後卻把我的『港版Win10』變為『台版Win10』更新時還不能保留原有程式.最煩的是經常自動彈出.即使卸載Uninstall後還是會自動安裝. 經一番研究只禁『Windows10 Update Assistant』自動彈出,而『Windows10 Update』仍在後臺自動更新系統

  1. 『檔案總管\控制台\所有控制項目\程式和功能\ Windows10 Update Assistant』按兩下進行卸載Uninstall
  2. 『檔案總管\控制台\所有控制台項目\系統管理工具\工作排程器』按兩下啟動
  3. 『工作排程器\工作排程器程式庫\Microsoft\Windows\UpdateOrchestrator』按兩下打開
  4. 分別將『UpdateAssistant』『UpdateAssistantCalendarRun』『UpdateAssistantWakeupRun』按右側『停用』鍵把狀態設為『已停用』

 

記憶體(RAM)之帶寬

記憶體(RAM)之帶寬
wmic memorychip

記憶體(RAM)容量對計算機性能起直接的影響,而另一個關鍵參數記憶體(RAM)帶寬(Bandwidth) ,帶寬越高與CPU之間交換數據更快,更有利提高計算機性能.

計算公式如下:

帶寬(Bandwidth)=工作頻率(DRAM Frequency)*位寬(DataWidth)

  公式 簡介
工作頻率Frequency 工作頻率=記憶體頻率*通道數量 相當於車速
位寬(DataWidth) SDRAM、DDR和DDR2、DDR3、DDR4的總線位寬均為64位 相當於路寬

可以通過命令行模式輸入『wmic memorychip』查看記憶體(RAM)的所有參數如上圖

ConfiguredClockSpeed DataWidth Voltage Speed TypeDetail
時鐘速度 位寬 電壓 工作頻率 記憶體容量

以DDR4-2400為例:

工作頻率:2400 MHz

位寬:64Bit=8Byte

 

例計算DDR4-2400記憶體(RAM)帶寬

2400MHz*64bit/8=19200 Mbyte/s=PC19200

例計算DDR400記憶體(RAM)帶寬

400MHz*64bit/8=3200Mbyte/s=PC3200

3D打印-2.5寸轉3.5寸硬碟托架

3D打印-2.5寸轉3.5寸硬碟托架
3D打印-2.5寸轉3.5寸硬碟托架
3D打印-2.5寸轉3.5寸硬碟托架
3D打印-2.5寸轉3.5寸硬碟托架
3D打印-2.5寸轉3.5寸硬碟托架
3D打印-2.5寸轉3.5寸硬碟托架

SATA端口固態硬盤(Solid State Drives)大多為2.5寸.可直接在筆記本電腦上使用.但在臺式機使用3.5寸硬碟.有些廠家會附帶有2.5寸轉3.5寸硬碟托架,但有些廠家就無提供.我地可以通過3D打印機做出硬碟托架.另需要準備六粒3mm六角螺母.產品的效果比在網上買的金屬版還要好

  1. 運行SOLIDWORKS新建零件模型
  2. 選擇『前視基準面』作為草圖平面,繪畫厚2mm兩側高15mm的托架草圖 如上圖
  3. 使用『特徵/伸長填料』 方向選擇『兩則對稱』 深度填139mm生成托架本體
  4. 選擇托架本體一側繪畫兩個同心圓 直徑分別為12mm和4mm的『支柱草圖』
  5. 使用『特徵/伸長填料』 方向選擇『給定深度』深度填3mm生成『支柱本體』
  6. 選擇托架本體一側繪畫六邊形 內切圓直徑為8mm的『六角鑼母凹槽』草圖
  7. 使用『特徵/伸長除料』 方向選擇『給定深度』 深度填8mm生成『六角鑼母凹槽』本體
  8. 使用『特徵/參考幾何/基準軸』選擇『前視基準面』和『源點』生成『基準軸』
  9. 使用『特徵/直線複製排列』方向選擇『基準軸』副本數填2『特徵面』選擇『支柱』和『六角鑼母凹槽』生成兩個排列間距分別填41mm與101mm
  10. 使用『特徵/鏡射』鏡射面選『右視基準面』鏡射特徵選『支柱本體』和『六角鑼母凹槽』
  11. 選擇『上視基準面』作為草圖平面,繪畫3mm寬的槽口草圖 如上圖
  12. 使用『特徵/伸長填料』 方向選擇『給定深定』 深度填7mm生成槽口本體
  13. 選擇『上視基準面』作為草圖平面,繪畫距槽口邊距2mm方形草圖
  14. 使用『特徵/伸長除料』 方向選擇『至某面平移處』面選擇槽口頂部.偏移距離填2mm挖空『槽口』本體
  15. 使用『特徵/直線複製排列』方向選擇『基準軸』勾選間距和副本.間距填5mm副本數填2『特徵面』選擇『槽口』
  16. 使用『特徵/鏡射』鏡射面選『右視基準面』鏡射特徵選『槽口』本體
  17. 打印後把六粒鑼母鑲入凹槽

 

主板之微星(MSI)B350 GAMING PLUS安裝

主板之微星(MSI)B350 GAMING PLUS安裝
主板之微星(MSI)B350 GAMING PLUS安裝
主板之微星(MSI)B350 GAMING PLUS安裝
主板之微星(MSI)B350 GAMING PLUS安裝
主板之微星(MSI)B350 GAMING PLUS安裝
  1. 先安裝後置面板
  2. 確定你的主板鑼絲孔個數,ATX大板為9個.
  3. 在機箱安裝定位鑼絲,對齊主板鑼絲孔, 其它位置請勿安裝定位鑼絲,否則可能造成主板短路,無法開機.
  4. 如果機箱底板鑼絲孔反牙(滑牙),可反轉機箱底板使用小錘輕敲鑼絲孔圓邊,令鑼絲孔抓細
  5. 安裝主板前先通過接觸其它金屬物體釋放自身靜電.
  6. 拿起主板時手持主板邊緣,避面觸及主板的核心部件.
  7. 連接USB擴展面版,注意正反方向.
  8. 插STAT數據線時偏平介面端插在主板上
  9. SATA數據線時請勿對折成90度,否則傳送過程中可能會出現數據丟失.

安裝電源

  1. 安裝電源需要四粒鑼絲,電源線往內側的方向安裝
  2. 插ATX主板電源線(24線)
  3. 插CPU電源線12V (8線)

連接機箱前置面板插頭

  1. 主板JFP1連接機箱的開關和LED燈,早期 Power LED(電源燈)三插中間空,需要將正極(紅色)拔出插在中間.
  2. 主板JFP2連接機箱蜂鳴器
JFP1針腳 簡介 JFP1針腳 簡介
1 HDD LED+硬碟燈正極(紅色) 2 Power LED+電源燈正極(紅色)
3 HDD LED-硬碟燈負極 4 Power LED-電源燈負極
5 Reset Switch

重置開關

6 Power Switch

電源開關

7 8
9 Reserved(保留腳) 10 No Pin(無針腳)

 

JFP2針腳 簡介 JFP2針腳 簡介
1 Speaker-負極 2 Buzzer-負極
3 Buzzer-負極 4 Speaker+正極(紅色)

設定BIOS

  1. 按Delete進入主板BIOS
  2. Settings\Boot\Boot Option#1設定為你的啟動硬碟
  3. LAN Option ROM 設定為ON以啟動網卡
  4. HD Audio Controller設定為ON以啟動聲卡
  5. 按F9保存更改並重新啟
  6. 開機POST畫面時按F11進入啟動菜單
  7. 從菜單中選則你的Windows10安裝光盤或U盤

主板之微星(MSI)B350 GAMING PLUS

主板之微星(MSI)B350 GAMING PLUS
主板之微星(MSI)B350 GAMING PLUS

本想購買華碩(Asus)PRIME B350-PLUS但細梯之下此主板尺寸是30.5CM23.7CM(6個鑼絲固定孔)非標準ATX大板,而華碩稍貴點的主板尺寸都是30.4CM24.3CM(9個鑼絲固定孔)標準ATX大板,光從這點就可梯出華碩小氣.有朋友總是迷信華碩認為它的質量就是最好.但多年經驗告訴我並非這樣.

之後注意到微星(MSI)B350 GAMING PLUS這塊標準的ATX大板.整塊主版以紅黑色設計給人感觀非常好.最重要介面齊全,連舊式的串口和並口都支援(需外接埠).小小失望的是缺小IDE介面,幸好有PCI介面可插IDE擴展卡.但我又怕拖慢開機速度.

介面 簡介
CPU 支持AM4封裝AMD RYZEN

我不太注重CPU速度.買左盒裝銳龍1500X/3.5GHz/4核.

晶片組 AMD B350晶片組
內存 4條DDR4內存插槽雙通道內存構架.

安裝四條單條16GB剛好64GB內存

擴展插槽 一條PCIe3.0x16插槽(需要安裝RYZEN(銳龍)CPU)

一條PCIe2.0x16插槽

兩條PCIe2.0x1插槽

兩條PCI插槽.是我買它最重要原因,可以安裝我的PCI創新聲卡

USB後置面板

 

兩個USB2.0

四個USB3.1

一個USB3.1 TYPE-C

加上內置的USB插口,就無需再使用USB分線器.因為它經常接觸不良

交叉火力 支援安裝兩個相同的AMD顯卡

買左迪蘭恒進(ATALAND)RX550酷能4G

存儲 四個SATA 6Gb/s埠,安裝兩個硬盤一個DVD光驅剛剛夠用.

一個M.2介面

 

CPU之AMD RYZEN安裝

CPU之AMD RYZEN安裝
CPU之AMD RYZEN安裝
CPU之AMD RYZEN安裝

現在的CPU尺寸小而且針腳多.SOCKET AM4就有1331腳.若裝反會損毀CPU.是吾是想起SOCKET-1和SOCKET-A的年代呢.

安裝SOCKET AM4步驟

  1. 關閉電源並移除電源線.
  2. 輕撥並抬起AM插座杆至90度(垂直)
  3. AM4的CPU的表面有黃色三角標識.代表PIN1
  4. SOCKET AM4插槽的也有三角標識
  5. 將兩個三角形對齊把CPU平放插入插槽
  6. 把插槽杆拔回原位鎖定CPU
  7. 在CPU表面塗抹散熱矽膠,增加CPU與散熱器接觸面.
  8. 拆除用於安裝散熱器扣勾架(固定模塊)的四粒鑼絲(逆時針轉),露出用於鎖定散熱器的底板
  9. 把原裝幽靈風扇的鑼絲對散熱器底板鑼絲孔.
  10. 使用十字鑼絲批,四粒鑼絲要分開逐次拎,鑼絲不要一次拎緊. (順時針轉)
  11. 把四針風扇插頭插入主板的CPU_FAN1插座

CPU之AMD RYZEN5銳龍1500X

CPU之AMD RYZEN5銳龍1500X
CPU之AMD RYZEN5銳龍1500X
CPU之AMD RYZEN5銳龍1500X

以前好似無買過盒裝的CPU.都是買散裝CPU外加個散熱器.因為現在網購方便乾脆買個盒裝CPU.本想買個Intel八代酷睿I5但需要300系列主機板.CPU同樣是1151腳.但卻要新的晶片組支援.Intel這種作為實在吾好.

繼而把目光轉向AMD RYZEN(銳龍)5-1500X.擁有4個核芯.基頻3.5GHz而且不鎖頻.就這點就比Intel有誠意.

有很吾識多任務操作系統原理的人認為CPU速度比核芯個數重要.其實並非這樣.每個進程(Process)都有一個主線程(thread).瀏覽器+播放機+圖形介面+後臺任務.分分幾十個進程(Process)等代CPU時間片運行.如果你有多CPU核芯操作系統就會均勻的給CPU核芯分配時片.如果遊戲或程式創建多個線程(thread).更能充分的發繪多核CPU性能.最明顯的是兩核芯CPU一出現就令Windows假死現象消失,因為在單CPU年代如果某個進程嚴重佔用CPU資源,Windows圖形介面就變得很慢很慢.

所以在未有多核CPU出現前.解決辦法是購買雙CPU的主版加兩個CPU.但多核芯系統依然比不上多核芯多CPU系統,因為單個CPU的主版的多個核芯同時間只有單個可以訪問內存(RAM).而多CPU的主版則可以同時訪問內存(RAM).但多核的CPU核芯同時間依然只有單核個可以訪問內存(RAM).但我之前幾塊雙CPU的主版都無法啟動!_!

性能 產品規格
CPU AM4介面1331針

AMD RYZEN銳龍1500X不集成顯卡

核芯 4芯核8線程
頻率 基頻3.5GHz最高3.7GHz
緩存 L2=2MB

L3=16MB

風扇 原裝幽靈風扇
電壓 1.264V
基頻(CPU Base Clock) 100MHZ(基頻只有100超133有D希望)

 

記憶體之DDR4安裝

記憶體之DDR4安裝

以前主版的記憶體(RAM)插槽是隨便插的.但DDR4主機板會有記憶體(RAM)安裝建議.如下:

數量 插槽
一條 DIMMA2
兩條(雙通道) DIMMA2與DIMMB2
四條(雙通道) DIMMA1與DIMMB1

DIMMA2與DIMMB2

  1. 先通過接觸其它金屬物體釋放自身靜電,已免靜電損壞記憶體(RAM)
  2. 先拔開記憶體(RAM)插槽的扣勾
  3. 插的時候要注意記憶體(RAM)的缺口位.
  4. 將記憶體(RAM) 對準插槽用力按下,直到記憶體(RAM)完全到位.
  5. 如果記憶體(RAM)的金手指氧化接觸不良,可使用膠擦擦.

 

記憶體(RAM)之DDR4-64GB

記憶體(RAM)之DDR4-64GB
記憶體(RAM)之DDR4-64GB BIOS

在市面上無論原裝機、相容機還是平板電腦.最高我只見過是16GB的記憶體(RAM).用戶採用最強勁CPU最大硬盤.而往往忽略記憶體(RAM)容量嚴重不足的重要性.

在現代操作系統把記憶體(RAM)空間劃分成一頁(PAGE)一頁(PAGE)使用,如果沒有足夠記憶體(RAM)空間,操作系統會把以載入數據的記憶體(RAM)分頁(PAGE)寫入磁盤(DISK),以騰出足夠記憶體(RAM)空間.以免造成記憶體(RAM)溢出.但問題是磁盤(DISK)讀寫比記憶體(RAM)慢內太多.在多個程式(APP)切換時記憶體分頁(RAM PAGE)要在記憶體(RAM)和磁盤(DISK)之間不斷傳送.在瀏覽較大的PDF文檔時記憶體(RAM)不斷分配(malloc)和釋放(free)也會造成很大的延時.現代的網絡瀏覽器耗記憶體(RAM)更為利害,網絡影片再打開若干個網站.而後在各瀏覽頁面切換造成很大的延時. CPU再快都幫唔到你. 所以記憶體(RAM) 係多多益善.

VASEKY雖然是雜牌但勝在價格低廉,而且還裝有散熱器.但記憶體(RAM)發熱量不大對於超頻意義不大.只用作美觀和保護晶片.但比起其它大廠有誠意得多.安裝四條16GB共64GB是我這塊B350主版的極限.

參數 簡介
DDR4 2400MHZ(PC19200)
電壓 1.2V
容量 單條16GB

 

 

 

顯卡之迪蘭恒進(ATALAND)RX550酷能4G

顯卡之迪蘭恒進(ATALAND)RX550酷能4G
顯卡之迪蘭恒進(ATALAND)RX550酷能4G

本人對顯卡並無太多要求.能運行SolidWorks與Maya即可以.本想購買的XFX訊景R5-240無貨.而且又擔心4K影片支持.現在顯卡大多都被買去挖礦造成顯卡缺貨.幸好迪蘭恒進(ATALAND)RX550酷能4GB剛剛到貨馬上落單.

迪蘭恒進(ATALAND)RX550酷能4G 簡介
晶片組 RX550
內存 128BIT/DDR5/4GB
輸出 DVI-D/HDMI/DP

現在的顯卡以4GB顯存起步,回想起我第一塊顯卡只有1MB的顯存.更加認證左.硬體只是過眼雲煙.演算法才能久流傳.

3DMARK11 Entry(E) 1024×600 Performance(P)1280×720 Extrema(x)1920X1080
總分 E9283 P6332 X1398
圖形分數 9527 5929 1241
物理分數 8958 8922 8960
結合分數 8390 6844 1688
GT1 38.29幀 23.66幀 7.16幀
GT2 45.03幀 26.75幀 6.94幀
GT3 63.62幀 39.09幀 6.44幀
GT4 30.75幀 20.04幀 3.31幀
PT 28.44幀 28.32幀 28.45幀
CT 39.03幀 31.83幀 7.85幀

大量的光照對於GPU要求還是有點高,Extrema測試基本吾上10幀.

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 自動彈出全局變量與全局函式,按::也可自動彈出,最好用的快捷鍵之一

 

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

 

佳能打印機5200錯誤碼

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

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

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

URL編解碼器

URL編解碼器

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

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

Win32版下載

HASH校驗器

HASH校驗器

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

Win32版下載:HASH

 

SEO外鏈蜘蛛

SEO外鏈蜘蛛

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

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

Word輸入音符

Word輸入音符

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

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

Word輸入頓號

Word輸入頓號

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

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

 

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

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

 

 

平板電腦-無鍵盤進入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.

域名之IP被牆

域名之IP被牆

要確定IP是否被牆可以通過路由跟蹤命令tracert確認

  1. 按WIN鍵+R鍵快捷鍵
  2. 輸入cmd打開命令行模式
  3. 輸入tracert+域名/IP
  4. 你可以看到IP數據包連接目標時的所有路由節點.
  5. 在出現有Request timed out 或者reports:Destination host unreachable的節點,在查看IP的地址歸屬地,只要是本地的IP就可以確定是被牆.
  6. 如果IP是內網的路郵器,則查看路郵器的”防火牆/內容過濾/ URL過濾規則”.刪除相關的URL

 

IP地址被牆一般是一個網段一個網段給被牆,並非單度你一個,建議你先等幾天.而且網站域名的IP地址一般不應頻繁更換,因為會影響搜索引擎排名.

Godaddy的獨立IP只屬於你使用,不會與別人分享,但網速並不會加快.其實Godaddy獨立IP加上旗艦版虛擬主機的價格,與Godaddy虛擬專用伺服器(VPS主機)的價格相差無幾.而且有3個獨立IP.

域名之設置DNS服務器IP地址

域名之設置DNS服務器IP地址

DNS是域名解析服務器,它有存有”域名”與對應”IP地址”的數據庫供把你查驗,是互聯網關鍵設施,在連接網絡時會自動獲取DNS服務器的IP地址,下面是查看步驟.

 

查看本機的DNS

  1. 按WIN鍵+R鍵快捷鍵
  2. 輸入cmd打開命令行模式
  3. 輸入ipconfig /all
  4. DNS Servers 有兩行IP分別是首選和備用,因為我這裏是內網,所以你會看到的是路郵器IP

 

登錄路郵器查看DNS

  1. 打開瀏覽器
  2. 輸入路郵器IP,剛剛看到的IP地址,登錄路郵器管理介面.
  3. 點選”狀態欄/WAN口状态”,不同路郵器名稱有所不同
  4. “首選域名服務器”和”備用域名服務器”兩行就你的DNS服務器IP地址.

 

這個IP地址是由你的ISP(互聯網服務提供商)提供的.因為DNS經常遭受大規模攻擊.但其實你可以手動設置第三方DNS服務器.讓你網絡更加迅速和安全

下麵是共用DNS服務器IP地址:

首選 備用
Google共用DNS 8.8.8.8 8.8.4.4
阿裏共用DNS 223.5.5.5 223.6.6.6

 

設置本機DNS

  1. 按WIN鍵+E鍵快捷鍵,打開”文件管理器”
  2. 我的電腦/控制面版/網絡連接
  3. “本地連接”或”無線網絡連接”
  4. Internet協議(TCP/IP)/屬性
  5. 勾選”使用下面的DNS服務器地址”
  6. 分別輸入“首選DNS服務器”和”備用DNS服務器”,如果是內網可以填你的路郵器IP地址,而在路郵器設置DNS

 

設置路郵器DNS

  1. 打開瀏覽器
  2. 輸入路郵器IP,登錄路郵器管理介面.
  3. 點選”網絡設置\DNS服務器”,不同路郵器名稱有所不同
  4. 選擇”啟用DNS配置”
  5. 分別輸入“首選DNS服務器”和”備用DNS服務器”

Godaddy之網站未能訪問更改域名DNS

Godaddy之網站未能訪問更改域名DNS

Godaddy的主機價格低廉需度快,是我們博客主入門的首選.但今早發現網站未能訪問,發現在牆外是可以正常訪問的.

  1. 先PING網站域名
  2. 後PING網站IP,若PING得通進行下列步驟
  3. 再PING網域名稱伺服器DNS列表,找出能PING得通的.列表我在下麵給出.
  4. godaddy.com\我的產品\Godaddy網域管理員\網域名稱伺服器\變更\
  5. 輸如新的DNS服務器,等待30分鐘.

但若在牆內域名和IP都PING不通,而且Godaddy的DNS服務器DOMAINCONTROL.COM.從NS01到NS82也全都PING不通. PDNS 01到PDNS 14也一樣.以前是Godaddy的DNS服務器被牆,而這次梯來是IP地址大面積被牆,梯來只有更換IP地址或等幾天在作打算.

 

Godaddy的DNS服務器列表 IP
NS01.DOMAINCONTROL.COM 216.69.185.1
NS02.DOMAINCONTROL.COM 208.109.255.1
NS03.DOMAINCONTROL.COM 216.69.185.2
NS04.DOMAINCONTROL.COM 208.109.255.2
NS05.DOMAINCONTROL.COM 216.69.185.3
NS06.DOMAINCONTROL.COM 208.109.255.3
NS07.DOMAINCONTROL.COM 216.69.185.4
NS08.DOMAINCONTROL.COM 208.109.255.4
NS09.DOMAINCONTROL.COM 216.69.185.5
NS10.DOMAINCONTROL.COM 208.109.255.5
NS11.DOMAINCONTROL.COM 216.69.185.6
NS12.DOMAINCONTROL.COM 208.109.255.6
NS13.DOMAINCONTROL.COM 216.69.185.7
NS14.DOMAINCONTROL.COM 208.109.255.7
NS15.DOMAINCONTROL.COM 216.69.185.8
NS16.DOMAINCONTROL.COM 208.109.255.8
NS17.DOMAINCONTROL.COM 216.69.185.9
NS18.DOMAINCONTROL.COM 208.109.255.9
NS19.DOMAINCONTROL.COM 216.69.185.10
NS20.DOMAINCONTROL.COM 208.109.255.10
NS21.DOMAINCONTROL.COM 216.69.185.11
NS22.DOMAINCONTROL.COM 208.109.255.11
NS23.DOMAINCONTROL.COM 216.69.185.12
NS24.DOMAINCONTROL.COM 208.109.255.12
NS25.DOMAINCONTROL.COM 216.69.185.13
NS26.DOMAINCONTROL.COM 208.109.255.13
NS27.DOMAINCONTROL.COM 216.69.185.14
NS28.DOMAINCONTROL.COM 208.109.255.14
NS29.DOMAINCONTROL.COM 216.69.185.15
NS30.DOMAINCONTROL.COM 208.109.255.15
NS31.DOMAINCONTROL.COM 216.69.185.16
NS32.DOMAINCONTROL.COM 208.109.255.16
NS33.DOMAINCONTROL.COM 216.69.185.17
NS34.DOMAINCONTROL.COM 208.109.255.17
NS35.DOMAINCONTROL.COM 216.69.185.18
NS36.DOMAINCONTROL.COM 208.109.255.18
NS37.DOMAINCONTROL.COM 216.69.185.19
NS38.DOMAINCONTROL.COM 208.109.255.19
NS39.DOMAINCONTROL.COM 216.69.185.20
NS40.DOMAINCONTROL.COM 208.109.255.20
NS41.DOMAINCONTROL.COM 216.69.185.21
NS42.DOMAINCONTROL.COM 208.109.255.21
NS43.DOMAINCONTROL.COM 216.69.185.22
NS44.DOMAINCONTROL.COM 208.109.255.22
NS45.DOMAINCONTROL.COM 216.69.185.23
NS46.DOMAINCONTROL.COM 208.109.255.23
NS47.DOMAINCONTROL.COM 216.69.185.24
NS48.DOMAINCONTROL.COM 208.109.255.24
NS49.DOMAINCONTROL.COM 216.69.185.25
NS50.DOMAINCONTROL.COM 208.109.255.25
NS51.DOMAINCONTROL.COM 216.69.185.26
NS52.DOMAINCONTROL.COM 208.109.255.26
NS53.DOMAINCONTROL.COM 216.69.185.27
NS54.DOMAINCONTROL.COM 208.109.255.27
NS55.DOMAINCONTROL.COM 216.69.185.28
NS56.DOMAINCONTROL.COM 208.109.255.28
NS57.DOMAINCONTROL.COM 216.69.185.29
NS58.DOMAINCONTROL.COM 208.109.255.29
NS59.DOMAINCONTROL.COM 216.69.185.31
NS60.DOMAINCONTROL.COM 208.109.255.31
NS61.DOMAINCONTROL.COM 216.69.185.32
NS62.DOMAINCONTROL.COM 208.109.255.32
NS63.DOMAINCONTROL.COM 216.69.185.42
NS64.DOMAINCONTROL.COM 208.109.255.42
NS65.DOMAINCONTROL.COM 216.69.185.43
NS66.DOMAINCONTROL.COM 208.109.255.43
NS67.DOMAINCONTROL.COM 216.69.185.44
NS68.DOMAINCONTROL.COM 208.109.255.44
NS69.DOMAINCONTROL.COM 216.69.185.45
NS70.DOMAINCONTROL.COM 208.109.255.45
NS71.DOMAINCONTROL.COM 216.69.185.46
NS72.DOMAINCONTROL.COM 208.109.255.46
NS73.DOMAINCONTROL.COM 216.69.185.47
NS74.DOMAINCONTROL.COM 208.109.255.47
NS75.DOMAINCONTROL.COM 216.69.185.48
NS76.DOMAINCONTROL.COM 208.109.255.48
NS77.DOMAINCONTROL.COM 216.69.185.49
NS78.DOMAINCONTROL.COM 208.109.255.39
NS79.DOMAINCONTROL.COM NULL
NS80.DOMAINCONTROL.COM NULL
NS81.DOMAINCONTROL.COM 216.69.185.81
NS82.DOMAINCONTROL.COM 208.109.255.81
PDNS 01.DOMAINCONTROL.COM 216.69.185.50
PDNS 02.DOMAINCONTROL.COM 208.109.255.50
PDNS 03.DOMAINCONTROL.COM 216.69.185.51
PDNS 04.DOMAINCONTROL.COM 208.109.255.51
PDNS 05.DOMAINCONTROL.COM 216.69.185.52
PDNS 06.DOMAINCONTROL.COM 208.109.255.52
PDNS 07.DOMAINCONTROL.COM 216.69.185.53
PDNS 08.DOMAINCONTROL.COM 208.109.255.53
PDNS 09.DOMAINCONTROL.COM 216.69.185.54
PDNS 10.DOMAINCONTROL.COM 208.109.255.54
PDNS 11.DOMAINCONTROL.COM 216.69.185.55
PDNS 12.DOMAINCONTROL.COM 208.109.255.55
PDNS 13.DOMAINCONTROL.COM 216.69.185.56
PDNS 14.DOMAINCONTROL.COM 208.109.255.56

 

 

記憶體(RAM)小科普

記憶體(RAM)小科普

應用程序的運行都先載入記憶體(RAM),如果記憶體(RAM)不足在DOS時代會溢出,而Windows時代側把記憶體(RAM)數據寫入硬盤,所以記憶體(RAM)容量比CPU更影響多線程操作系統運行.在64位操作系統的今天4GB起步去到16GB已是頂配.這是用家只看重CPU的速度,而忽略記憶體(RAM)的重要性.記憶體價高一但換代就要全部淘汰也是原因之一.如果資金充足以今天硬件DDR4配備64GB記憶體(RAM)是必要的.

隨著計算機的發展,CPU的外頻越來越高,記憶體RAM的頻率也隨之跟進,在SDRAM時代CPU外頻等於記憶體(RAM)頻率,而記憶體品質也決定電腦的穩定性.

由記憶體引發無法開機的解決方案

  1. 主版喇叭兩長一短.可能是觸點氧化只能拆下記憶體用膠擦擦金手指,擦的時後要小心不要太內大力.以免弄壞旁邊的電阻.
  2. 更換記憶體插槽
  3. 提高主板的記憶體電壓
  4. 降低記憶體頻率
  5. 儘量買Intel芯片組的主板,對記憶體(RAM)兼容性一向較好.

下表是我搜集記憶體(RAM)型好的腳數和點壓

分類 電壓 單面雙面腳數 缺口左側腳數 缺口右側腳數
EDO 5V 36腳/72腳 36腳 36腳
SDRAM 3.3V 84腳/168腳(有兩個缺口) 10腳/30腳 44腳
DDR1 2.5V 92腳/184腳 52腳 40腳
DDR2 1.8V 120腳/240腳 64腳 56腳
DDR3 1.5 120腳/240腳 72腳 48腳
DDR4 1.2 142腳/284腳 75腳 67腳

下表是我搜集記憶體(RAM)型號對應頻率

分類 型號 帶寬即是數據傳送率(MBps) 核心頻率MHz 等效頻率MHz
EDO     66MHz 66MHz
SDRAM   PC-66 66MHz 66MHz
  PC-100 100MHz 100MHz
  PC-133 133MHz 133MHz
DDR1 DDR266 PC-2100 133MHz 266 MHz
DDR333 PC-2700 166 MHz 333 MHz
DDR400 PC-3200 200 MHz 400 MHz
DDR2 DDRII533 PC-4300 133 MHz 533 MHz
DDRII667 PC-5300 166 MHz 666 MHz
DDRII800 PC-6400 200 MHz 800 MHz
DDR3 DDRIII1066 PC-8500 133 MHz 1066 MHz
DDRIII1333 PC-10600 166 MHz 1333MHz
DDRIII1600 PC-12800 200 MHz 1600 MHz
DDR4 DDRIV2133 PC-17064 133 MHz 2133 MHz
DDRIV2400 PC-19200 150 MHz 2400 MHz
DDRIV2666 PC-21300 166 MHz 2666 MHz
DDRIV2800 PC-22400 175 MHz 2800 MHz
DDRIV3000 PC-24000 188 MHz 3000 MHz

 

電視輸出家庭音響功放S/PDIF轉換器

電視輸出家庭音響功放S/PDIF轉換器

電視機要輸出到功放音響通常是使用AV立體聲,但現在的電視機有些牌子就沒有AV立體聲輸出,取而代之的是代之是使用藍牙連接音響,但音響功放大多沒有藍牙,就算有我也不太建議使用,因為我睇過很多藍牙音響長時間連接會自動與其它設備連接,或者播放其它藍牙設備聲音或短暫失去連接.

幸好所有電視機都會有S/PDIF數字音頻輸出,它有光釺和同軸兩個版本,需要S/PDIF的同軸線與AV綫是一樣的但它輸出的數字信號,而AV是模擬信號,要連接音響功放你需要S/PDIF轉AV的轉換器,這種轉換器大多數使用直流5V電源,一端接S/PDIF,樂視,夏普,LG使用光釺線,而小米,海信使用同軸線,另一端接AV輸出.有些轉換器帶有3.5MM音頻AV輸出

在網絡買最只28蚊,實測只有單聲道輸出.

P2P下載慢之啟用UPNP

P2P下載慢之啟用UPNP

因為暑熱所以搬離屋企,安裝左”有線電視”的寬帶(139.gd),但總是發覺BT(BitTorrent)下載時比在屋企下載難,當時想是寬帶是內網的問題.但按使用BitComet是發現無法端口阻塞.”你的監聽端口無法被外網用戶連接,你的下載速度可能會受到影響,請檢查防火牆及NAT網關設置”並且”DHT已連接節點為0”

這講明你只能主動鏈接她人,而她人就無法鏈接你,而且DHT協議也是需要監聽端口.因為本人多年前寫過BT下載程序,這種情況當然不是本機的監聽端口無法打開,而網關(路郵)無幫你作端口影射.你需要在網關(路郵)啟用UPNP,這個協議可以幫助由程序向網關(路郵)請求端口影射.

 

以我這台”有線電視”的機頂盒為例啟動UPNP

  1. 在瀏覽器中輸入http://192.168.88.256進入網關(路郵)的WEB網管登錄界面
  2. 默人用戶名admin和密碼96956,進入管理介面
  3. 防火牆設置/UPNP設置
  4. 啟用UPNP
  5. 按確定保存
  6. 管理設置/重啟系統

 

有部分軟件並非自已生成UPNP連接,而是使用Windows自帶的服務.你需令外啟用.

  1. 網上鄰居/網絡任務/顯示聯網的UPNP設備圖標,”安裝組件”並”相關服務”
  2. 控制面板/添加或刪除程序/添加刪除Windows組件/Windows組件嚮導/網絡服務/詳細信息. “Internet網關設備發現和控制客戶端”和“UPnP用戶界面”組件
  3. 控制面板/管理工具/服務/SSDP Discovery Service啟動啟用UPNP設備的發現/狀態設為”已啟動”
  4. 控制面板/Windows防火牆/例外/勾選”UPnP 框架”服務
  5. 網絡連接/Internet連接/鼠標右鍵/屬性/常規/設置
  6. 點擊“添加”,輸入本機的IP地址與影射本機與網關的網絡端口,TCP與UDP需分別添加.

 

這樣你才能被沒有啟用UPNP的用戶peer連接,獲的更快的下速度.

Wifi之LB-LINK 150Mbps USB無線網卡小測

Wifi之LB-LINK 150Mbps USB無線網卡小測

購買LB-LINK是因為它是市面上價格最低的無線網卡,而我又得10紋優惠券和免運費券.它原價25紋,我再給10紋就得到.

無線網卡的優勝之處在於無需使用網線安裝方便.不過我覺得這種USB-Wifi最適合用於在無Wifi摸辦公室偷流量.

  1. 把無線網卡插入USB接口
  2. 安裝光盤上驅動搞掂.

無線網卡可以實現兩個功能

  1. Wifi發射也就是路郵.將電腦的網絡轉成WIFI供手機或平板電腦使用,你要設置WIFI名稱和密碼,
  2. 無線接收也就是節點.接收WIFI信號,實現無線上網.與一般的Wifi連接一樣.

小米電視4A人工智能語音55英寸小測

小米電視4A人工智能語音55英寸小測
小米電視4A人工智能語音55英寸小測

我老竇屋企台20年前29寸電視終於離開左我,需要穩一台質量性能都要過得去電視.鑒於LCD屏幕都是進口, 話買杂牌子也可了, 睇咗多個杂牌子RAM與硬盤都較小.唯有小米人工智能語音版有內存2GB硬盤32GB.在官網3599單價+200運費=3799元.但要20天內發貨.

於是與老竇去小米的專賣店梯下臺實機,雖然這台吾是無邊框設計但梯起來還可以.與是走去櫃檯問價格,報價2499單價+200運費=2699元.大驚以為店員搞錯細問之下,原來小米專賣店特權降價1100最後今晚,與老竇商量後馬上下單,8月27號晚落單8月30號下午送到,小米自有車所以無需經外面物流公司.

腳架與專賣店唔一樣在果度睇是一對叉,不過與官網上是一致.音頻輸出擴音機比較麻煩.手頭上無S/PDIF線,使用HDMI轉AV需要買轉換器,而藍牙大部分的功放都無這個接口.只能用個藍牙小音箱試左下.

清晰度要看最小矢量字體.而影片因為屏幕較大看分辯率細的效果吾會好,但如果片源分辯率高它的效果就可以梯出來.另外分辨率較高的片都要付費.較新都要VIP!暈…令外它帶有高頻頭可以自已裝條魚骨天線.

另外語音功能按住搖控器第二個按扭講話但意義不大

 

Maya之TIF文件載入警告

3D建模-TIF文件載入警告

Maya在載入.tif文件時會彈出下麵的警告:

TIFFReadDirectory: Warning, foo: unknown field with tag 37724 (0x935c) encountered.

TIFFReadDirectory: Warning, D:/Maya/sourceimages/bbg.tif: unknown field with tag 37724 (0x935c) encountered.

這是Maya的.tif文件載入器(LIBTIFF)讀取到未能識別的數據塊,但為什麼別人的製作的.tif文件就無種警告呢?按我下麵方法就可導出無警告的.tif文件

  1. Photoshop載入.tif文件
  2. 按Ctrl鍵+shift鍵+S鍵彈出”另存為”窗口
  3. “格式”擇(*.tff,*.tiff)
  4. “圖層壓縮”勾選”仍掉圖層並存儲拷貝”
  5. 生成.ttf文件

這樣Maya載入.ttf文件就吾回彈出警告

IBM-T60P筆記本影片播放不流暢

IBM-T60P筆記本影片播放不流暢
IBM-T60P筆記本影片播放不流暢

IBM-T60P是IBM賣掉其ThinkPad最後一款型號,雖然歷史悠久,但依然使用,只因冇銀更換.主要問題係影片播放時不同步.播放Flash FLV/.F4V文件影片慢過聲音.播放RMVB文件唔流暢每隔幾秒就停一停.換其它播放器也一樣,它自帶獨立顯卡ATI Mobility FireGL V5200 顯存512M PCIExpress X16接口.理應唔會造成這種現象.

主要問題係在驅動上,在ThinkPad網站上下載驅動太差,需要ATI Mobility Radeon 系列移動顯卡移動版催化劑驅動,才可能解决這個問題.最好安裝是集成了控制中心驅動版本,安裝8.4版需先安裝微軟Microsoft.NET Framework組件

 

 

ASCII表完整版

ASCII表完整版
ASCII表完整版

ASCII表完整版

ASCII(American Standard Code for Information Interchange)美國資訊交換標準代碼用於文本的資料編碼系統.

數字0–31分配給控制字元,用於控制像印表機等一些週邊設備

數字32–126分配給鍵盤上的字從

數字127代表DELETE 命令.

數字48-57代表0-9

數字65-90代表A-Z

數字97-122代表a-z

數字128-255为扩展,增加特殊符号字符,外来语字母和图形符号.

 

ASCII表是每本電腦的書籍都應附帶,特別是遊戲設計,但現實是大部分的書籍都不包含,下我給出字符從0~127,127~255的完全注釋的ASCII表,也方便查閱,另為我也給出以C語言ASCII輸出表

void ASCII()

{

char str[1024];

for(int i=0;i<256;++i)

{

::memset(str,0,1024);//清零

str[0] = i;

str[1] = ‘\r’;

str[2] = ‘\n’;

str[4] = NULL;

 

if(i == 0)

str[0] = ‘ ‘;// 空格

 

::printf(“十進位(DEC)=%03i 十六進位(HEX)=0x%02X  ASCII字符=%s”,i,i,str);

}

return ;

}

 

十進制(DEC) 十六進制(HEX) ASCII字符 簡介
0 0x00   空格NUL(null)
1 0x01 標題開始 SOH(start of headling)
2 0x02 [1] 正文開始 STX (start of text)
3 0x03 正文結束 ETX (end of text)
4 0x04 傳輸結束 EOT (end of transmission)
5 0x05   請求 ENQ (enquiry)
6 0x06   收到通知 ACK (acknowledge)
7 0x07   響鈴 BEL (bell)
8 0x08   退格 BS (backspace)
9 0x09   水準跳位字元 HT (horizontal tab)
10 0x0A   換行鍵 LF (NL line feed, new line)
11 0x0B   垂直跳位字元 VT (vertical tab)
12 0x0C   換頁鍵 FF (NP form feed, new page)
13 0x0D   回車鍵 CR (carriage return)
14 0x0E   不用切換 SO (shift out)
15 0x0F   啟用切換 SI (shift in)
16 0x10   資料連結轉義DLE (data link escape)
17 0x11   設備控制1 DC1 (device control 1)
18 0x12   設備控制2 DC2 (device control 2)
19 0x13   設備控制3 DC3 (device control 3)
20 0x14   設備控制4 DC4 (device control 4)
21 0x15   拒絕接收 NAK (negative acknowledge)
22 0x16   同步空閒 SYN (synchronous idle)
23 0x17   傳輸塊結束 ETB (end of trans. block)
24 0x18   取消 CAN (cancel)
25 0x19   EM (end of medium)
26 0x1A   替補 SUB (substitute)
27 0x1B   溢出 ESC (escape)
28 0x1C   檔分割符 FS (file separator)
29 0x1D   分組符 GS (group separator)
30 0x1E   記錄分離符 RS (record separator)
31 0x1F   單元分隔符號 US (unit separator)
32 0x20   空格 (space)
33 0x21 ! 嘆號
34 0x22 雙引號
35 0x23 # 井號
36 0x24 $ 美元符
37 0x25 % 百分號
38 0x26 & 和號
39 0x27 閉單引號
40 0x28 ( 開括弧
41 0x29 ) 閉括弧
42 0x2A * 星號
43 0x2B + 加號
44 0x2C , 逗號
45 0x2D 減號/破折號
46 0x2E . 句號
47 0x2F / 斜杠
48 0x30 0  
49 0x31 1  
50 0x32 2  
51 0x33 3  
52 0x34 4  
53 0x35 5  
54 0x36 6  
55 0x37 7  
56 0x38 8  
57 0x39 9  
58 0x3A : 冒號
59 0x3B ; 分號
60 0x3C < 小於
61 0x3D = 等號
62 0x3E > 大於
63 0x3F ? 問號
64 0x40 @ 電子郵件符號
65 0x41 A  
66 0x42 B  
67 0x43 C  
68 0x44 D  
69 0x45 E  
70 0x46 F  
71 0x47 G  
72 0x48 H  
73 0x49 I  
74 0x4A J  
75 0x4B K  
76 0x4C L  
77 0x4D M  
78 0x4E N  
79 0x4F O  
80 0x50 P  
81 0x51 Q  
82 0x52 R  
83 0x53 S  
84 0x54 T  
85 0x55 U  
86 0x56 V  
87 0x57 W  
88 0x58 X  
89 0x59 Y  
90 0x5A Z  
91 0x5B [ 開方括號
92 0x5C \ 反斜杠
93 0x5D ] 閉方括號
94 0x5E ^ 脫字元
95 0x5F _ 下劃線
96 0x60 ` 開單引號
97 0x61 a  
98 0x62 b  
99 0x63 c  
100 0x64 d  
101 0x65 e  
102 0x66 f  
103 0x67 g  
104 0x68 h  
105 0x69 i  
106 0x6A j  
107 0x6B k  
108 0x6C l  
109 0x6D m  
110 0x6E n  
111 0x6F o  
112 0x70 p  
113 0x71 q  
114 0x72 r  
115 0x73 s  
116 0x74 t  
117 0x75 u  
118 0x76 v  
119 0x77 w  
120 0x78 x  
121 0x79 y  
122 0x7A z  
123 0x7B { 開花括弧
124 0x7C | 垂線
125 0x7D } 閉花括弧
126 0x7E ~ 波浪號
127 0x7F   刪除DEL(DELETE)
128 0x80 Ç Ccedil
129 0x81 ü uuml
130 0x82 é eacute
131 0x83 â circ
132 0x84 ä auml
133 0x85 à agrave
134 0x86 å aring
135 0x87 ç ccedil
136 0x88 ê ecirc
137 0x89 ë euml
138 0x8A è egrave
139 0x8B ï iuml
140 0x8C î icirc
141 0x8D ì igrave
142 0x8E Ä Auml
143 0x8F Å ring
144 0x90 É Eacute
145 0x91 æ aelig
146 0x92 Æ AElig
147 0x93 ô ocirc
148 0x94 ö ouml
149 0x95 ò ograve
150 0x96 û ucirc
151 0x97 ù ugrave
152 0x98 ÿ yuml
153 0x99 Ö Ouml
154 0x9A Ü Uuml
155 0x9B ¢ 美分(cent)
156 0x9C £ 英磅(pound)
157 0x9D ¥ 日元(yen)
158 0x9E  
159 0x9F ƒ  
160 0xA0 á aacute
161 0xA1 í iacute
162 0xA2 ó oacute
163 0xA3 ú uacute
164 0xA4 ñ ntilde
165 0xA5 Ñ Ntilde
166 0xA6 ª  
167 0xA7 º  
168 0xA8 ¿  
169 0xA9  
170 0xAA ¬  
171 0xAB ½  
172 0xAC ¼  
173 0xAD ¡  
174 0xAE «  
175 0xAF »  
176 0xB0  
177 0xB1  
178 0xB2  
179 0xB3  
180 0xB4  
181 0xB5  
182 0xB6  
183 0xB7  
184 0xB8  
185 0xB9  
186 0xBA  
187 0xBB  
188 0xBC  
189 0xBD  
190 0xBE  
191 0xBF  
192 0xC0  
193 0xC1  
194 0xC2  
195 0xC3  
196 0xC4  
197 0xC5  
198 0xC6  
199 0xC7  
200 0xC8  
201 0xC9  
202 0xCA  
203 0xCB  
204 0xCC  
205 0xCD  
206 0xCE  
207 0xCF  
208 0xD0  
209 0xD1  
210 0xD2  
211 0xD3  
212 0xD4 Ô  
213 0xD5  
214 0xD6  
215 0xD7  
216 0xD8  
217 0xD9  
218 0xDA  
219 0xDB  
220 0xDC  
221 0xDD  
222 0xDE  
223 0xDF  
224 0xE0 α 阿爾法(Alpha)
225 0xE1 ß 贝塔(beta)
226 0xE2 Γ Gamma
227 0xE3 π 圆周率(pi)
228 0xE4 Σ sigma
229 0xE5 σ sigma
230 0xE6 µ mu
231 0xE7 τ tau
232 0xE8 Φ PHi
233 0xE9 Θ Theta
234 0xEA Ω 欧米伽(Omega)
235 0xEB δ Delta
236 0xEC 無窮
237 0xED φ phi
238 0xEE ε epsilon
239 0xEF  
240 0xF0  
241 0xF1 ±  
242 0xF2  
243 0xF3  
244 0xF4  
245 0xF5  
246 0xF6 ÷  
247 0xF7  
248 0xF8  
249 0xF9  
250 0xFA ·  
251 0xFB  
252 0xFC  
253 0xFD ²  
254 0xFE  
255 0xFF ÿ  

 

求花花

求花花
求花花
求花花
求花花

求花花

今在歐陽家群出現一條幼稚園大班的算術題,題目是一張圖.圖中的花具有權重相加合得一定的數值,三種花必須符合以下三個條件

  1. 紅花+紅花+紅花=60
  2. 紅花+藍花+藍花=30
  3. 藍花-黃花*2=3

求: 黃花+紅花*藍花/5*4=?

 

因為電腦是科學家經過幾百才得到強大運算器,下面我使用電腦求解這個問題,演算法超簡單無經過優化. 黃花1紅花權重20,五瓣花藍花權重5,四瓣藍花權重4 ,答案是81

 

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

// 求花花

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

int flowers()

{

int red=0;// 紅花

int blue = 0;// 藍花

int yellow=0;// 黃花

int x=0;

 

while(true)

{

if((red + red + red   == 60) )

{

if( red + blue + blue == 30)

{

if(blue – yellow*2  == 3 )

{

x = yellow + red * (blue/5*4);

break;// 求得答案

}

else

{

++yellow;// 黃花

}

}

else

{

++blue;//藍花

}

}

else

{

++red;// 紅花

}

}//END WHILE

 

return x;

}

 

Google註冊郵箱帳號Gmail

註冊Google郵箱帳號Gmail
註冊Google郵箱帳號Gmail

註冊Google郵箱帳號Gmail

Google的大部分服務都需要你有Gmail帳號,但是現在註冊都需要電話驗證,但有可能會出現”此號碼號碼無法用於驗證”,可以嘗試在電話號碼加上+86,如果還是不行很有可能是系統的問題,可換一台電腦再試或重裝係數.與VPN無關的.

 

Gmail

https://www.google.com/intl/zh-HK_hk/gmail/about/

希捷-固態混合型筆記本硬碟

希捷-固態混合型筆記本硬碟
希捷-固態混合型筆記本硬碟
希捷-固態混合型筆記本硬碟

因本人的筆記本IBM-T60P以有十幾年歷史本應退役.但因為資金緊張只能通過更換硬碟延長使用壽命(原配的100GB硬碟不夠存儲),上世紀存活下來的硬碟廠家只剩下西數和希捷,我以負責態度買硬就應買希捷,應為硬碟再貴也不及硬碟內的資料貴.

現在硬碟三種類型

  1. SSHD:固態混合型硬碟
  2. HDD:機械硬碟
  3. SSD:固態硬碟

 

在這三者中固態混合型硬碟(SSHD),在機械硬碟和固態硬碟集合了兩者的優點價格和性能.我這款500GB固態混合型硬碟帶有8GB的SSD模組,當某個資料經常被讀或寫,就被視為熱點資料,那麼這個資料回被寫如SSD模組並且與HDD是鏡像,有點像RAIN0, 這就是希捷獨門絕技Adaptive Memory技術.

 

這款500GB硬碟的厚度只有7MM比原薄多了,外加64M記憶體.5400轉很靜. 我拆下來的100GB是7200轉超響的是要退役了.其實硬碟速度並太重要,如果你記憶體太小在快的硬碟也無用.

SolidWorks的PhotoView360的3D模型高級渲染

SolidWorks的PhotoView360的3D模型高級渲染
SolidWorks的PhotoView360的3D模型高級渲染

SolidWorks的PhotoView360的3D模型高級渲染

在SolidWorks內置了PhotoView360軟見。它可用於製作產品的渲染效果圖,PhotoView360其實是動態連接庫(.DLL),並非度立執行檔(.EXE).

  1. 要啟動PhotoView360,需在”功能表”-”工具”-“插件”,彈出”插件”列表,勾選PhotoView360
  2. 編輯外觀.可以選擇”零件”,”面”,”曲面”,”實體”,”特徵”.自定義其顏色.
  3. 編輯佈景:用於生高光澤外觀反射環境,點擊編輯佈景按鈕可選定已有布鏡色.
  4. 光源:可以極大的提高渲染效果, PhotoView360的光源類型有”環境光源”,”線光源”,”點光源”,”聚光燈”
  5. 環境光源:從各方向均勻照射, PhotoView360本身就有環境光源”菜但”-“視圖”-“光源與相機”-“屬性”-“環境光源”中設置從0~1之間光源強度.
  6. 線光源:從單一方向發射的光源的平行光源,可以改變光源的經度與緯度和光的顏色.
  7. 點光源:向所有方向發射的光源,可以設定光源的顏色與做3D座標
  8. 聚光源:它看起就是一盞聚光燈,它的中心點最光亮,以錐形光束射出.可以設定光源的顏色與做3D座標

上網慢

上網慢
上網慢

如果網速小於網路運營商標稱才能講網速慢,但網路運營商標稱的網速是以BIT為單位.而我們常用的單位BYTE,KB,MB,GB所以要轉換單位.

1BYTE=8BIT

1KB=1024BYTE

1MB=1024KB

1GB=1024MB

我們計算常見的網速

2M(bit)=102410242(bit)=262144(BYTE)=256(KB)

20M(bit)= 1024102420(bit)= 2621440 (BYTE)=2560(KB)=2.5MB

100M(bit)=10241024100(bit)= 13107200(BYTE)=12800(KB)=12.5(MB)

 

連接下面的URL進行網速測試,或者使用路由器內置網速測試.

http://netreport.sh.189.cn/speed/main.html

 

  1. 網速慢其中一個原因是路郵器啟動網速智能分配,如果是商用網路或者使用人數較多則應啟動限速,應關閉限速否則只會造成網速浪費.
  2. 網頁打開超慢,使用PING命令也反應超慢.以XP為例在” C:\WINDOWS\system32\drivers\etc”目錄下有個hosts檔沒有擴展名,此檔用於域名與IP地址的影射,以文本方式打開將其影射關係刪除後重啟.
  3. 硬件問題,有線網卡或無線網卡(Wifi)損壞經常見到.通常只要更換即可.
  4. 溫度高,只要停機等穩度下降即可恢復.如此高穩比較小見.在我台IBM-T60P提高影片解釋度時出現..

 

 

一筐雞蛋

一筐雞蛋
一筐雞蛋

今日見老豆在看微信,而且不停的在紙上寫數位並按計算機,原來是三舅父群裏發了一條數學題,這是條數學題求筐裏雞蛋的個數,我一口答應由我來算,題目我在下面給出,這種題目非常適合使用電腦進行碰撞求結果.常細的C語言演算法我在下面給出,演算法思路就是雞蛋個數逐次加一,所有條件都附合就得出接果,我果台老爺機IBM-T60P瞬間就給我答案1449,我將結果告訴我老豆他立馬發上群威一威.

 

一筐雞蛋:求筐裏雞蛋的個數
一個一個拿,正好拿完.
二個二個拿,還剩一個.
三個三個拿,正好拿完.
四個四個拿,還剩一個.
五個五個拿,還差一個.
六個六個拿,還剩三個.
七個七個拿,正好拿完.
八個八個拿,還剩一個.
九個九個拿,正好拿完.

//——————————————————————–
//一筐雞蛋
//——————————————————————–
int egg()
{
int x[9];
int _x;// 雞蛋個數
int c;//拿蛋的次數

_x = 0;// 雞蛋個數
while(1)
{
++_x;// 雞蛋個數加一

for(c = 0; 1c   <= _x; ++c)
x[0] = 1
c;

for(c = 0; 2c+1 <= _x; ++c)
x[1] = 2
c+1;

for(c = 0; 3c   <= _x; ++c)
x[2] = 3
c;

for(c = 0; 4c+1 <= _x; ++c)
x[3] = 4
c+1;

for(c = 0; 5c-1 <= _x; ++c)
x[4] = 5
c-1;

for(c = 0; 6c+3 <= _x; ++c)
x[5] = 6
c+3;

for(c = 0; 7c   <= _x; ++c)
x[6] = 7
c;

for(c = 0; 8c+1 <= _x; ++c)
x[7] = 8
c+1;

for(c = 0; 9c   <= _x; ++c)
x[8] = 9
c;

if(_x == x[0] &&
_x == x[1] &&
_x == x[2] &&
_x == x[3] &&
_x == x[4] &&
_x == x[5] &&
_x == x[6] &&
_x == x[7] &&
_x == x[8] )
break;
}

return _x;
}

試用優惠-立體聲音樂耳機

試用優惠-立體聲音樂耳機
試用優惠-立體聲音樂耳機

在網路上會有很多試用優惠的機會,而在蘇甯易購買的這款立體聲音樂耳機原價19元,試用優惠價只需6元,而且還未免運費,在街邊上買的耳機最偏宜也要10元,而且是簡包裝,而這款耳機軟塞套戴上去很舒服,因為耳機線在拉扯時會很容易扯斷,在貴也一樣的哦.

试用优惠-多功能读卡器

試用優惠-多功能讀卡器
試用優惠-多功能讀卡器

在網路上會有很多試用優惠,在蘇甯易購上這款多功能讀卡器原價19元,試用優惠只需8元,而且還未免運費,金士頓一款讀卡器則需要19元,如果品質可以的話性價比極高,支援多款SD記憶體卡.共有3個卡槽相容性強.

SD接口:SD/SDHC/SDXC/MMC II/RS MMC

TF接口:MicroSD/MicroSDCH/MicroSDXC

MS接口:MS Pro/MS Pro Duo/Ms Pro MG

 

IBM-T60P加裝光碟機硬碟托架

IBM-T60P加裝光碟機硬碟托架
IBM-T60P加裝光碟機硬碟托架
IBM-T60P加裝光碟機硬碟托架
IBM-T60P加裝光碟機硬碟托架

因為本人的IBM-T60P是多年前在淘寶購買的二手貨,這台電腦已十幾年歷史,本應退役進入博物館安享晚年,可是本人饢中羞愧,拿不出錢購買新的電腦設備.其硬碟只有120GB所以想拆下原裝的DVD-ROM光碟機, 加裝光碟機硬碟托架後再買個1TB的希捷硬碟.

光碟機硬碟托架在蘇甯易購購入支援STAT3,安裝時其前面版無法安裝,因為IBM有個缺口位,硬碟也無法時別.硬碟是東芝移動固態硬碟,它有個三通道開關用於相容不同的電腦

左側A通道:惠普,索尼
中間B通道:戴爾,IBM
右側C通道:其他品牌

不幸的是三個通道都無法使用,電腦無法通過光碟機為升級硬碟.

Dell Inspiron 15 3000 Series評測

Dell Inspiron 15 3000 Series評測

Dell Inspiron 15 3000 Series評測
Dell Inspiron 15 3000 Series評測

因為媽咪去美國探她大佬隨手買台Dell Inspiron 15 3000 Series 未含稅275美元. 稅率為8%.平常媽咪自已使用.不過對於還在使用二手IBM-T60P WinXP我嚟講是見識高科技.

電源開關在鍵盤右上角.CPU是Intel Core i3 515U主頻2.1GHz發熱量很低,與T60P熱到死機形成鮮明對比,電池續航時間4小時,T60P安裝9節電芯也只能2小時.最重要重量輕外出方便.4GB-DDR3記憶體對於64位的Win10系統太小太小.

顯卡是CPU自帶共用1GB記憶體.因為本人第一部電腦就是主板自帶顯卡.所以對於自帶顯卡很反感.所以是一大敗筆.

自帶多合1讀卡器這個倒是很實用.因為SD卡很常用.

鍵盤自帶有小鍵盤,Caps Lock鍵自帶燈,而Num Lock鍵就沒有燈,這有點不方便.

1TB硬碟但沒有劃分出擴展分區,自帶光碟和說明書媽咪嫌重在美國當飛碟仍了.暈X3.開機速度超過30秒還算可以.開機速度與硬體驅動,自啟軟體和硬碟讀取速度有直接關係.我在Win98時代我見過秒開.

15寸16:9軟屏上下左右可視角度很差,而且色彩不是很好. 與『IBM-T60P』15寸硬屏無法對比.影片輸出是HDMI沒有VGA,因位本人顯示器是太陳舊沒有HDMI,所以無法連接顯示器.

其鼠標觸控屏初用有點不爽.左右鍵要下按才有反應.還是買個無線USB滑鼠.

此電腦乃中國製造,只是在地球轉了一圈.

 

 

USB高速集線器(分線器)選購

USB高速集線器(分線器)選購

USB高速集線器
USB高速集線器

隨著越來越多外設設備使用USB接口,而筆記本電腦和臺式電腦只有兩個或四個USB接口.如過外設設被過多這肯定是不夠使用的.

需要多小個USB接口? 那要數數你有多小USB設備.
如過只玩遊戲上網滑鼠鍵盤兩個USB接口就足夠了,無需額外購買USB集線器.
如果要日常辦公U盤,印表機,掃描移,攝像頭.那就要六個USB接口.
如果給手機充電(需2A電流)和USB移盤硬碟(占兩個USB接口)還需接上外置電源.那需要不小於七個USB接口.

USB接口需要開關嗎?
有些USB集線器為每個USB接口有個開口,這個很不需要的,你把設備插入就是要使用,不使用就拔掉.根本無需開關.而且品質最好的開關都有一定壽命,令USB集線器更容易損耗,降低使用壽命.反而為每個USB接口內置LEB工作燈更具實用價值.可以知道每個設備的工作狀態.

USB接口品質
USB接口品質也有好壞之分. 品質好的USB接口的彈片彈性很好不容量氧化.品質差的USB接經常接觸不良.使用的過程中經常斷開連接.而且還會損壞外設設備.特別是移盤硬碟.

USB傳送速度

USB版本 理論最大傳輸速率
USB1.0 1.5Mbps(192KB/s)
USB1.1 12Mbps(1.5MB/s)
USB2.0 480Mbps(60MB/s)
USB3.0 5Gbps(500MB/s)
USB3.1 10Gbps(1280MB/s)

從上表可以得知USB接口的版本越高,傳送速度越快,版本1就不應購買.如過不使用USB硬碟或傳送大量資料購買2.0接口也可以.否則應購買USB3.0或以上.

Google發佈新款“像素”Pixel智能手機

Google發佈新款“像素”Pixel智能手機
Google發佈新款“像素”Pixel智能手機

Google發佈新款“像素”Pixel智能手機

2016年10月4日加利福尼亞州三藩市,Google產品管理總監艾理斯,介紹名為“像素”(Pixel)的新款智能手機。這是繼Nexus這個親生仔之後又一力作.它將會代替Nexus推出智能手機和平板電腦。

螢幕方面Pixel採用5.0英寸1080p螢幕,而Pixel XL採用2K解析度5.5英寸顯示幕。配置方面兩款手機近乎相同,採用驍龍821處理器輔以4GB運行記憶體+32GB/128GB存儲空間,搭載Android 7.1系統,支援DayDream VR平臺。32GB存儲的售價為649美元(約合人民幣4327元),而128GB的版本則為749美元(約合人民幣4995元),價格高的嚇死人,有“很黑”“真藍”“非常銀”三種顏色。將於今日在美國、澳大利亞、加拿大等地開始預約,13日在印度上線。中國大陸就別想了,雖由HTC代工生產. 但軟硬體則完全由Google自己設計。

 

1230萬圖元高品質的後置相機, 國外權威相機測試機構DxOMark給了它高於iPhone 7分數.

該機還擁有快充功能,充電15分鐘,就能用7小時。

 

谷歌首席執行官皮采表示,這款“谷歌助理”軟體使用了人工智慧技術,能夠“為每一位用戶提供個人化的Google服務”。 谷歌助手可以不斷學習,通過你的使用習慣和行為獲知你的喜好、需要和方位。主動為你提供合理化建議,而不是像往常一樣等待你的命令。

風雨中的微軟

风雨中的微软

風雨中的微軟

由蓋茨與艾倫創辦於1975年創辦微軟.他們的開發的BASIC解譯器成為行業的標準,這令微軟逐漸佔領了整個市場.

1980年微軟迎來左一次歷史的選擇,IBM選中微軟為其個人電腦(PC)編寫作業系統.

蓋茨沒有選擇自已開發,而是選擇買.

以5萬美元的價格從西雅圖的一位元程式編制者派特森手中購買,這就是後來的MS-DOS.

IBM-PC的成功使MS-DOS成為作業系統的標準.其他PC製造商都採用MS-DOS與IBM相容.微軟以每個拷貝授權使用給其他公司.

 

1985年發行Windows1.0,第一個圖形介面作業系統.

1987年發行Windows2.0.

1990年發行Windows3.0,為以後Windows的成功墊下基礎.

 

1991年由於利益的衝突,IBM與微軟解除合作關係,這講明最好的硬體都是過眼雲煙,軟體和演算法往往最後保留下來.

 

1993年推出Component Object Model(COM——元件物件模型),COM一種元件軟體發展技術.

COM本身並不是錯誤,錯誤的是將所有元件基於COM來開發.如ActiveX, DirectX以及OLE等.

DirectX在6.0之後在全部基於COM開發. 要講清楚COM原理要很厚書籍,但是它所提功的函數工能可能很簡單.這是種過度封裝體現.過度封裝帶來的後果很嚴重,特別是個人/團體開發.當你發現問題時往往太遲,代碼庫以經太龐大,無法修正.即使是微軟毒性也一樣.這是微軟自已飲下的慢性毒藥.

 

1995年微軟發佈Windows95,一個基於16位DOS的32點陣圖型系統.ORS2自帶有IE,它的成功令個人電腦成為集遊戲機,工作,上網於一體.令計算進入彩色時代.

 

1995年微軟推出MSN,一個曾經與QQ進行激戰產品,在大一統全球佈局的思想下失敗,2013年關閉MSN.

 

 

1998年發佈Windows98,它在Windows95基礎上改良而來.支援更多硬體,更穩定.如果你不斷安裝軟體.重裝依然是你的唯一選擇.

 

2000年發佈Windows Me,最後一個16位/32位元混合的Windows系統.

 

1993年發佈Windows NT 3.1,微軟的開發工作始於1988年,它招攬UNIX系統的開發者,開發一款純32位元的伺服器作業系統,花費5億美金.自Window ME之後微軟所有系統度基於NT架構.

NT價構具有里程碑意義.之後Window 32位元系統就是以它為基礎的.

 

1996年發佈Windows NT 4.0 同樣是服務版,不適合個人使用.

 

2000年發佈Windows 2000,原名為Windows NT 5.0 同樣是服務版,不適合個人使用. XP基於Windows 2000代碼的產品

 

2001年發佈Windows XP,最多使用者的作品.介面視覺極佳.啟動速度非常快(啟動速度與安裝的硬體和驅動有直接的關係),穩定性比以往的Window讀要好.硬體的相容極佳.

很多舊硬體直接裝上驅動,硬體廠商紛紛開法XP的驅動.舊版Window使用者全部改用XP.是微軟歷史上最成功的系統之一.

 

2003年發佈Windows Server 2003,同樣是服務版,不適合個人使用.

 

2006年發佈Windows Vista,這是Windows間隔時間最久的一次發佈,相隔五年

它是微軟的最失敗的作品,系統要求高,運行速度慢.要裝Vista肯定要升升級你的舊硬體.

XP配搭Office 2003已滿足日常辦公需求.用戶完全無動力升級.

 

2008年發佈Windows Server 2008,同樣是服務版,不適合個人使用.

 

2009年發佈Windows 7,它的出現令大量XP用戶升級.它的圖型介面比XP更佳.

 

2012年發佈Windows 8,它統一PC與平板,移動設備後.

加入應用市場,讓個人用戶,團隊,企業有一應用的發佈管道.這是微軟應該在Windows95/Windows98年代就應該做的事.

它卻等到其他移動應用市場掘起,Windows移失去移動市場.

 

2012年發佈Windows Server 20012,同樣是服務版,不適合個人使用.

 

2013年微軟宣佈收購諾基亞.這是微軟繼COM元件物件模型,應用市場後又一重大失策.

不但消耗大量資金去購買一間不思改進的硬體廠家.還令其他硬體廠商失去開發Windows移動設備的興趣.

 

2015年發佈Windows10,它將是所有設備統一平臺,最後一個Windows.

面對Android/安桌系統在移動市場的絕對地位,微軟卻遲遲不開發安桌java虛擬機.

這招可講是微軟的閃電鉗型戰術.

小鉗型支援安桌軟體遊戲,吸收大量安桌用戶,手機開發廠商.

大鉗型支部安桌應用市場,加入移動廣告.更加威脅到Google廣告業務.

 

顏色代碼

顏色代碼
這是一款生成自定義顏色的應用程式.
展示色樣,色板的實用工具!
全中文顏色名稱
專業的顏色選擇器
用戶自定義顏色(RGB/CMYK)
按音量鍵切換畫面
分享自定義的顏色代碼
支援多種顏色模型/顏色空間轉換

http://shouji.baidu.com/software/8050740.html