2014年5月8日 星期四

Week 12 課堂作業


程式碼內收
木偶圖 : http://down.tutu001.com/d/file/20091226/5e01ba3a4c41ff44b5ee4fb58051afba.jpg

void myTexture()
{
img1 = cvLoadImage("body.png");
img2 = cvLoadImage("hand1.png");
img3 = cvLoadImage("leg1.png");
cvCvtColor(img1, img1, CV_BGR2RGB);
cvCvtColor(img2, img2, CV_BGR2RGB);
cvCvtColor(img3, img3, CV_BGR2RGB);
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &id1);
glGenTextures(1, &id2);
glGenTextures(1, &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);
}

------------------------------------------

#include <GL/glut.h>
#include <opencv/highgui.h>
#include <opencv/cv.h>
IplImage * img[40]; //IplImage *img1, *img2, *img3, *img4; 用陣列簡化
GLuint id[40]; //GLuint id1, id2, id3, id4; 用陣列簡化
float angleX=0;

void myPrepareTexture(int i)
{
cvCvtColor(img[i], img[i], CV_BGR2RGB);
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &id[i]);

glBindTexture(GL_TEXTURE_2D, id[i]);
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[i]->width, img[i]->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img[i]->imageData);

}
void myTexture()
{
img[0] = cvLoadImage("body.png");
img[1] = cvLoadImage("hand1.png");
img[2] = cvLoadImage("leg1.png");
for(int i=0;i<3;i++){
myPrepareTexture(i);
}
}
void myPolygon(int num)
{
glPushMatrix();
glScalef(0.3, 0.8, 0.8);
glBindTexture(GL_TEXTURE_2D, id[num]);
glBegin(GL_POLYGON);
glTexCoord2f(0, 0);   glVertex3f( -0.5,  0.5, 0);
glTexCoord2f(1, 0);   glVertex3f(  0.5,  0.5, 0);  
glTexCoord2f(1, 1);   glVertex3f(  0.5, -0.5, 0);  
glTexCoord2f(0, 1);   glVertex3f( -0.5, -0.5, 0);  
glEnd();
glPopMatrix();
 }
void myBody()
{
myPolygon(0);
}
void myLeg()
{
myPolygon(1);
}
void myHand()
{
myPolygon(2);
}
void display()
{
    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
myBody();
glPushMatrix();
glTranslatef(0.2,0.3,0);//右手
glRotatef(angleX, 0,0,1);
glTranslatef(0, -0.4, 0);
myHand();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.2,0.3,0);//左手
glRotatef(-angleX, 0,0,1);
glTranslatef(0, -0.4, 0);
myHand();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.1,-0.3,0);//左腿
glRotatef(-angleX, 0,0,1);
glTranslatef(0, -0.4, 0);
myLeg();
glPopMatrix();
glPopMatrix();
    glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
    if(key=='a') angleX+=3;
    if(key=='b') angleX-=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("week12");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    myTexture();
    glutMainLoop();
}

沒有留言:

張貼留言