討論專題
->共筆連結:https://hackmd.io/s/B1j4leggM
2018年1月13日 星期六
week 18 陳泱竹
Week 18 40447037S王俊隆 40547027S陳泱竹 期末專題展示
一. 作品名稱:穿越蟲洞
二. Demo 影片網址: https://youtu.be/0fA0iP5g7ss
三. 介紹:
駕駛太空船穿越看不見底的超時空蟲洞,使用滑鼠左右搖擺太空船與產生蟲洞空間變化。
四. 細節:
(1) 使用 WebGL (Three.js、TweenMax)
(2) 超時空蟲洞加速效果、震動
(3) 滑鼠晃動使隧道產生空間變化
(4) 除了機體本身的晃動,蟲洞會影響機體的晃動
(5) 畫面數位雜訊效果
(6) 音效使用
五. References
(1) https://clara.io/view/814322ac-5eec-4828-8b25-a85e8c57d6fe
(2) https://youtu.be/gjc2FC3ekNo
(3) https://tympanus.net/codrops/2017/05/09/infinite-tubes-with-three-js/
(4) https://www.youtube.com/watch?v=oXa3iAj4jVI
(5) https://threejs.org/examples/#webgl_postprocessing_glitch
六、學習共筆: https://hackmd.io/s/B1j4leggM
七、注意事項:
(1) 用FireFox開啟
(2) 請注意音量大小
Week 11 陳泱竹
一、在GLUT專檔中加入音效/音樂
(1)程式碼:
專案檔打開後 加入#include<mmsystem.h>
PlaySoundA("file.wav",NULL,SND_ASYNC);
//PlaySoundA("檔名.wav",NULL,SND_ASYNC);==>SYNC不等待同步 ASYC會等音樂播完才繼續
(2)簡化:
#include <GL/glut.h>
#include<mmsystem.h>
#include<stdio.h>
int main()
{
PlaySoundA("1.wav",NULL,SND_ASYC);
printf("*");
return 0;
}
二、在Processing 加入音效
從函式庫中尋找sound,然後選擇其中一種
載完之後可以從範例程式中學他的函式庫用法
(1)程式碼:
專案檔打開後 加入#include<mmsystem.h>
PlaySoundA("file.wav",NULL,SND_ASYNC);
//PlaySoundA("檔名.wav",NULL,SND_ASYNC);==>SYNC不等待同步 ASYC會等音樂播完才繼續
(2)簡化:
#include <GL/glut.h>
#include<mmsystem.h>
#include<stdio.h>
int main()
{
PlaySoundA("1.wav",NULL,SND_ASYC);
printf("*");
return 0;
}
二、在Processing 加入音效
從函式庫中尋找sound,然後選擇其中一種
載完之後可以從範例程式中學他的函式庫用法
Week 10 陳泱竹
(1)老師上課撥放了許多SIGGRAPG ASIA和圖學相關作品的影片,來幫助我們想專題題目
(2)與專題同組學長開始討論我們的專題方向及實作辦法
學習共筆鏈結:https://hackmd.io/s/B1j4leggM
(2)與專題同組學長開始討論我們的專題方向及實作辦法
學習共筆鏈結:https://hackmd.io/s/B1j4leggM
2018年1月12日 星期五
Week 9 陳泱竹
一、Bump Mapping:(利用Processing 編寫)
(1)利用https://www.openprocessing.org/sketch/249457來獲得程式碼
(2)在Processing貼上程式碼:
(3)做出矩形且上色:
size(200,200);
fill(#832121);
rect(50,50,100,100);
(1)利用https://www.openprocessing.org/sketch/249457來獲得程式碼
(2)在Processing貼上程式碼:
(3)做出矩形且上色:
size(200,200);
fill(#832121);
rect(50,50,100,100);
(4)加入圖片:
PImage img=loadImage("1.png");
size(960,640);
fill(#832121);
image(img,0,0,960,640);
(5)移動圖片:
PImage img;
void setup()
{
size(960,640);
img=loadImage("1.png");
}
void draw()
{
background(255);//設定背景顏色 若沒有圖片會重疊
image(img,mouseX,mouseY,96,64);
}
2017年11月3日 星期五
陳泱竹 Week08
1.安裝OpenCV
2.轉動地球
由老師提供的程式碼:
#include <opencv/highgui.h> ///for cvLoadImage()
#include <opencv/cv.h> ///for cvCvtColor()
#include <GL/glut.h> ///3D glut
#include <stdio.h>
GLUquadric * quad;
GLuint id;
float angle=0;
void display()
{ glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///自動轉很帥
glRotatef(90, 1,0,0);
glRotatef(angle, 0,0,1);///自動轉很帥
gluQuadricTexture(quad, 1);
gluSphere(quad, 1, 30, 30);///glutSolidTeapot(0.3);
glPopMatrix();///自動轉很帥
glFlush();
}
void timer(int t)
{ glutTimerFunc(20, timer, 0);/// 1000 msec 50fps:20msec
angle+=1;///自動轉很帥
glutPostRedisplay();
}
int myTexture(char *filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
return id;
}
void myInit()
{ quad = gluNewQuadric();
id = myTexture("earth.jpg");
}
int main(int argc, char**argv)
{ glutInit(&argc, argv);
glutCreateWindow("3D");
glutDisplayFunc(display); ///顯示
glutTimerFunc(0, timer, 0);
myInit(); ///我的 init 初始化 把貼圖準備好 前面OpenCV 2行, 後面 OpenGL 9行
glutMainLoop();
}
2.轉動地球
由老師提供的程式碼:
#include <opencv/highgui.h> ///for cvLoadImage()
#include <opencv/cv.h> ///for cvCvtColor()
#include <GL/glut.h> ///3D glut
#include <stdio.h>
GLUquadric * quad;
GLuint id;
float angle=0;
void display()
{ glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///自動轉很帥
glRotatef(90, 1,0,0);
glRotatef(angle, 0,0,1);///自動轉很帥
gluQuadricTexture(quad, 1);
gluSphere(quad, 1, 30, 30);///glutSolidTeapot(0.3);
glPopMatrix();///自動轉很帥
glFlush();
}
void timer(int t)
{ glutTimerFunc(20, timer, 0);/// 1000 msec 50fps:20msec
angle+=1;///自動轉很帥
glutPostRedisplay();
}
int myTexture(char *filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
return id;
}
void myInit()
{ quad = gluNewQuadric();
id = myTexture("earth.jpg");
}
int main(int argc, char**argv)
{ glutInit(&argc, argv);
glutCreateWindow("3D");
glutDisplayFunc(display); ///顯示
glutTimerFunc(0, timer, 0);
myInit(); ///我的 init 初始化 把貼圖準備好 前面OpenCV 2行, 後面 OpenGL 9行
glutMainLoop();
}
2017年10月26日 星期四
陳泱竹 Week07
1.打光:GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
2.用滑鼠控制光源
void motion(int x,int y)
{
light_position[0]=(x-150)/150.0*2;
light_position[1]=-(y-150)/150.0*2;
glLightfv(GL_LIGHT0,GL_POSITION,light_position);
glutPostRedisplay();
}
2.用滑鼠控制光源
void motion(int x,int y)
{
light_position[0]=(x-150)/150.0*2;
light_position[1]=-(y-150)/150.0*2;
glLightfv(GL_LIGHT0,GL_POSITION,light_position);
glutPostRedisplay();
}
2017年10月19日 星期四
陳泱竹 Week06
1.開啟Lighting 打光:
從老師給的Week05範例中新增以下打光程式碼:
GLfloat pos[] = { 0.0, 0.0, -1.0, 0.0 };///
glEnable(GL_LIGHTING);///開啟打光
glEnable(GL_LIGHT0);///
glLightfv(GL_LIGHT0, GL_POSITION, pos);///
glEnable(GL_DEPTH_TEST);///
從老師給的Week05範例中新增以下打光程式碼:
GLfloat pos[] = { 0.0, 0.0, -1.0, 0.0 };///
glEnable(GL_LIGHTING);///開啟打光
glEnable(GL_LIGHT0);///
glLightfv(GL_LIGHT0, GL_POSITION, pos);///
glEnable(GL_DEPTH_TEST);///
2.用滑鼠跟鍵盤控制:
void keyboard(unsigned char key,int x,int y)
{
printf("now: %c(%d %d)\n",key,x,y);
if(key=='1')rotateX++;
if(key=='2')rotateY++;
if(key=='3')rotateZ++;
glutPostRedisplay();//立即更新畫面
}
void mouse(int button,int state ,int x, int y )
{
if(state==GLUT_DOWN)
{
old_X=x;
old_Y=y;
}
}
void motion(int x,int y)
{
rotateY += -(x-old_X);
rotateX += -(y-old_Y);
old_X=x;
old_Y=y;
glutPostRedisplay();
}
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
配合旋轉
glRotated(rotateX,1,0,0);
glRotated(rotatey,0,1,0);
glRotated(rotatez,0,0,1);
2017年10月12日 星期四
陳泱竹 Week 05
1.複習上周進度(旋轉、縮放、移動)
從老師的網站中下載範例程式:http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
從範例程式中可以清楚明白:旋轉、縮放、移動的運作
2.投影:
gluPerspective(fovy,aspect,zNear,zFar)//視野,y/x比例
3.glOrtho(左,右,上,下,進,遠)
4.gluLookAt(eyex,eyey,eyez
centerx,centery,centerz
upx,upy,upz);
從老師的網站中下載範例程式:http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
從範例程式中可以清楚明白:旋轉、縮放、移動的運作
2.投影:
gluPerspective(fovy,aspect,zNear,zFar)//視野,y/x比例
3.glOrtho(左,右,上,下,進,遠)
4.gluLookAt(eyex,eyey,eyez
centerx,centery,centerz
upx,upy,upz);
2017年10月5日 星期四
陳泱竹 WEEK4
1.開啟新GLUT 專檔
2.更改圖形圖案(轉成茶壺)
程式碼:glutSolidTeapot(1);
3.移動程式碼:glTranslated(X,Y,Z);
轉動程式碼:glRotated(角度,X,Y,Z);(對(X,Y,Z)軸旋轉)
glRotated(變數,X,Y,Z);=>一直轉
4.縮放程式碼:glScalef(X,Y,Z):(X,Y,Z是該方向的分量)
5.備份矩陣: glPushMatrix();
還原矩陣: glPopMatrix();
6.用滑鼠控制(待補)
2.更改圖形圖案(轉成茶壺)
程式碼:glutSolidTeapot(1);
3.移動程式碼:glTranslated(X,Y,Z);
轉動程式碼:glRotated(角度,X,Y,Z);(對(X,Y,Z)軸旋轉)
glRotated(變數,X,Y,Z);=>一直轉
4.縮放程式碼:glScalef(X,Y,Z):(X,Y,Z是該方向的分量)
5.備份矩陣: glPushMatrix();
還原矩陣: glPopMatrix();
6.用滑鼠控制(待補)
2017年9月28日 星期四
陳泱竹 WEEK3
模組資料:http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
1.用3D exploration開啟足球模組
2.另存為OpenGL APP檔
3.用codeblocks開啟新OPENGL專案 ,並將soccer.cpp程式碼取代原main.cpp
4.執行
2017年9月21日 星期四
陳泱竹 Week2
GLUT視窗程式:
#include <GL/glut.h>
void display()
{
glClearColor(1,0,0,0);//標示背景顏色(RGBA)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清背景
glColor3f(0,1,1);//設定前景顏色
//glutSolidTeapot(0.3);//設定形狀:茶壺
glBegin(GL_POLYGON);//開始畫(多邊形)
glVertex3f(0,-1,0);//設定頂點:vertex
glVertex3f(1,1,0);
glVertex3f(-1,1,0);
glEnd();//結束
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");//影像視窗
glutDisplayFunc(display);
glutMainLoop();//執行迴圈
}
2017年9月14日 星期四
訂閱:
文章 (Atom)