2010年3月8日 星期一

Jitter Tutorial 40 Drawing in OpenGL using jit.gl.sketch 摘要

  1. OpenGL 基礎物件:jit.gl.gridshape與 jit.gl.plato 用來繪製簡易幾何圖形;jit.gl.model 用來導入 obj  3D 模型;jit.gl.handle 用來控制3D物件與場景的位置;jit.gl.sketch 用來直接讀取  OpenGL 指令,並將這些繪圖指令一併執行。
  2. 多數 jit.gl.sketch 所使用的訊息指令,與標準的 OpenGl API (application programming interface) 僅有些微差異。相異之處大致如下:(1) 所有的 OpenGL 指令在 jit.gl.sketch 中為小寫(例如:glColor ( ) 改為jit.gl.sketch 所使用的 glcolor 指令訊息)。(2) OpenGl 的符號常數(symbolic constants)用於 jit.gl.sketch 中時, 除了改為小寫之外,並省略其 "GL_"「字頭」,例如 GL_CLIP_PLANE1 要配合 jit.gl.sketch 使用時,需改為 clip_plane1。(p.352)
  3. jit.gl.sketch 瞭解許多高階繪圖指令,藉此運用物件來繪製基本圖形、或繪製向量式的圖形。jit.gl.sketch 的運作,是藉由保留一系列繪製場景時執行的 OpenGL 指令而達成。其中,多數被送至 jit.gl.sketch 的訊息指令,會變成前述一系列繪圖指令的一部份。 這些指令列可以被存在一個物件的內部記憶體中。若將 jit.gl.sketch 屬性 displaylist 設定成 1,則這些指令可以被儲存在 GPU (graphic processing unit) 上,尤其適用於大量指令時 。但若要在原本的指令列中加入新的指令,則需要一段較長的時間讀取之 。(p.354)
  4. jit.gl.sketch 指令說明:reset 讓 jit.gl.sketch 清除內存的指令列,以達成初始化。glcolor 讓 jit.gl.sketch 改變繪圖時的顏色,以 RGBA 順序為之,使用浮點數來表示顏色數值 (0.~1.之間)。glbegin 後面接所要使用的圖元(drawing primitive)。glvertex 則標明所要繪製圖形之 vertex (頂點) 座標。 glend 指令告訴 jit.gl.sketch 其已完成圖型的定義工作。(p.355)。
  5. 以 line_loop 圖元指定三個 vertex 點所繪製的圖形,為中空的三角形;若以 triangles 圖元所繪製的三角形或多邊形,則為實心的圖形(中間有填色)。(p.356)
  6. jit.gl.sketch 指令 glcolor 與 glvertex 相間置放,並且各有不同數值,則配合 jit.gl.sketch 的 smooth_shading 1 屬性設定,可造成這些被定義為不同顏色的 vertex 之間產生漸層顏色的效果。(p.357)。
  7. glpolygonmode 後面接上 front_and_back, front, back 等訊息,用來定義作用範圍,再接上 fill 或 line 可以用來設定 jit.gl.sketch 所繪製出來的多邊形,是否以填色模式、或外框線條模式呈現。(作用與一般 jit.gl 相關物件中的 poly_mode 屬性之功能相同。)
  8. 圖元 line_loop 可用來將所設定的 vertex 以線條相連起來 (例如指定三個點,則可以繪製三角形);lines 圖元與 line_loop 不同之處在於前者不會將第一個 vertex 與最後一個 vertex 相連線;圖元 triangles 可用來直接繪製三角形(內部為填滿的狀態);圖元 tri_strip 配合指定的四個 vertex 可用來繪製方形(藉由結合兩個三角形而成;內部是否填滿由 fill 或 line 設定之)。
  9. jit.gl.sketch 也可以將所繪製的圖形設定位移(translate)、改變大小 (scale)、旋轉 (rotate)等。此時需要先使用 glmatrixmode 訊息,以告訴 jit.gl.sketch 我們即將執行 modelview matrix,藉此進行3D物件的旋轉、位移、改變大小。
  10. glpushmatrix 訊息則是用來將現在的 modelview 矩陣複製到暫存架 (stack)上,以便於之後使用。如此可以讓我們將所繪製的複雜圖形,製造巢狀模式的位移。例如,我們可以繪製一系列的多邊形,並設定每個多邊形以相對於先前存於暫存架的多邊形之位置作旋轉。這種方法,可以用來使一系列的圖形,保留彼此之間的相對位置,又相對於其他群組的圖形作旋轉。glrotate 後面接上「角度、 x、 y 、z 的座標」,則用來設定旋轉的角度與軸心。glpopmatrix 用來使 jit.gl.sketch 回到先前的旋轉,在其後加入的新指令,會使用原本的旋轉向量為參照。(p.360)
  11. gltranslate 加上位移距離差值 (offset),用來產生圖形位移;glscale 加上 x y z 乘數,用來改變圖形大小。(p.363)

2010年2月28日 星期日

徵求舞者參與互動影音結合舞蹈的表演計畫

最近因為看了Chunky Move 的舞蹈表演影片,開始對於將舞蹈結合互動影音的設計產生興趣。或許由於國際間很少有類似的表演,許多研究僅限於紙上談兵、或者只是「實驗」性的表演來呈現技術的新穎,而不見真正好的作品,所以之前我對於結合影像的互動表演並沒有太大的意願投入,往往只是教學上的需求使然而從事相關研究。但Chunky Move 的作品卻非常讓我驚豔,youtube 上也博受好評,證明其確實有非常特別的表現力,同時也為互動表演藝術作了一項最好的示範,因此我開始再把以前學過的 Jitter 關於3D 的部分拿來複習,並且把手冊的摘要整理出來,一方面提供自己複習的參考,也順便將 Max/MSP/Jitter 的互動技術介紹給國內的藝術家們。

Chunky Move 的作品雖然無法在網路上看到完整版,但可以看到其畫面的多樣變化,推測其必然是隨著時間不斷演變的,有別於多數互動裝置藝術家從事跨領域的表演藝術創作時,常常忽略時序控制與作品的時間結構。其實,互動音樂系統的設計,常遇到的難題便是時序控制、參數漸進變化的設計的問題,這些概念與經驗將有助於參與互動舞蹈表演的設計。

若有舞蹈者未來想嘗試此類結合互動影音與舞蹈的表演,也期待您能與我聯絡。目前在互動舞蹈表演系統的建立上,尚須要一段時日,有許多視覺特效與即時動畫的技術,也正在逐步準備中。猶如 Chunky Move 舞團的背後互動技術大約花費了六年才趨近成熟與穩定,我心中的這個計畫,也需要透過許多小型的表演計畫來慢慢醞釀,如果你是專業舞者,並且想嘗試不一樣的表演方式,歡迎來信與我聯絡與交流。

2010年2月27日 星期六

Jitter Tutorial 37 Geometry Under the Hood 摘要

  • maxtrixoutput $1 指令用來指定是否GL物件的 geometry 資料是直接在相關的物件中做算圖,或是使其由物件的左下方輸出口送出陣列 (geometry matrix)。一般而言,jitter matrix 是以四個 plane 的 character data 的方式表示,但 geometry matrix 則是以 float32 的格式表示,包含 3, 5, 8, 12, 或 13 個 plane。plane 0-2 指定 x, y, z 的位置,plane 3-4 指定貼圖的座標 s 與  t,plane 5-7 指定 normal vector nx, ny, nz 藉以用來計算燈光效果,plane 8-11 則用來指定 RGBA 的 vertex color,plane 12 指定 edge flag e (註:Edge flags 是用來標明 vertex 是否在 boundary edge 上)。jit.gl.gridshape 的陣列輸出有 12 個 plane,範例中的 plane 3-12被忽略)。
  • 利用 matrixoutput 1 指令連接至 jit.gl.gridshape, jit.gl.nurbs, jit.gl.plato 等物件,可以將3D物件的輸出,轉變成 Jitter 陣列資料,而得以運用非 3D 的 jitter 運算物件來處理之。(p.327)
  • jit_matrix [matrix-name] [drawing primitive] 訊息指令(亦即在陣列的輸出資料之後,補上所指定的圖元)被送往 jit.gl.render 物件時,可以使 jit.gl.redner 依照該指令所指定的圖元(primitive) 來繪圖。若沒有指定圖元時,則會使用當前 jit.gl.render 物件所使用的圖元來繪圖。有效的圖元可包括:points, lines, line_strip, line_loop, triangles, tri_strip, tri_fan, quads, quad_strip, polygon, tri_grid, quad_grid。此時也可以藉由下 dim $1 $2 指令給 jit.gl.gridshape,藉此設定輸出的陣列之維度(預設值為 20 x 20)。
  • jit.gl.handel 直接連接至 jit.gl.render,而非 jit.gl.gridshape ,主要目的在於使 jit.gl.handel 可用來對整體場景做旋轉、位置改變等。 但此時需在 jit.gl.handle 的屬性中加上 inherit_transform 1 訊息指令,以避免旋轉時的算圖上所產生的不正確混淆。

2010年2月25日 星期四

Jitter Tutorial 36 3D Models 摘要

  • Jit.gl.model 可以用來讀取 3D 模型 obj 檔,其為多邊型的集合,關於這些多邊型的資料被記載在 obj 檔案當中。若將 verbose 1 指令送至 jit.gl.model 時,則可以使我們可以在 max 偵錯視窗看到正在讀取的 obj 檔案的相關資訊。然而,在算圖時,並不適合開啟此功能,verbose 1 只適合偵錯時使用。(p.318) (Max/MSP/Jitter 5 版本只支援 vertices, polygons, groups, materials, texutre coordinates ,不支援 nurbs 與 parametric surfaces。)
  • verbose 模式開啟時,所顯示的 "materials: 0" 訊息是表示此3D模型有多少 material 的定義。material 定義可用來指定影響 3D 模型表面顏色的光的參數,包括關於 ambient,  diffuse,  specular 等元素。(p.319)
  • lighting_enable 1 指令送至 jit.gl.model 可開啟所燈光功能, smooth_shading 1 指令送至 jit.gl.model 則柔化 3D 模型的稜角。texture grid 指令則使 jit.gl.model 的3D物件產生格狀材質。(p.321)
  • jit.gl.model 在 tex_map 0 的模式下,材質的座標直接由原本的 3D 模型所決定(亦即材質套在3D模型上的樣貌),藉由修改 tex_map $1 為1~3,則可更改材質套用的方式(分別為 object linear, sphere map, eye linear)。(p.322)
  • 利用 texgroup [group-number][texture-name] 的指令格式,可以指定某個3D模型組要使用哪一個材質。若下 texgroup [group-number] 0 的指令給 jit.gl.model,則被指定的3D模型組,會改用原本預設的整體材質。  (p.323)
  • 多邊形的模型組可以分別繪製,例如送 drawgroup 1 的指令給 jit.gl.model,則只繪製編號為 1 的多邊形模型組,直到接收到下一個 drawgroup 指令時,才更新畫面。藉由此種功能,搭配 drawgroup 編號的快速改變,可以讀進 3D 動畫(亦即將原本動作的每一個畫格,儲存在不同的多邊形模型組中,搭配 counter 物件來快速切換這些模型組,使之以動畫方式呈現。)
  • material_mode 屬性可以用來決定 3D 模型所指定的 materials 在算圖時會應用到何種程度。預設值是 1,此時只有 diffuse 的成分會於算圖時被使用。若改為 material_mode 0,則不會使用該 3D 模型的預設的 material,此種情況下,原本3D物件的顏色屬性則被用來作為 diffuse 的顏色 (p.325 範例中則變為預設值的灰色)。