Projects for CG Class

[Final Project] Head Tracking (using OpenGL, OpenCV, IR LEDs)

Posted in _ by bizkit4cg on January 2, 2009

投影片: http://flickr.com/photos/bizkit/3312826279/

(對我知道我桌子很亂 亂到翻跟斗 別再提醒我了XD)

新增:

增加距離判別

加速:
重寫 display function
改用 IR LED 來定位

Multi-Process

glutTimerFunc

改變場景

改用glFrustum做出非對稱的frustum

依據螢幕大小/眼睛位置/與螢幕距離算出正確的frustun

參考資料:
http://www.orthostereo.com/geometryopengl.html
http://www.cs.uregina.ca/Links/class-info/405/WWW/Lab3/
http://www.felixgers.de/teaching/jogl/perspectiveProjection.html
http://www.polytech.unice.fr/~buffa/cours/synthese_image/DOCS/www.xmission.com/Nate/tutors.html

http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/frustum.html

http://www.tevs.eu/blog_7.html

Advertisements

Project3: 3D 場景 (完成) (更新)

Posted in _ by bizkit4cg on December 20, 2008

網路上似乎 3DS 與 max 格式的 model 比較多 就找了方法來實驗一下OpenGL render 3ds model檔

確定可以之後就開始寫這次的作業

http://tw.youtube.com/watch?v=PuI_Mm1Z6V8

寫了一整天終於完成 後來又捕了地板
Picture 1
Picture 16
Picture 10
Picture 8
Picture 6
Picture 4

實作

  1. 透過 Dice3DS 將 3ds model 轉成 OpenGL Display List
  2. 透過 glScale 來將物件往 x y z 方向拉長(例如吧台原本是矮茶几)
  3. 總共有兩個光源 a.地燈 b.撞球台上方的大燈。b可用鍵盤控制開關,從沙發的光影可以看出兩個光源的位置不同。
  4. 鍵盤控制位置: XYZ方向移動與XYZ方向旋轉。(鍵盤按鍵:ad,ws,qe / jl,ik,8,)

心得

  1. 挖掉兩面牆以及天花板方便檢視
  2. 使用 Display List 顯示/重繪的速度很快,但轉(compile)成Display List要花不少時間
Code:
  • code太髒不好意思open 😦 想看的寄信給我
後來順手讓電扇旋轉 但電腦太爛了 電扇轉不快 也沒辦法錄清晰的畫面下來

Project2: 太陽系

Posted in _ by bizkit4cg on October 13, 2008

Moon

Saturn

GL lighting

GL lighting

實作

  1. 真實公轉角度大多很小(below 15 deg.) 所以乾脆不加角度了
  2. 公轉: 原理非常簡單,用上一個作業的library產生所有星球軌道上的 n 個點的座標 (目前設為先1000),再依據時間與公轉速度決定星球的位置速度是真實的,一秒10天。可以用鍵盤控制停格/加速/減速。
  3. 鍵盤控制位置: XYZ方向移動與XYZ方向旋轉。(鍵盤按鍵:ad,ws,qe / jl,ik,8,)
  4. 鍵盤控制速度: 加速/減速/停格/重置。(鍵盤按鍵: v/c/z/x)

心得

  1. 硬體不夠快,錄影的品質很糟糕。如果把動畫寫成固定的而不是用鍵盤控制,搭配 glGetPixels 函示把 frame dump 出來再 encode 成動畫應該可以克服。
  2. glut 貼 texture 會怪怪的,glu 則沒有遇到問題。
  3. Loading texture 一定不能在 display callback。跟lab1計算座標一樣:應該在init function 做好,再用 glTextureBind 來連結。
  4. 原本星球公轉半徑與星球半徑都用了真實的 data 來畫,但有些星球大小差太多(100X)不方便操作,便稍微調整了幾個星球的半徑跟公轉半徑。
Code:

CG Class Project 1: 2D cartoon figure

Posted in _ by bizkit4cg on October 1, 2008

  • 實作:
  1. 使用的語言為 python 搭配 PyOpenGL 模組,語法與 C/C++ 的 OpenGL library 完全相同。
  2. 以線段逼近橢圓形與圓形,並寫成自己的 function (oval, circle)。function 傳入長短半徑、逼近次數、開始結束角度,回傳一個包含數個 2D 座標的陣列。嘴巴部份也是用這個 function 畫弧線。
  3. 有框線的物件用 GL_LINE_LOOP 與 GL_POLYGON 搭配而成。 (function linedPoly)
  4. 耳朵黃色部份使用自己寫的 function 做平面懸轉。(function D2rotateArray)
  5. 使用 glTranslatef 在不同層面繪圖。
  6. 使用 glRotatef 搭配 glutKeyboardFunc ,使用鍵盤(ad, ws, qe)控制 X, Y, Z 三個方向的旋轉。
  • 心得:
  1. 一開始把計算橢圓圖形的功能與繪圖功能寫在一起,都放在 display callback function 裡。寫玩旋轉之後發現程式反應速度很慢。經過分析後發現時間都花費在計算功能上。所以改將計算功能寫在 myInit() 中,只計算一次,並且把計算結果存在數個陣列中。這樣在 display callback function 不斷的 loop 時,只需要去記憶體中取出算好的座標點,不需要不斷的重覆運算。
  2. 框線是用粗線寬的 GL_LINE_LOOP 做的,效果沒有很好,會看出節點。如果也改成 GL_POLYGON 可能會比較好看。
  • Code:
  1. Main Program: https://bizkit4cg.wordpress.com/project1project1py/
  2. My Library: https://bizkit4cg.wordpress.com/project1libgraphicspy/

 

後來又用現有的架構與 library 寫了個時鐘,比寫卡通人物時容易很多,只改了幾十行 code 就完成了。