2017年12月21日 星期四

[耍廢]WEEK12

myGL_Frustrum221編譯且執行
1. 至moodle 下載myGL_Frustrum221壓縮檔,解壓縮

2. 建立GLUT專案檔
    解壓縮後資料夾裡的程式碼 複製至專案檔中

3. 出現問題 : freeglut ERROR: Function called without first calling 'glutInit'
    解決方法 :
A.int main(int argc,char *argv[]) 補上
                      B. glutInit( & argc, argv );這行指令加在main裡面)

LLF的計圖學習筆記_Week_15

主題:Antialias

原因:取樣誤差(精細度不夠)

解決方法:利用人類的視覺誤差

Mengting計圖筆記Week14

主題:

1. 期末作品Q & A

2. Rasterization光柵化(OpenGL、WebGL)


張鈞法老師上課投影片

Rasterization光柵化

將向量圖格式表示的圖像轉換成點陣圖,最基礎的柵格化算法將多邊形表示的三維場景渲染到二維表面。(參考wiki)


繪製三角形



繪製實心三角形

stroke改成fill


繪製重疊三角形






void setup(){
 size(600,600,P3D);
}
void draw(){
 background(255);
 beginShape(TRIANGLE);
   fill(255,0,0); vertex(100,100,0);
   fill(255,0,255); vertex(100,500,100);
   fill(255,255,0); vertex(500,500,0);
 endShape();
 beginShape(TRIANGLE);
   fill(0,255,0); vertex(500,100,0);
   fill(0,255,255); vertex(500,500,10);
   fill(255,255,0); vertex(100,500,0);
 endShape();
}


3D Mario 程式解說




ㄅㄏ的OpenGL_glut_Week_15

Anti-Aliasing(AA)
中文翻譯作反鋸齒
1. 因為取樣頻率過低或不足造成圖像的失真 看起來就像有鋸齒 波浪等形狀(Aliasing)
2. 可用許多Anti-Aliasing技術來修正

Dither  抖動
是在數位訊號處理領域的中一項用於降低量化誤差的技術。抖動常用於音影片處理,且是CD壓制過程的最後一步。經過抖動處理過的音樂,將聽起來更柔順、背景更黑;而經過抖動處理過的影像,也會更加地柔順耐看。

抖動最重要的用途之一是將灰階圖像轉為黑白。通過使用抖動演算法,可以令黑白圖案的黑點密度接近原圖案的大致灰度。          ( FROM WIKI)

week15 Anti-alias

因為取樣的限制,取樣率不夠高時可能會使圖案產生嚴重偏差
所以使用Anti-alias技術


今天更改期末專題題目
改為3D音樂節奏遊戲

[耍廢]WEEK11

播放MP3音樂檔
------記得將音樂放到執行檔底下
加入CMP3_MCI.h
#include <stdio.h>
#include "CMP3_MCI.h" ///在FB下載
CMP3_MCI mp3;/// int a; 宣告變數
int main(int argc, char *argv[])
{
    //PlaySound("Femaleha.wav",NULL,SND_ASYNC);
    mp3.Load ("KatawareDoki.mp3");  //讀入mp3檔
    mp3.Play ();  //播放mp3檔
    printf("現在在待輸入a\n");
    int a;

    scanf("%d", &a);///等待輸入時,程式還沒結束
    ......
}

[耍廢]WEEK10

用 processing寫 android app

1. 將 processing 右上角的 java改成app mode
(要下載 android模式)
自動安裝 Android SDK NDK)
可以與手機互動
2.
2.偵測碰撞遊戲:

void setup(){
size(500,500);
}
float ballX=250,ballY=450, ballVX=1, ballVY=10;
float ball2X=250, ball2Y=50;
void draw(){
if(ballX>450||ballX<50) //牆壁
    ballVX=-ballVX;
if(ballY>450 || ballY<50) //牆壁
    ballVY=-ballVY;
if( dist(ballX, ballY, ball2X, ball2Y)<100 ){
float cx=(ballX+ball2X)/2, cy=(ballY+ball2Y)/2;
float nx=ballX-ball2X, ny=ballY-ball2Y;
PVector N=new PVector(nx,ny);
N.normalize();
PVector v0=new PVector(ballVX, ballVY);
float len= -N.dot(v0);
v0.add(N.mult(len*2));
ellipse(cx, cy, 10,10);
stroke(0); line(ballX, ballY, ball2X, ball2Y);
stroke(255,128,0); line(cx,cy, cx+5*ballVX, cy+5*ballVY);
stroke(255,128,0); line(cx,cy, cx+5*v0.x, cy+5*v0.y);
stroke(255,0,0); line(cx,cy, cx+N.x, cy+N.y);
//return;
ballVX=v0.x; ballVY=v0.y;
}
background(255);
ballX+=ballVX; ballY+=ballVY;
ellipse(ballX, ballY, 100,100);
ellipse(ball2X, ball2Y, 100,100);
}