誤刪google chrome書籤該怎麼辦? 教你救回!

•十一月 16, 2013 • 1 則迴響

不小心誤刪了書籤的情況很容易發生,作者在不同台電腦登入,由於匯入個人書籤,離開時打算刪除,忘記了尚未登出便把多年收藏許多重要的書籤都清空了!!!

刪除了沒關係,有個補救的方式,不過要盡快進行此動作。

 

chrome在下列位置:

C:\Users\(使用者名稱)\AppData\Local\Google\Chrome\User Data

(實例:C:\Users\adam0_000\AppData\Local\Google\Chrome\User Data)

放了兩個檔案,BookmarksBookmarks.bak,需要在User Data資料夾搜尋才搜尋的到

 

可以看見Bookmarks.bak檔案很大,猜測這是原本書籤的備份,根據網上看到的辦法是將原本的Bookmarks刪掉,Bookmarks.bak改為Bookmarks(怕危險可先將此兩個檔案先另外存起來),但作者親自實驗後發現無效,用Nodepad++看內容發現有檢查碼"checksum": “XXXXXXXXXXXXXXXXXXXXXXX",所以將原本的書籤內容從checksum之下的root開始到最後的version之前全部複製貼到Bookmarks儲存,重開chrome後即救回所有書籤。

 

廣告

別斷章取義! 戴勝益:月薪低於五萬 不要儲蓄

•六月 10, 2013 • 2 則迴響

最近很夯的議題,但記者斷章取義實在令人火大,希望大家也能看過影片後再想看看是否有道理。

以下稍微介紹影片中的重點,影片中很清楚的講了五點

1. 耐心

2. 人緣

3. 薪水不到五萬先投資人脈

4. 不要崇尚名牌

5. 認真

舉了煎魚的例子,比起自己用大火失敗,媽媽用小火煎魚才成功,如果出社會一年換24個工作要怎麼成功,耐心與等待才有機會。

接著舉了筷子夾花生的例子,兩支夾五分鐘,一支要夾多久?自己多利害都沒用,人緣差沒人願意配合沒用!

再來用22K講述剛出社會薪資不足三萬很常見,但在這樣薪水的情況下要給家用、要吃住還要儲蓄怎麼活,應該把錢用在跟人交際,

同事約喝個咖啡也要儲蓄不敢去,整天只龜縮在家,老闆要升主管的時候會升他不了解也跟同事們都不熟的你嗎? 講到父母親補足5萬事有點幽默的方式,說的是從小父母都投資你了,出社會再投資那些讓你有機會衝起來,幹嘛不?

再來賺得錢不要拿來買高價名牌,低價的東西搭配的好也很ok,錢要花在刀口上。

舉要他來的例子,校長跟秘書一直與他連絡,才讓他慎重知道務必要來,還開玩笑的特地去剪了頭髮。

太多人被記者的斷章取義所影響,完全陷入只有22k要怎麼交際? 都用錢買的酒肉朋友? 哪來父母給2萬? 劈頭痛罵戴補足5萬好了,甚至拒吃王品。

富人與窮人間的差距就是,富人把錢拿來投資,窮人把錢存起來,有人說他三萬塊存兩萬很了不起阿,存個20年就能有500萬,更有人抱怨都沒存錢出狀況怎辦?

但如果把那2萬拿來學習,拿來與同事老闆更多人交際,之後當主管的人是誰? 一個你根本不熟的同事,還是另一個大家都很熟絡,很有想法的人呢? 再說當不同領域或有特別的機會可以闖,會想到要給誰? 不熟的同事? 熱絡的同事?

富者越富不是沒有道理,撇開錢滾錢及缺德的撈錢方式,投資才能有更大的前景就是戴想告訴大家的。至於抽不出錢拿來投資的人只能說抱歉,你們再加油,能的人卻不這麼做,除非只想要兩三萬過一輩子,不然你們就是傻瓜,人家都教你方法了不去做只會批評,沒投資就想有收穫,活該只能抱怨感嘆。

國立中興大學101學年度碩學士班畢業典禮-戴勝益董事長致詞

http://www.youtube.com/watch?v=QThol4Gv-0w

port c/c++ to android by ndk

•四月 30, 2013 • 發表迴響

port c/c++ to android by ndk

需安裝:

  1. Java Platform JDK
  2. Eclipse
  3. Android SDK
  4. Android NDK
  5. Cgywin

android ndk的資料夾中即有sample(hello-gl2: shader範例,san-angeles: 3d opengl es範例), 於eclipse中以存在的android專案加入即可

於project中新增libs, jni資料夾

libs: 於project的properties設定bulider,用android ndk的ndk_build產生.so檔(做為java code與c code的那個.c檔的連接)

jni: 放置.c,.h檔及.mk(Android 設定連接的路徑,檔案,資料庫如opengles版本)

產生.so檔後即可使用

Screenshot_2013-04-30-11-39-32  Screenshot_2013-04-30-11-39-26

(上為san-angeles於asus pad的截圖)

Screenshot_2013-04-30-11-38-31

 

 

(上為hello-gl2於asus pad的截圖)

詳細步驟做法請參考下列網站:

Android Beginners: NDK Setup Step by Step « Mind The Robot

Android 開發筆記 – 設定 Windows 之 Android NDK (Native Development Kit) 開發環境 @ 第二十四個夏天後 :: 痞客邦 PIXNET ::

Android NDK开发指南—Android.mk文件 – 花郎 – ITeye技术网站

Setting up Automatic NDK Builds in Eclipse

OpenGL shader 進階教學2 – Bump Mapping 增加specular、ambient、光源移動

•十月 29, 2012 • 發表迴響

OpenGL shader 進階教學2 –

Bump Mapping 增加ambient、specular、物體旋轉、光源移動

前言:

OpenGL shader 進階教學1 – Bump Mapping不同的是這篇增加了眩光specular及光源可以移動。

如圖:

根據光源的改變,造成光影不同的變化。

vertex shader:

void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

fragment shader:

uniform sampler2D color_texture;
uniform sampler2D normal_texture;

void main(void)
{
vec3 normal = normalize(texture2D(normal_texture, gl_TexCoord[0].st).rgb*2.0-1.0);

vec3 light = gl_LightSource[0].position.xyz;

//光源在主程式中可以控制用鍵盤或滑鼠改變

//眼睛到點光源到點中間向量

vec3 half = normalize(gl_LightSource[0].halfVector.xyz);

//用half來算與normal越近眩光越強
vec4 specular = gl_LightSource[0].specular * pow(max(dot(normal, half), 0.0) , 100.0);

vec4 ambient = gl_LightSource[0].ambient;

//算diffuse
float diffuse = max(dot(normal,light),0.0);
vec3 color = diffuse*texture2D(color_texture, gl_TexCoord[0].st).bgr;

//增加ambient,specular
gl_FragColor = vec4(color,1.0)+specular+ambient;
}

OpenGL shader 進階教學1 – Bump Mapping

•十月 28, 2012 • 1 則迴響

OpenGL shader 進階教學1 –

Bump Mapping

前言:

理解了Bump mapping 原理之後,此篇讓我們用最簡單的方式實作一下吧!

如圖:

normal map的深度當作normal與光源的向量內積算出diffuse再與貼圖的顏色相乘得最終的顏色。

vertex shader:

void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

fragment shader:

uniform sampler2D color_texture;
uniform sampler2D normal_texture;
void main(void)
{
/*
glBegin()
glTexCoord2f(s,t)
glVertex2f(x,y)
.
.
glEnd()
gl_TexCoord[0].st表示主程式中貼圖內差的s,t
*/

//因為當初normal存到rgb中 normal的值 1~-1之間 而rgb只能0~1,因此r=(x+1)/2,g=(y+1)/2,b=(z+1)/2
//取回normal要先*2再-1
//用gl_TexCoord[0].st取normal_texture中的高低深度作為normal(光照的物體表面,越高越亮,越矮越暗)
vec3 normal = normalize(texture2D(normal_texture, gl_TexCoord[0].st).rgb*2.0-1.0);
vec3 light = normalize(vec3(2.0,0.0,-2.0));

float diffuse = max(dot(normal,light),0.0);

//用diffuse與貼圖該顏色算出著色
vec3 color = diffuse*texture2D(color_texture, gl_TexCoord[0].st).bgr;

gl_FragColor = vec4(color,1.0);
}

Bump mapping 原理

•十月 28, 2012 • 1 則迴響

Bump mapping 原理

Bump mapping的效果

下圖為一般的貼圖

(源自:http://www.paulsprojects.net/tutorials/simplebump/simplebump.html

簡介:

Bump mapping最早源自 Blinn, James F. “Simulation of Wrinkled Surfaces", Computer Graphics, Vol. 12 (3), pp. 286-292 SIGGRAPH-ACM (August 1978) ,透過normal map貼圖深度改變表面normal的著色方式,使物體表面看起來有3D細節,相關2D貼圖使有3D細節方式相關的有Parallax mappingRelief mappingDisplacement mapping等,其中最簡單的入門就是Bump mapping。

目的:

如簡介所述,為了增加3D細節於物體上,利用貼圖透過簡單的方式變能達成。

原理:

利用深度(存在normal map)改變normal的方式,讓shader著色時的打光產生光影的效果

紅皮書定義的opengl打光方程式:

Vertex Color = emission + globalAmbient + sum(attenuation * spotlight *
               [lightAmbient + (max {L.N, 0} * diffuse) + (max {H.N, 0} ^ shininess)*specular])

emission:材質(material)顏色

globalAmbient:環境顏色*global的環境光

attenuation:光因距離的衰落

spotlight:眩光(反射會令人刺眼的光)

lightAmbient:光的環境顏色*光

diffuse:光的顏色*材質顏色

shininess:反射指數

specular:光的反射顏色*材質反射顏色

以上為幾個重要的向量圖示

(源自:http://www.paulsprojects.net/tutorials/simplebump/simplebump.html

L:點到光的向量

V:視點到點的向量

H:V與L的中間向量(從H到V與H到L兩者角度相等)

N:點的法向量

(源自:http://www.paulsprojects.net/tutorials/simplebump/simplebump.html

(源自:http://standards.sedris.org/18026/text/ISOIEC_18026E_SRF.HTM

Tangent Space:畫上貼圖顏色的點是由該點的normal,平面上的切線向量tangent及另一與tangent程90度在平面上的切線向量binormal所組成x、y、z座標的空間,稱之tangent space,也就是只考慮該著色點,以該著色點為主的座標空間。

(源自:http://virtual.mjc.edu/cmpgr202/cmpgr202_new/module8/assemblage_sculpture.htm

Object Space:以物體為主的座標,可以根據x、y軸等正確的縮放物體。

World Space:世界座標,對任一軸縮放會造成物體扭曲。

圖中Eye Space正投影轉換到Clip Space()(源自:http://blog.signalsondisplay.com/?p=389

Eye Space:以視點看出去的座標空間,如正方體較遠面看起來較小

Clip Space:原座標空間,如同電腦螢幕

(源自:http://www.paulsprojects.net/tutorials/simplebump/simplebump.html

貼圖的兩邊與該點的normal構成了Tangent Space。

(源自:http://www.paulsprojects.net/tutorials/simplebump/simplebump.html

normal的資訊 因為單位長度為1,x、y、z在1~-1之間,可以像貼圖rgb一樣,存成normal map,

r = (x+1)/2;
g = (y+1)/2;
b = (z+1)/2;

因為normal的值在z,所以rgb顏色存(0.5,0.5,0.5~1),這也就是為什麼normal map存起來偏藍色的。

簡化的方法,著色只考慮diffuse。

color = max{l.n, 0}*diffuse

因為光的位置在world space先用inverse model matrix轉到object space,算出點到光的vector,再用TBN matrix把光的位置轉到tangent space。

 

貢獻:

參考網站:http://www.paulsprojects.net/tutorials/simplebump/simplebump.html

OpenGL shader 基礎教學3 – texture 貼圖

•十月 26, 2012 • 發表迴響

OpenGL shader 基礎教學3 –

texture 貼圖

前言:

繼前一篇的OpenGL shader 基礎教學2 – gl_Color 應用本篇將進入貼圖的簡單範例,此範例中不考慮normal等,純粹做貼圖

如圖:

//以主程式中畫三角形為例,透過貼圖及頂點的scale可以簡易的改變貼圖及三角片大小

void triangle(float texture_scale=1,float vertex_scale=1)
{

glBegin(GL_TRIANGLES);
glNormal3f( 0.0f, 0.0f, texture_scale);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-vertex_scale, -vertex_scale, vertex_scale);
glTexCoord2f(texture_scale, 0.0f); glVertex3f( vertex_scale, -vertex_scale, vertex_scale);
glTexCoord2f(texture_scale, texture_scale); glVertex3f( vertex_scale, vertex_scale, vertex_scale);
glEnd();

vertex shader:

void main(void)
{
//把主程式中bind好的第0個貼圖座標位置給gl_TexCorrd[0]
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

fragment shader:

//外部設好的貼圖

uniform sampler2D color_texture;

void main(void)
{
//根據拿到的座標位置與color_texture貼圖

//要用.bgr,用.rgb會變藍色
gl_FragColor = vec4(texture2D(color_texture, gl_TexCoord[0].st).bgr, 1.0);
}

 
%d 位部落客按了讚: