creative framework 開發進度(回到原點之一)

有種回到原點的感覺…。 因為啊,底層用的go-ui 不更新了。 作者的新作github上也都沒有commit 。等了一段時間後覺得不行了,還是得自己動手。但沒想到這麼複雜…。

第一步呢就是模仿go-ui 來建立一個qt的 dynamic lib ,光這邊就弄一段時間了…。首先要改出可以產出  .dylib的.pro檔案,找了老半天 後來才發現是修改TARGET 即可。不過還是有點怪怪的問題,暫時先不想理他,所以現在是用….go-ui 的 .pro檔案來產生 dylib 檔案….。(感謝open source 啊!!)  之後再來看看怎麼修正這個問題。

第一關就是寫在註解裡面的C程式  Go找不到,後來才發現 寫完之後要緊接著 import “C" …也就是說

/*

void hello();

*/

import “fmt"

import “C"

這樣是錯的,一定要

/*

void hello();

*/
import “C"

甚至多一行空白也不行勒。

第二關就是呼叫編譯好的lib了,一開始一直出錯,一直跟我說找不到這個函式。後來想起來之前看過的 程式設計師的自我修養:連結、載入、程式 一書中有提到可以dump出dll裡面的symbol,於是搜尋一下 發現在mac上可以用 nm  -gU  libname  來看。 我比照一下列表跟程式碼。才發現原來是需要…. extern “C" 來把他匯出成全域的函式…(看來C/C++ 還有一段長路要走勒)。 到這邊終於可以呼叫函式了,感覺很棒!!。

 

但是下一關開始呼叫 qt的 qappliction.exec()的時候 就又出錯了……。 等解決後再來寫下一篇了!

creative framework 開發進度

名字還是難產….。

我目前把實作processing 1.5 的範例當作目標。稍微計算了一下processing的範例有101個..目前的進度是…4 (T_T)這樣要做到何年何月啊XD 不過後來應該是會越來越快啦!! 前一個在寫hsv ->rgb的時候因為對go data type 不熟 卡住好久…。不過他要一直轉換來轉換去的很繁瑣,像是:

a float64 = 4/3 (X 不行 ) 簡單的說就是一定要相同類型。所以常常會 float64, int, uint8(用在色碼上) 轉來轉去,有點在考慮是不是數字就一律 float64 uint8 就好.. 。 不過寫好 hsv->rgb的時候感覺很開心!! 底下就是目前四個範例的畫面。

p.s go-ui 裡面的qt 的 drawPoint 畫出來的點跟processing的不一樣,怪怪的….

 

go-framworks

Screen Shot 2013-04-26 at 3.07.24 PM今年雖然沒有寫展望,不過一直有一個目標在我的心中,就是自己寫一套自己的 creative coding framework 。之前一直卡在 跟qt去對接。目前最近有高手寫了一個很完整的版本 – qt-ui ,初步都可以使用。所以我就得以繼續下去了!!  上面就是仿造processing 教學的第一個作品(http://processing.org/learning/gettingstarted/ )。 程式碼長這樣(go還沒非常熟!!):


package main
import (
 "../goframework"
)
func Draw(){
 goframework.Fill(0,255,255)
 if goframework.MousePressed() {
 goframework.Fill(0,0,0)
 }else{
 goframework.Fill(255,255,255)
 }
 goframework.Ellipse(goframework.MouseX(),goframework.MouseY(),80,80)

}
func main(){
 goframework.FrameRate(60)
 goframework.Draw(Draw)
 goframework.Win(400,400)
}

不過我還是修改了qt-ui的幾個部分。

  1.  設定背景繪圖的時候不會會清除。
  2. 設定滑鼠 move事件 在不按下左右鍵的時候也會觸發。

未來大概還要改不少吧@@  qt 這邊對我就比較難了 。 目前的計劃是先把2D的部分api給完成。再來是參數化設計 , 影像處理的api  , 內建使用go 寫的 簡易的電腦視覺的lib(像是找邊緣之類的。) ,  最後跟硬體 Arduino對接。  最後是3D的部份,要有3D的部分才有辦法做投影校正的lib阿!!

creative coding II

之前提過今年的新希望是想要用google-go寫一個自己的creative coding的framework。 今天想好code name了 就先叫做 Lu_Ban (魯班),正式名字再請老闆來命名。 期望它可以成為一個有用的工具啊!!

最近的進度還是在追如何產生視窗(其實是go-native window的溝通),今天終於有了一些進展。搜尋之下找到一些go的 gui /drawing framework

https://github.com/skelterjohn/go.wde

https://github.com/skelterjohn/go.uik

https://github.com/zozor/hgui

http://code.google.com/p/draw2d/

http://golang.org/doc/articles/c_go_cgo.html  (用go去叫c)

其中go.wde給我許多啟發,我終於知道怎麼做了。  不過go.wde是採用原生的mac視窗,我想我就直接去接qt看看了。明天一早來試試看啊!!

creative coding I

新年新希望有一個就是寫一套自己的 creative coding framework。順便學習新的語言(google go )以及把圖學阿視覺阿等基礎的東西給弄懂。首先要先研究一下各家framework是怎麼做的,目前的鎖定的對象有: openframeworks, Cinder,  PolyCode (都是C++),processing(這邊只注意框架設計 )。  目前最基礎一課就是弄清楚他們如何產生視窗以及繪製2d/3d圖形。

 

Openframworks

2d使用 cairo來繪製(code), 3d 當然就是 opengl囉。

Cinder:

2d使用  gdi 的樣子(code),3d還是使用opengl。

PolyCode:

2d 使用SDL (code), 3d 一樣是使用opengl。

他們啟動視窗在windows上都是呼叫 windows的api 。

目前看起來各家在2d上都有不同的選擇,我自己這邊的也不知道該選哪種@@ , sdl or cairo都不錯。

 

視窗的部份我想接…..  Qt …。我覺得實際上有gui的需求。舉凡像是想要調整一些參數或什麼的? 或是載入圖片的按鈕之類的。 是說也可以用osc另外做一個來控制,但我覺得還是有一個比較完整的gui 系統比較好, 因為這樣也可以把套件的管理程式給做在裡面。 本來想用XULRUNNER 來做,但是好似繪圖那邊不知道怎麼接起來?不然的話用html/javascript來做gui似乎是很方便的事。

目前大概會先來接 Qt 看看。 接好了再來看看2D繪圖那邊要使用哪一套。

 

 

基礎

vgod 最近寫了這篇  過早最佳化是萬惡的根源  。其中這段話我最近深有感觸:

很多人說大學教的東西沒用,但我一直覺得,大學教的東西不是沒用,只是看你會不會用。而決定你會不會用的關鍵,就在於你的「眼界」。我每次想要突破自己的 舒適圈時,都會遇到新的挑戰,而以前沒學好的「基礎知識」就會在這時跑出來咬我幾口,強迫我把它學好才能繼續前進。如果你老是覺得做的事很無趣,用不到大 學的知識,那很有可能只是你鑽得不夠深,想得不夠多而已。

現在回想起自己的大學生涯的確就是眼界的問題。我四年來幾乎都不知道數學可以用在我喜歡領域的哪邊,眼界窄的可憐。 但我現在知道了,切身的知道了,因為我一直被數學咬,一直被資訊的底層知識咬。

最近學Grasshopper, 基礎的3D空間的概念、3D圖學都不太懂,難的東西都做不出來。 曲面的建模有哪幾種,怎麼與其他物件連動、怎麼描述?
想要做一些有趣的衍生性計算。數學都不太會算了,基本的三角函數都有點模糊了。
明明可以透過計算少走冤枉路(一直在那邊測試)的一些小東西,也往往花了過多時間。

我覺得老天爺待我還算不錯,他給了我一條適當的路,不過當中出點了差錯,讓我沒有意識到我進了寶山(我跟偏微分完全不熟….)。

不過現在我懂了,真正的懂了。 有些關卡你一定要過,差別只是早過還是晚過。