2018年1月11日 星期四
2017年12月21日 星期四
2017年12月14日 星期四
2017年12月7日 星期四
week13 HSB顏色、多重貼圖、等速移動
1.色彩模型不只有RGB,還有HSB或CMYK之類的
2.想要多重貼圖
display()裡面:
glPushMatrix();
glTranslatef(0, 0.5, 0);
glBindTexture(GL_TEXTURE_2D, idTeapot);
glutSolidTeapot(0.3);
glPopMatrix();
在main函示裡面讀idTeapot=myTexture("idTeapot.jpg");
3.
在main函式裡,loop前,createwindows後
glutTimerFunc(1000, timer, 0);
timer函式裡面
1.重新拿一個鬧鐘 glutTimerFunc(10, timer, 0);
2.鬧鐘會做什麼事 angle+=3;
3.刷新畫面 glutPostRedisplay();
display函式裡
茶壺要rotate:glRotatef(angle, 0, 1, 0);
最後在外面宣告angle

4.光劍用HSB很好做
2.想要多重貼圖
display()裡面:
glPushMatrix();
glTranslatef(0, 0.5, 0);
glBindTexture(GL_TEXTURE_2D, idTeapot);
glutSolidTeapot(0.3);
glPopMatrix();
在main函示裡面讀idTeapot=myTexture("idTeapot.jpg");
3.
在main函式裡,loop前,createwindows後
glutTimerFunc(1000, timer, 0);
timer函式裡面
1.重新拿一個鬧鐘 glutTimerFunc(10, timer, 0);
2.鬧鐘會做什麼事 angle+=3;
3.刷新畫面 glutPostRedisplay();
display函式裡
茶壺要rotate:glRotatef(angle, 0, 1, 0);
最後在外面宣告angle

4.光劍用HSB很好做
2017年11月30日 星期四
week12-Mocap, Skeleton, Model
2017年11月9日 星期四
week09-Bump Mapping? processing
PImage img;
void setup(){
size(1280, 768);
img=loadImage("error.jpg");
}
void draw(){
// rect(mouseX, mouseY, 50, 50); 畫長方形
image(img, mouseX, mouseY); //畫img
}
Bump Mapping:用法向量和偏微分計算陰影
----------------------------
瑪莉歐小遊戲
int [][]map={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,2,1,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
PImage imgMario, imgBrick, imgQuestion;
boolean marioOnFloor=false;
void setup(){
size(800, 600);
imgMario=loadImage("mario.png");
imgBrick=loadImage("mariobrick.png");
imgQuestion=loadImage("questionblock.png");
}
float marioX=100, marioY=100, marioVX=0, marioVY=0;
void draw(){
background(255);
//for(int x=0; x<18; x++) { image(imgBrick, x*50, 600-50, 50, 50);}
for(int x=0; x<16; x++){
for(int y=0; y<12; y++){
if(map[y][x]==1) image(imgBrick, x*50, y*50, 50, 50);
if(map[y][x]==2) image(imgQuestion, x*50, y*50, 50, 50);
}
}
image(imgMario, marioX, marioY, 100, 100);
marioY += marioVY; marioX += marioVX;
marioVY += 0.98;
if(marioY>=550-80){ marioY=550-80; marioVY=0; marioOnFloor=true;}
}
void keyPressed(){
if(keyCode==UP && marioOnFloor) { marioVY=-17; marioOnFloor=false;}
if(keyCode==RIGHT) marioVX = 5;
if(keyCode==LEFT) marioVX = -5;
}
void keyReleased(){
if(keyCode==RIGHT || keyCode==LEFT) marioVX=0;
}
void setup(){
size(1280, 768);
img=loadImage("error.jpg");
}
void draw(){
// rect(mouseX, mouseY, 50, 50); 畫長方形
image(img, mouseX, mouseY); //畫img
}
Bump Mapping:用法向量和偏微分計算陰影
----------------------------
瑪莉歐小遊戲
int [][]map={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,2,1,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
PImage imgMario, imgBrick, imgQuestion;
boolean marioOnFloor=false;
void setup(){
size(800, 600);
imgMario=loadImage("mario.png");
imgBrick=loadImage("mariobrick.png");
imgQuestion=loadImage("questionblock.png");
}
float marioX=100, marioY=100, marioVX=0, marioVY=0;
void draw(){
background(255);
//for(int x=0; x<18; x++) { image(imgBrick, x*50, 600-50, 50, 50);}
for(int x=0; x<16; x++){
for(int y=0; y<12; y++){
if(map[y][x]==1) image(imgBrick, x*50, y*50, 50, 50);
if(map[y][x]==2) image(imgQuestion, x*50, y*50, 50, 50);
}
}
image(imgMario, marioX, marioY, 100, 100);
marioY += marioVY; marioX += marioVX;
marioVY += 0.98;
if(marioY>=550-80){ marioY=550-80; marioVY=0; marioOnFloor=true;}
}
void keyPressed(){
if(keyCode==UP && marioOnFloor) { marioVY=-17; marioOnFloor=false;}
if(keyCode==RIGHT) marioVX = 5;
if(keyCode==LEFT) marioVX = -5;
}
void keyReleased(){
if(keyCode==RIGHT || keyCode==LEFT) marioVX=0;
}
2017年11月2日 星期四
week08-opencv設定(include, lib, bin三足鼎立)
1.compiler:include

2.link:lib

3.link:lib裡的檔案

4.就可以跑了

新增GLUT專案
套用以上設定
在mian函式裡面加這幾行程式碼
#include <opencv/highgui.h>
int main(int argc, char *argv[])
{
IplImage * img=cvLoadImage("earth.jpg");
cvNamedWindow("OpenCV");
cvShowImage("OpenCV", img);
cvWaitKey(0);
--------------------------
以下補充
--------------------------
用notepad++把路徑改成同一個資料夾

然後把這兩個檔案放進來

2.link:lib

3.link:lib裡的檔案

4.就可以跑了

新增GLUT專案
套用以上設定
在mian函式裡面加這幾行程式碼
#include <opencv/highgui.h>
int main(int argc, char *argv[])
{
IplImage * img=cvLoadImage("earth.jpg");
cvNamedWindow("OpenCV");
cvShowImage("OpenCV", img);
cvWaitKey(0);
--------------------------
以下補充
--------------------------
用notepad++把路徑改成同一個資料夾

然後把這兩個檔案放進來
2017年10月26日 星期四
光影_week07
resize 可以保持大小比例
GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
x y ? ? (好像沒教)
void motion (int x, int y)
{
light_position[0] = (x-110)/5;
light_position[1] = -(y-130)/5;
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glutPostRedisplay();
}
就可以調整光源
超簡單
GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
x y ? ? (好像沒教)
void motion (int x, int y)
{
light_position[0] = (x-110)/5;
light_position[1] = -(y-130)/5;
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glutPostRedisplay();
}
就可以調整光源
超簡單
2017年10月19日 星期四
week06 - shading
position陣列
GLfloat pos[] = { 0.0, 0.0, -1.0, 0.0 };
createwindow之後
放入
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glutDisplayFunc(display);
glEnable(GL_DEPTH_TEST);
mainloop之前

mouse:
button哪個鍵 state 0按下1起來
motion:
滑鼠按下任何一個鍵
-------------------------------------------------------------------------------------
#include <GL/glut.h>
#include "glm.h"
#include <stdio.h>
GLMmodel* pmodel = NULL;
int rotatex=0, rotatey=0, rotatez=0;
int oldX = 0, oldY = 0;
void keyboard(unsigned char key, int x, int y)
{
printf("now: %c (%d %d)\n", key, x, y);
if (key == 'z') { rotatex++; }
if (key == 'x') { rotatey++; }
if (key == 'c') { rotatez++; }
glutPostRedisplay();
}
void mouse(int button, int state, int x, int y)
{
printf("button:%d state:%d (%d %d)\n", button, state, x, y);
if (state == 0)
{
oldX=x;
oldY=y;
}
}
void motion(int x, int y)
{
rotatey += -(x-oldX);
rotatex += -(y-oldY);
oldX=x; oldY=y;
glutPostRedisplay();
}
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);
glPushMatrix();
glRotatef(rotatex, 1, 0, 0);
glRotatef(rotatey, 0, 1, 0);
glRotatef(rotatez, 0, 0, 1);
drawmodel();
glPopMatrix();
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);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
GLfloat pos[] = { 0.0, 0.0, -1.0, 0.0 };
createwindow之後
放入
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glutDisplayFunc(display);
glEnable(GL_DEPTH_TEST);
mainloop之前

mouse:
button哪個鍵 state 0按下1起來
motion:
滑鼠按下任何一個鍵
-------------------------------------------------------------------------------------
#include <GL/glut.h>
#include "glm.h"
#include <stdio.h>
GLMmodel* pmodel = NULL;
int rotatex=0, rotatey=0, rotatez=0;
int oldX = 0, oldY = 0;
void keyboard(unsigned char key, int x, int y)
{
printf("now: %c (%d %d)\n", key, x, y);
if (key == 'z') { rotatex++; }
if (key == 'x') { rotatey++; }
if (key == 'c') { rotatez++; }
glutPostRedisplay();
}
void mouse(int button, int state, int x, int y)
{
printf("button:%d state:%d (%d %d)\n", button, state, x, y);
if (state == 0)
{
oldX=x;
oldY=y;
}
}
void motion(int x, int y)
{
rotatey += -(x-oldX);
rotatex += -(y-oldY);
oldX=x; oldY=y;
glutPostRedisplay();
}
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);
glPushMatrix();
glRotatef(rotatex, 1, 0, 0);
glRotatef(rotatey, 0, 1, 0);
glRotatef(rotatez, 0, 0, 1);
drawmodel();
glPopMatrix();
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);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
2017年10月12日 星期四
week05 - 用別人的程式學習幾行程式碼
2017年10月5日 星期四
week04 - 移動、轉動與縮放
2017年9月28日 星期四
用滑鼠寫程式 week03
2017年9月21日 星期四
GLUT 點.線.面.色彩 week02
1. 設定使用什麼顏色清理背景
glClearColor(0,0,1,0);
2. 設定畫的圖的顏色
glColor3f(R,G,B);
3代表3個數字;f代表0~1的浮點數
3. 開始畫圖
glBegin(GL_POLYGON);
POLYGON代表多邊形
4. 設定點線面的頂點
glVertex3f(0,1,0);
Vertex代表頂點,3f同上
(0,1,0)為x,y,z軸的座標
5. 結束畫圖
glEnd();
------------------------
以下為今天的程式碼
------------------------
void display()
{
glClearColor(0,0,1,0);
//要用什麼顏色清背景,否則預設為黑
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//動作:清理背景
glColor3f(1,0,1);
//3f代表3個參數,f代表float,0~1的浮點數
glutSolidTeapot(0.3);
//使用GLUT外掛
glBegin(GL_POLYGON);
//開始畫圖,多邊形
glVertex3f(1,0,0);
//vertex畫頂點
glVertex3f(0,1,0);
glVertex3f(0,0,1);
glEnd();
//結束畫圖
glutSwapBuffers();
//交換緩衝區(顯示中的背景與緩衝區的背景)
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
//glut initialize = 開始使用GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
//開始設定顯示模式(RGB、雙重緩衝、深度緩衝)
glutCreateWindow("GLUT Shapes");
//建立3D視窗
glutDisplayFunc(display);
//CALL display函式
glutMainLoop();
//迴圈
}
glClearColor(0,0,1,0);
2. 設定畫的圖的顏色
glColor3f(R,G,B);
3代表3個數字;f代表0~1的浮點數
3. 開始畫圖
glBegin(GL_POLYGON);
POLYGON代表多邊形
4. 設定點線面的頂點
glVertex3f(0,1,0);
Vertex代表頂點,3f同上
(0,1,0)為x,y,z軸的座標
5. 結束畫圖
glEnd();
------------------------
以下為今天的程式碼
------------------------
void display()
{
glClearColor(0,0,1,0);
//要用什麼顏色清背景,否則預設為黑
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//動作:清理背景
glColor3f(1,0,1);
//3f代表3個參數,f代表float,0~1的浮點數
glutSolidTeapot(0.3);
//使用GLUT外掛
glBegin(GL_POLYGON);
//開始畫圖,多邊形
glVertex3f(1,0,0);
//vertex畫頂點
glVertex3f(0,1,0);
glVertex3f(0,0,1);
glEnd();
//結束畫圖
glutSwapBuffers();
//交換緩衝區(顯示中的背景與緩衝區的背景)
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
//glut initialize = 開始使用GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
//開始設定顯示模式(RGB、雙重緩衝、深度緩衝)
glutCreateWindow("GLUT Shapes");
//建立3D視窗
glutDisplayFunc(display);
//CALL display函式
glutMainLoop();
//迴圈
}
訂閱:
文章 (Atom)




























