2015年5月8日 星期五

[glsl] vertex 變形測試



download

本來以為要完成這範例,必須要計算圓面上每個vertex跟座標(0,0,0)的夾角

後來才發現原來有gl_normal 這麼好用的function,來計算原始模型法線。

看似很難的效果,在有法線的向量下,原來這麼簡單。






2015年4月18日 星期六

[workshop] 2015 音像實驗工作坊


你說什麼?我不需要聽嗎?
不,那不是你要看的。
那麼我也不需要看嗎?
不,那也不是你將要聽的。

--Aristophanes,《Thesmophoriazzusae》

http://digilog.tw/events/30

預計在五月於DigiLog 開久違的音像課程,相信優秀的場地肯定能讓課程更有趣,所以之前錯過的朋友,快來玩吧~(這一次會教更多與第三方軟體溝通的技巧,包含TouchOSC、Syphon、Arena、以及GLSL等)

(這次錯過,真的很可能又要等一年了喔..)

2014年7月3日 星期四

[QC] 圓表面運動


 延續兩天前的話題,既然連unity都做過圓球表面運動了,那麼很久沒打開都快生鏽發霉的QC(quartz composer)當然也要來一下。QC的優點就是,跟所有的vj軟體配合度都相當高,內部還支援javascript寫作,所以本範例 登"登" ,只花了一個小時就實做出來(對比 unity,我只能嘆聲連連)。
var first=false;
var x;
var y;
var z;

var radius=0.5;
var theta;
var phi;

var VelT;
var VelP;
var num;

var bx1;
var bx2;
var by1;
var by2;
var bz1;
var bz2;

var mySphere=[];
var myLines=[];

function dis(x1,y1,z1,x2,y2,z2){ 
 return Math.sqrt(Math.pow((x1-x2),2)+Math.pow((y1-y2),2)+Math.pow((z1-z2),2));
}

function (__structure myStructures,__structure myStructures2,__number LinesNum) main (__number time,__number numball,__number limit)
{
  var result = new Object();
  myLines=[];
  
  if(num != numball){
    first=true;
    mySphere=[];
    num= numball;
  }
  
  if(first==true){
    for(var i=0;i<num;i++){
      theta=(6.28*(Math.random()));
      phi=(6.28*(Math.random()));
      
      VelT=0.02*(Math.random())+0.01;
      VelP=0.02*(Math.random())+0.01;
      
      x=radius * Math.cos ((theta)) * Math.cos ((phi));
      y=radius * Math.sin ((phi));
      z=radius * Math.sin ((theta)) * Math.cos ((phi));
      
      mySphere.push({ax:x,ay:y,az:z,
             atheta:theta,aphi:phi,
             avelt:VelT,avelp:VelP
             });
      first=false;
    }
  }

  for(var i=0;i<mySphere.length;i++){    
    
    mySphere[i].atheta = mySphere[i].atheta + mySphere[i].avelt ;
    mySphere[i].aphi =    mySphere[i].aphi + mySphere[i].avelp ;
    mySphere[i].ax = radius * Math.cos ((mySphere[i].atheta)) * Math.cos ((mySphere[i].aphi));
    mySphere[i].ay = radius * Math.sin ((mySphere[i].aphi));
    mySphere[i].az = radius * Math.sin ((mySphere[i].atheta)) * Math.cos ((mySphere[i].aphi));  }
    
  for (var i=0; i<mySphere.length; i++) {
    for (var j=i+1; j<mySphere.length; j++) {  
      bx1=mySphere[i].ax;
      by1=mySphere[i].ay;
      bz1=mySphere[i].az;
      bx2=mySphere[j].ax;
      by2=mySphere[j].ay;
      bz2=mySphere[j].az;
    
      if(dis(bx1,by1,bz1,bx2,by2,bz2)<limit){
        myLines.push({lx1:bx1,ly1:by1,lz1:bz1,
              lx2:bx2,ly2:by2,lz2:bz2
                });
  
      }
    }  
  }

  result.myStructures=mySphere;
  result.myStructures2=myLines;
  result.LinesNum=myLines.length;
  return result;
}


本支程式要轉成32位元開啟,然後還要加裝kineme的GL Line 套件。

Download