2018年1月11日 星期四
2017年11月30日 星期四
rayㄉweek12
(1) 主題: scene 場景
(2) 主題: Mocap, Skeleton, Model
(3) 期末作品分析和協助
(4) QA
2.搜尋 Filter ->下載Collada
3.文件->範例程序-> Viewer2D
4.
(2) 主題: Mocap, Skeleton, Model
(3) 期末作品分析和協助
(4) QA
(a)使用p語言建立3D模型
1.速寫本-> 引用庫文件->添加庫文件
2.搜尋 Filter ->下載Collada
3.文件->範例程序-> Viewer2D
4.
2017年11月23日 星期四
rayㄉweek10
week11
(1) 主題: 聲音-音效,音樂
(2) 平台: window, Java, p語言
(3) 期末作品 proposal 提案分析
(4) Mocap
#include <mmsystem.h> //使用multimedia system 多媒體檔案
PlaySoundA("file.wav",NULL,SND_SYNC);
SND_SYNC 等同步
SND_ASYNC 不等同步,繼續下一行
#include "CMP3_MCI.h"
CMP3_MCI mp3; ///宣告變數
int main(){
mp3.Load("file.mp3"); ///讀入mp3檔
mp3.Play(); ///播放mp3檔
printf("enter ");
int a;
scanf("%d",&a);
}
下載 p 語言,到文件庫裡下載聲音檔的執行程式
Minim | An audio.........
程式碼
import ddf.minim.*; //use ddf's minim music library
Minim minim; //int a
AudioPlayer player;
AudioPlayer player2;
void setup(){
minim = new Minim(this); //constructor of minim object
player = minim.loadFile("file.mp3"); //minim load to player
player.play();
}
void draw(){
}
(1) 主題: 聲音-音效,音樂
(2) 平台: window, Java, p語言
(3) 期末作品 proposal 提案分析
(4) Mocap
a. 播放wav檔
增加標頭檔#include <mmsystem.h> //使用multimedia system 多媒體檔案
PlaySoundA("file.wav",NULL,SND_SYNC);
SND_SYNC 等同步
SND_ASYNC 不等同步,繼續下一行
b. 播放mp3檔
#include <stdio.h>#include "CMP3_MCI.h"
CMP3_MCI mp3; ///宣告變數
int main(){
mp3.Load("file.mp3"); ///讀入mp3檔
mp3.Play(); ///播放mp3檔
printf("enter ");
int a;
scanf("%d",&a);
}
c.使用p語言播放音樂檔
下載 p 語言,到文件庫裡下載聲音檔的執行程式Minim | An audio.........
程式碼
import ddf.minim.*; //use ddf's minim music library
Minim minim; //int a
AudioPlayer player;
AudioPlayer player2;
void setup(){
minim = new Minim(this); //constructor of minim object
player = minim.loadFile("file.mp3"); //minim load to player
player.play();
}
void draw(){
}
2017年11月16日 星期四
RAYㄉweek10
1. 期末作品分享
2. siggraph
3.影片示範
TODO:
1.下載並執行processing
2.void steup(){
fullscream();
}
void draw(){
if(mousePressed) background(255,0,0);
else
background(0,255,0)
}
2. siggraph
3.影片示範
TODO:
1.下載並執行processing
2.void steup(){
fullscream();
}
void draw(){
if(mousePressed) background(255,0,0);
else
background(0,255,0)
}
2017年11月9日 星期四
rayㄉweek09
2017年11月2日 星期四
rayㄉweek08
1. 主軸: texture 貼圖
2. OpenCV 安裝,讀圖
3. OpenCV 貼圖設定
4. 範例: 轉動地球
2.安裝完成後,打開codeblocks,用console 和c++
程式碼
#include <opencv/highgui.h>
int main(){
IplImage *img=cvLoadImage("world.jpg");
cvNamedWindow("hello opencv");
cvShowImage("hello opencv",img);
cvWaitKey(0);
}
2. OpenCV 安裝,讀圖
3. OpenCV 貼圖設定
4. 範例: 轉動地球
a. 安裝OpenCV ,然後用codeblocks 打開圖檔
1.先下載OpenCV , 安裝時要記得勾選第三步
2.安裝完成後,打開codeblocks,用console 和c++
程式碼
#include <opencv/highgui.h>
int main(){
IplImage *img=cvLoadImage("world.jpg");
cvNamedWindow("hello opencv");
cvShowImage("hello opencv",img);
cvWaitKey(0);
}
b.把openglut和console一起打開
openglut的程式碼
#ifdef __APPLE__
#else
#include <GL/glut.h>
#endif
#include <stdlib.h>
static int slices = 16;
static int stacks = 16;
static void resize(int width, int height)
{
const float ar = (float) width / (float) height;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity() ;
}
static void display(void)
{
const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
const double a = t*90.0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(1,0,0);
glPushMatrix();
glTranslated(-2.4,1.2,-6);
glRotated(60,1,0,0);
glRotated(a,0,0,1);
glutSolidSphere(1,slices,stacks);
glPopMatrix();
glPushMatrix();
glTranslated(0,1.2,-6);
glRotated(60,1,0,0);
glRotated(a,0,0,1);
glutSolidCone(1,1,slices,stacks);
glPopMatrix();
glPushMatrix();
glTranslated(2.4,1.2,-6);
glRotated(60,1,0,0);
glRotated(a,0,0,1);
glutSolidTorus(0.2,0.8,slices,stacks);
glPopMatrix();
glPushMatrix();
glTranslated(-2.4,-1.2,-6);
glRotated(60,1,0,0);
glRotated(a,0,0,1);
glutWireSphere(1,slices,stacks);
glPopMatrix();
glPushMatrix();
glTranslated(0,-1.2,-6);
glRotated(60,1,0,0);
glRotated(a,0,0,1);
glutWireCone(1,1,slices,stacks);
glPopMatrix();
glPushMatrix();
glTranslated(2.4,-1.2,-6);
glRotated(60,1,0,0);
glRotated(a,0,0,1);
glutWireTorus(0.2,0.8,slices,stacks);
glPopMatrix();
glutSwapBuffers();
}
static void key(unsigned char key, int x, int y)
{
switch (key)
{
case 27 :
case 'q':
exit(0);
break;
case '+':
slices++;
stacks++;
break;
case '-':
if (slices>3 && stacks>3)
{
slices--;
stacks--;
}
break;
}
glutPostRedisplay();
}
static void idle(void)
{
glutPostRedisplay();
}
const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
#include <opencv/highgui.h>
int main(int argc, char *argv[])
{
IplImage * img=cvLoadImage("world.jpg");
cvNamedWindow("OpenCV");
cvShowImage("OpenCV", img);
///cvWaitKey(0);
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutReshapeFunc(resize);
glutDisplayFunc(display);
glutKeyboardFunc(key);
glutIdleFunc(idle);
glClearColor(1,1,1,1);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
glutMainLoop();
return EXIT_SUCCESS;
}
c. 讓地圖轉動
程式碼
#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日 星期四
rayㄉweek 7
(1)作業二展示,互評
(2)主題: Mouse,Model,打光 ->用mouse調光源
(3)主題: Lighting打光,Shading光影
(2)主題: Mouse,Model,打光 ->用mouse調光源
(3)主題: Lighting打光,Shading光影
a.用滑鼠調光源
多加程式碼
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);
glutPostOverlayRedisplay();
}
2017年10月19日 星期四
ray ㄉweek06
(1)複習上週進度
(2)編譯上週 transformation 程式 (小心 compiler設定 vs. strdup() )
(3)作業2 : Keyboard, Mouse, 轉動 ,移動
(4)主軸: 打光Lighting
然後就可以正確執行ㄌ
#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel = NULL;
void drawmodel(void)
{
if (!pmodel) {
pmodel = glmReadOBJ("data/al.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}
glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
drawmodel();
glutSwapBuffers();
}
GLfloat pos[]={0.0, 0.0, -1.0, 0.0};
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week05");
glutDisplayFunc(display);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glutDisplayFunc(display);
glutMainLoop();
}
這樣在小黑格就會紀錄所有的輸入拉
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(rotateX, 1,0,0);
glRotatef(rotateY, 0,1,0);
drawmodel();
glutSwapBuffers();
}
這樣就可以順利轉拉
(2)編譯上週 transformation 程式 (小心 compiler設定 vs. strdup() )
(3)作業2 : Keyboard, Mouse, 轉動 ,移動
(4)主軸: 打光Lighting
a.解決上週的問題
把c++11 的勾點掉然後就可以正確執行ㄌ
b.第一步打光
程式碼:#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel = NULL;
void drawmodel(void)
{
if (!pmodel) {
pmodel = glmReadOBJ("data/al.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}
glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
drawmodel();
glutSwapBuffers();
}
GLfloat pos[]={0.0, 0.0, -1.0, 0.0};
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week05");
glutDisplayFunc(display);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glutDisplayFunc(display);
glutMainLoop();
}
c. 紀錄鍵盤和滑鼠輸入的字
多加
void keyboard(unsigned char key, int x, int y){
printf("now: %c (%d %d)\n",key,x,y);
}
void mouse(int botton,int state,int x,int y){
printf("botton: %d state: %d (%d %d)\n",botton,state,x,y);
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week05");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glutDisplayFunc(display);
glutMainLoop();
}
這樣在小黑格就會紀錄所有的輸入拉
D.用鍵盤讓模型轉動
多加程式碼
int rotateX=0,rotateY=0,rotateZ=0;
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 display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(rotateX, 1,0,0);
glRotatef(rotateY, 0,1,0);
drawmodel();
glutSwapBuffers();
}
這樣就可以順利轉拉
E.用滑鼠讓模型轉動
void mouse(int botton,int state,int x,int y){
printf("botton: %d state: %d (%d %d)\n",botton,state,x,y);
if(state==GLUT_DOWN){
oldX=x;
oldY=y;
}
}
void motion(int x,int y){
rotateX += -(y-oldY);
rotateY += -(x-oldX);
oldX=x;
oldY=y;
glutPostRedisplay();
}
2017年10月12日 星期四
rayㄉ第五週
1.複習上週主題(旋轉.etc)
2.主題: viewing
3.範例網址 :http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
4.viewing 相關函式&介紹
5.作業: 利用mouse/keyboard實作
b.把三個檔案解壓所放到同一個資料夾,並執行Transformation.exe
就跑出今天第一個執行結果~
gluPerspective :透式投影法 fovy :視野 aspect: x,y的比例
gluOrtho 垂直透視法 (left , right, bottom , top , near , far)
2.主題: viewing
3.範例網址 :http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
4.viewing 相關函式&介紹
5.作業: 利用mouse/keyboard實作
第一堂
a.到http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 網頁中下載data , windows , glut32b.把三個檔案解壓所放到同一個資料夾,並執行Transformation.exe
就跑出今天第一個執行結果~
第二堂
a.打開projection.exe
gluPerspective :透式投影法 fovy :視野 aspect: x,y的比例
gluOrtho 垂直透視法 (left , right, bottom , top , near , far)
2017年10月5日 星期四
ray ㄉ第四週
1.主題: 移動,旋轉,縮放
2.實作: Translate,Rotate,Scale
3.觀念: 矩陣Matrix,Push,Pop
4.作業: 加入移動,旋轉
1.找到程式碼中的display
2.
以glPushMatrix和glPopMatrix間的程式碼為一個單位
glPushMatrix();
glTranslated(0,1.2,-6); //移動
glRotated(60,1,0,0); //沿著x軸旋轉60度
glRotated(a,0,0,1); //沿著z軸自由旋轉
glColor3f(1,1,0); glutSolidTeapot(1); //加入teapot
glutSolidCone(1,1,slices,stacks);
glPopMatrix();
把茶壺加進去
按下F9茶壺就出來啦~
3.
用 glColor3f 改變顏色
在 glutSolidTeapot(a) a可以改變茶壺大小
4.
當我把旋轉的第一行隱藏
只沿著z軸旋轉
//glRotated(60,1,0,0);
glRotated(a,0,0,1);
5.
加入 glScaled(x,y,z); 可以改變大小
x,y,z 也可以不等量
ex) glScaled(0.2,2,2);
glutMotionFunc(Motion);
2.實作: Translate,Rotate,Scale
3.觀念: 矩陣Matrix,Push,Pop
4.作業: 加入移動,旋轉
1.找到程式碼中的display
2.
以glPushMatrix和glPopMatrix間的程式碼為一個單位
glPushMatrix();
glTranslated(0,1.2,-6); //移動
glRotated(60,1,0,0); //沿著x軸旋轉60度
glRotated(a,0,0,1); //沿著z軸自由旋轉
glColor3f(1,1,0); glutSolidTeapot(1); //加入teapot
glutSolidCone(1,1,slices,stacks);
glPopMatrix();
把茶壺加進去
按下F9茶壺就出來啦~
3.
用 glColor3f 改變顏色
在 glutSolidTeapot(a) a可以改變茶壺大小
4.
當我把旋轉的第一行隱藏
只沿著z軸旋轉
//glRotated(60,1,0,0);
glRotated(a,0,0,1);
5.
加入 glScaled(x,y,z); 可以改變大小
x,y,z 也可以不等量
ex) glScaled(0.2,2,2);
b.移動茶壺
在函式中加入 glutMouseFunc(mouse);glutMotionFunc(Motion);
2017年9月21日 星期四
2017/9/21 week2 rayㄉ筆記
主題 :點、線、面
程式碼:
1.顏色
#include <GL/glut.h>
void display(void)
{
glClearColor(1,0,0,0); //前面三個是自個別代表red,orange,blue的背景顏色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,0,1); //茶壺的顏色
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutMainLoop();
return EXIT_SUCCESS;
}
執行結果:
2. 加三頂點
#include <GL/glut.h>
void display(void)
{
glClearColor(0,1,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,0,1);
glBegin(GL_POLYGON);
glVertex3f(1,1,0); //三頂點
glVertex3f(-1,1,0);
glVertex3f(0,-1,0);
glEnd();
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutMainLoop();
return EXIT_SUCCESS;
}
執行結果:
程式碼:
1.顏色
#include <GL/glut.h>
void display(void)
{
glClearColor(1,0,0,0); //前面三個是自個別代表red,orange,blue的背景顏色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,0,1); //茶壺的顏色
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutMainLoop();
return EXIT_SUCCESS;
}
執行結果:
2. 加三頂點
#include <GL/glut.h>
void display(void)
{
glClearColor(0,1,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,0,1);
glBegin(GL_POLYGON);
glVertex3f(1,1,0); //三頂點
glVertex3f(-1,1,0);
glVertex3f(0,-1,0);
glEnd();
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutMainLoop();
return EXIT_SUCCESS;
}
執行結果:
2017年9月14日 星期四
Ray 的 Week01
訂閱:
文章 (Atom)



















































