顯示具有 40442059S_呂奕瑾 標籤的文章。 顯示所有文章
顯示具有 40442059S_呂奕瑾 標籤的文章。 顯示所有文章

2017年12月21日 星期四

week15 Anti-alias

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


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

2017年12月14日 星期四

week14_Rasterization

Rasterization:光柵化
把3D的圖片透過光柵投射到2D平面後會呈現的圖像

三個頂點各自設定顏色後內插顏色



兩個三角形的三個頂點各自設定Z軸,會在中間交叉

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很好做

2017年11月30日 星期四

week12-Mocap, Skeleton, Model

Unity v.s. OpenGL

雷亞遊戲:楊善詠
他們不看使用unity的能力,因為大家都會。他們注重C++、C#、圖學等等基本能力


編譯老師的程式
記得把setting裡compiler裡的第二個勾勾給勾掉

用P語言開啟函式庫裡面collada的view2D



老師的檔案
可以用P語言讀取動作捕捉的骨架

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;
}

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++把路徑改成同一個資料夾


然後把這兩個檔案放進來

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();
}

就可以調整光源
超簡單

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();
}

2017年10月12日 星期四

week05 - 用別人的程式學習幾行程式碼

上老師的網站下載後win32, data和glut32.dll之後,
放到把data和glut32.dll放到win32資料夾
打開transformation.exe


glperspective 透視(視野、x, y軸、Z近、Z遠)


glOrtho 正交視角(左右上下近遠)


glfrustum 投影視角(左右上下近遠)


gluLookAt  (視角 x, y, z)
     (人物 x, y, z)
     (鏡頭角度 x, y, z)


有點不知道自己在幹嘛

2017年10月5日 星期四

week04 - 移動、轉動與縮放

glTranslatef(x, y, z); 移動
glRotatef(角度, x, y, z); 轉動
glScalef(x, y, z); 縮放
glPushMatrix(); 備份矩陣
glPopMatrix(); 還原矩陣

改顏色


把roate都註解掉
看不懂的程式碼通通註解掉


第二行rotate會隨t而變動
rotate繞x, y, z軸轉動


讓第三個茶壺繞著1,1,0的軸旋轉


把中間的茶壺的x軸縮放成兩倍


2017年9月28日 星期四

用滑鼠寫程式 week03


學姊的小小兵:讀檔案要把檔案放到freeglut\bin裡面



1. 下載data


2. 下載3d exploration


3. 以3d exploration開啟足球檔案,並另存新檔為CPP

4. 類型選擇sample APP





5.開啟OPENGL專案


6. 把檔名另存新檔成main.cpp,即可執行

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();
          //迴圈
}


openGL week 01