顯示具有 00160760_吳佶融 標籤的文章。 顯示所有文章
顯示具有 00160760_吳佶融 標籤的文章。 顯示所有文章

2014年6月5日 星期四

week16

#include <GL/glut.h>
#include <math.h>
#include <stdlib.h>
float eyeX=0.1, eyeY=1.4, eyeZ=-0.5, objX=0, objY=0, objZ=0, upX=0, upY=0, upZ=1;
void timer(int t)
{
glutTimerFunc(30, timer, t+1);
eyeX=cos(t/18.0); eyeZ=sin(t/18.0);
eyeY-=0.01;
if(t%2==0) glClearColor((rand()%255)/255.0,(rand()%255)/255.0,(rand()%255)/255.0,0);
glutPostRedisplay();
}
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glutWireSphere(0.2,30,30);
glPopMatrix();
  glutSwapBuffers();
 
gluLookAt(eyeX,eyeY,eyeZ, objX,objY,objZ, upX,upY,upZ);
}
void keyboard(unsigned char key, int x, int y)
{
if(key==' ') eyeX+=0.02;
if(key=='o')
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2, 2, -2, 2, -2, 2);
glMatrixMode(GL_MODELVIEW);
}
else if(key=='c')
{
glutTimerFunc(0 , timer, 0);
}
else if(key=='b')
{
}
glutPostRedisplay();
}
void myLight()
{
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
myLight();

glutMainLoop();
}

2014年5月8日 星期四

WEEK12

#include <GL/glut.h>
#include <opencv/highgui.h>
#include <opencv/cv.h>
IplImage *img1, *img2, *img3, *img4;
GLuint id1,id2,id3,id4;
float angleX=0,cubeangle=0;
void display()
{

glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
    if(key=='a') angleX+=3;
    if(key=='b') angleX-=3;
    if(key=='1') cubeangle+=3;
    if(key=='2') cubeangle-=3;
    glutPostRedisplay();
       
}
void myTexture()
{
img1=cvLoadImage("imgbody,png");
img2=cvLoadImage("imgleg.png");
img3=cvLoadImage("imgarm,png");

cvCvtColor(img1, img1, CV_BGR2RGB);
cvCvtColor(img2, img2, CV_BGR2RGB);
cvCvtColor(img3, img3, CV_BGR2RGB);

glEnable(GL_TEXTURE_2D);
glGenTextures(1, &id1);
glGenTextures(2, &id2);
glGenTextures(3, &id3);

glBindTexture(GL_TEXTURE_2D, id1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img1->width, img1->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img1->imageData);

glBindTexture(GL_TEXTURE_2D, id2);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img2->width, img2->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img2->imageData);

glBindTexture(GL_TEXTURE_2D, id3);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img3->width, img3->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img3->imageData);
}
void myLight()
{
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week12");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
myLight();
glutMainLoop();
}

2014年5月1日 星期四

WEEK11


#include <GL/glut.h>
float angleX=0,cubeangle=0;
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angleX, 0,1,0);
  glutWireTeapot(0.3);
 
  glPushMatrix();
  glTranslatef(0.5,0,0);
  glutSolidSphere(0.2,30,30);
  glPushMatrix();
  glRotatef(cubeangle,0,0,1);
  glScalef(1,0.3,0.3);
  glTranslatef(0.3,0,0);
  glutSolidCube(0.3);
  glPopMatrix();
  glPopMatrix();
 
 
  glPushMatrix();
  glTranslatef(-0.5,0,0);
  glutSolidSphere(0.2,30,30);
  glPushMatrix();
  glRotatef(cubeangle,0,0,1);
  glScalef(1,0.3,0.3);
  glTranslatef(-0.3,0,0);
  glutSolidCube(0.3);
  glPopMatrix();
  glPopMatrix();
 
  glPushMatrix();
  glTranslatef(0,0.3,0);
  glutSolidSphere(0.2,30,30);
  glPopMatrix();
 
  glPushMatrix();
  glTranslatef(0.15,-0.08,0);
  glRotatef(cubeangle,0,0,1);
  glTranslatef(0,-0.25,0);
  glScalef(0.1,0.3,0.1);
  glutSolidCube(1);
  glPopMatrix();
 
 
 
  glPushMatrix();
  glTranslatef(-0.15,-0.08,0);
  glRotatef(cubeangle,0,0,1);
  glTranslatef(0,-0.25,0);
  glScalef(0.1,0.3,0.1);
  glutSolidCube(1);
 
  glPopMatrix();
 
 
 
 
 
  glPopMatrix();
  glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
    if(key=='a') angleX+=3;
    if(key=='b') angleX-=3;
    if(key=='1') cubeangle+=3;
    if(key=='2') cubeangle-=3;
    glutPostRedisplay();
        
}
void myLight()
{
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
  glEnable(GL_LIGHT0);
  glEnable(GL_NORMALIZE);
  glEnable(GL_COLOR_MATERIAL);
  glEnable(GL_LIGHTING);  
  glLightfv(GL_LIGHT0, GL_POSITION, light_position); 
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
  glutCreateWindow("week11");
  glutDisplayFunc(display);
  glutKeyboardFunc(keyboard);
  myLight();
  glutMainLoop();
}



2014年4月24日 星期四

第10周

#include <GL/glut.h>
#include <stdio.h>
float teapotX=0,teapotY=0,angleX=0,startX=0,angleY=0,startY=0;
void keyboard(unsigned char key, int x, int y)
{
printf("%c %d %d\n", key, x, y);
if(key=='a' || key=='A') teapotX+=0.1;
if(key=='b' || key=='B') teapotX-=0.1;
if(key=='c' || key=='C') teapotY+=0.1;
if(key=='d' || key=='D') teapotY-=0.1;
glutPostRedisplay();
}
void mouse(int button, int state, int x, int y)
{
printf("%d %d %d %d\n", button, state , x, y);
startX=x;
startY=y;
}
void motion(int x, int y)
{
printf("%d %d\n", x, y);
angleX+= (x-startX); startX = x;
angleY+= (y-startY); startY = y;
glutPostRedisplay();
}
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(teapotX, teapotY, 0);
glRotatef(angleX, 0, -1, 0);
glRotatef(angleY, -1, 0, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void myLight()
{
const GLfloat light_position[] = {2.0f, 5.0f, -5.0f, 0.0f};
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
myLight();
glutMainLoop();
}





2014年4月10日 星期四

week08

#include<GL/glut.h>
#include<opencv/highgui.h>
#include<opencv/cv.h>
GLUquadric * quad=NULL;
float angle=0;
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();
glRotatef(90,1,0,0);
glRotatef(angle,0,0,1);
gluQuadricTexture(quad, true);
gluSphere(quad, 0.5, 30, 30);
glPopMatrix();
glutSwapBuffers();

}
void idle()
{
angle++;
glutPostRedisplay();
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week08");
glutDisplayFunc(display);
glutIdleFunc(idle);

GLuint id;
IplImage * img = cvLoadImage("earth.jpg");
cvCvtColor(img, img, CV_BGR2RGB);
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);


glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB,img->width,img->height,0,GL_RGB,GL_UNSIGNED_BYTE,img->imageData);

quad = gluNewQuadric();
glutMainLoop();
}

2014年3月27日 星期四

第六周


#include <opencv/highgui.h>
#include <GL/glut.h>
#include <opencv/cv.h>
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.7);
glutSwapBuffers();
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06");
glutDisplayFunc(display);
GLuint id;
IplImage * img = cvLoadImage("earth.jpg");
glEnable(GL_TEXTURE_2D);
glGenTextures(1,&id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB,img->width,img->height,0,GL_RGB,GL_UNSIGNED_BYTE,img->imageData);
glutMainLoop();

}


2014年3月20日 星期四

WEEK05

今天上課目標:
1. 能把 3D模型檔匯入並畫出來 (Maya -> 3D OBJ -> OpenGL 使用 glm 來匯入並畫出來)
2. 上週旋轉, T-R-T
3. 上週作業


http://jsyeh.org/3dcg10
下載 source, data, win32執行檔

TODO: 接下來的目標, 要將 source code 加到你的 Dev C++ 的專案中, 讓你看看怎麼compile別人 GLUT專案。
1. 在 Dev C++ 中, 新增一個 GLUT專案: Dev C++, New-Project, MultiMedia, glut, 存檔在你新增的資料夾中 (ex. 桌面的 01160011test/ 目錄)
2. 到 http://jsyeh.org/3dcg10 裡, 下載 source, data, win32 執行檔
2.1. source.zip 裡面的 glm.c, glm.h, transformation.c 三個檔案, 放到你的專案的目錄資料夾中
2.2. 把 data.zip 裡面的 data/模型檔, 放到你的專案目錄的資料夾中
3. 把剛剛 Dev C++ 左邊專案裡, Remove 舊的 main.cpp, 加入 Add 剛剛解壓縮的 glm.c 及 transformation.c
4. 執行, YA 成功!





2014年3月13日 星期四

第四周

1. http://jsyeh.org/3dcg10
1.1. 下載 windows 的執行檔
1.2. 下載 data 模型資料
1.3. 解壓縮,試著執行 Transformation.exe

TODO: 請跑範例, 了解轉動是怎麼轉的

TODO:
TODO: 加上 glPushMatrix() 及 glPopMatrix() 保護矩陣

TODO: 畫出 3個 Teapot




2014年3月6日 星期四

第三周

今天課程目標
1. 彩色方塊
2. 搭出簡單Robot

TODO: Dev C++ 裝 glut, 跑上週範例

TODO: google 找 NeHe
http://nehe.gamedev.net
找右邊 Lesson 05 (Dev C++ 版)

TODO: 程式碼排版注意事項
1. Dev C++ 的 Tool-Editor設定, 第3個Tab打開, 第4個SmartTab關掉
2. glBegin(..) 到 glEnd() 要加個縮排 (indent)
3. 有時候 會用 glColor3f(....); glVertex3f(...) 合成一行,方便閱讀理解

#include<GL\glut.h>
void display(){
glEnable(GL_DEPTH_TEST);
glRotatef(1, 1, 1, 0);
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f); glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f,1.0f,0.0f); glVertex3f(-1.0f,-1.0f, 1.0f);
glColor3f(0.0f,0.0f,1.0f); glVertex3f( 1.0f,-1.0f, 1.0f);
glColor3f(1.0f,0.0f,0.0f); glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f,0.0f,1.0f); glVertex3f( 1.0f,-1.0f, 1.0f);
glColor3f(0.0f,1.0f,0.0f); glVertex3f( 1.0f,-1.0f, -1.0f);
glColor3f(1.0f,0.0f,0.0f); glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f,1.0f,0.0f); glVertex3f( 1.0f,-1.0f, -1.0f);
glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,-1.0f, -1.0f);
glColor3f(1.0f,0.0f,0.0f); glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f);
glColor3f(0.0f,1.0f,0.0f); glVertex3f(-1.0f,-1.0f, 1.0f);
glEnd();
glutSwapBuffers();
glutPostRedisplay();
}

int main(){
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week03");
glutDisplayFunc(display);
glutMainLoop();
}


2014年2月27日 星期四

WEEK02

#include<GL/glut.h>
void display()
{
glColor3f(1,0,0);
glBegin(GL_POINTS );
glVertex2f(0.7,0.2);
glVertex2f(0,-0.55);
glVertex2f(-0.7,0.2);
glEnd();
 
glutSwapBuffers();
}
main()
{
glutInitDisplayMode(GLUT_DOUBLE);
glutCreateWindow("00160760");
glutDisplayFunc(display);
glutMainLoop();
}


#include<GL/glut.h>
void display()
{
glColor3f(1,1,1);
glBegin(GL_LINE_LOOP );
glVertex2f(0.7,0.2);
glVertex2f(0,-0.55);
glVertex2f(-0.7,0.2);
glVertex2f(-0.35,0.45);
glVertex2f(0.35,0.45);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2f(-0.7,0.2);
glVertex2f(0.7,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.6,0.2);
glVertex2f(-0.25,-0.28);
glVertex2f(-0.25,-0.28);
glVertex2f(-0.45,0.2);
glVertex2f(-0.45,0.2);
glVertex2f(-0.1,-0.28);
glVertex2f(-0.1,-0.28);
glVertex2f(0,0.2);
glVertex2f(0,0.2);
glVertex2f(0.1,-0.28);

glVertex2f(0.1,-0.28);
glVertex2f(0.45,0.2);
glVertex2f(0.45,0.2);
glVertex2f(0.25,-0.28);

glVertex2f(0.25,-0.28);
glVertex2f(0.6,0.2);
glVertex2f(0.6,0.2);
glVertex2f(0.4,0.42);
glVertex2f(0.4,0.42);
glVertex2f(0.45,0.2);
glVertex2f(0.45,0.2);
glVertex2f(0.2,0.41);
glVertex2f(0.2,0.41);
glVertex2f(0,0.2);

glVertex2f(0,0.2);
glVertex2f(-0.2,0.41);

glVertex2f(-0.2,0.41);
glVertex2f(-0.45,0.2);

glVertex2f(-0.45,0.2);
glVertex2f(-0.4,0.42);
glVertex2f(-0.4,0.42);
glVertex2f(-0.6,0.2);
glVertex2f(-0.2,0.41);
glVertex2f(-0.3,0.2);
glVertex2f(0.2,0.41);
glVertex2f(0.3,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.3,0.2);
glVertex2f(0,-0.55);
glVertex2f(0,-0.55);
glVertex2f(-0.3,0.2);
glVertex2f(-0.4,0.42);
glVertex2f(-0.25,0.45);
glVertex2f(0.4,0.42);
glVertex2f(0.25,0.45);
glVertex2f(-0.25,0.45);
glVertex2f(-0.2,0.41);
glVertex2f(0.25,0.45);
glVertex2f(0.2,0.41);
glVertex2f(0.2,0.41);
glVertex2f(0,0.45);
glVertex2f(-0.2,0.41);
glVertex2f(0,0.45);
glEnd();
 
 
 
 
glutSwapBuffers();
}
main()
{
glutInitDisplayMode(GLUT_DOUBLE);
glutCreateWindow("00160760");
glutDisplayFunc(display);
glutMainLoop();
}


2014年2月20日 星期四

第一週



找到旋轉~加分~
人生第一個openGL的程式
#include<GL/glut.h>
void display()
{
glColor3f(0,1,0);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
main()
{
glutInitDisplayMode(GLUT_DOUBLE);
glutCreateWindow("00160760");
glutDisplayFunc(display);
glutMainLoop();
}