2019年6月6日 星期四

幽羊山之土-Week16_複習

1.Q&A

2.貼圖

到 https://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/
    -->下載 OpenCV-2.1.0-win32-vs2008.exe
安裝 openCV 2.1 後才可以開CodeBlocks ,才能讀到檔(week08










圖片要放在,freeglut\bin

-
之後,開啟GLUT程式 (week01
 進入transmission zero 網站,下載 freeglut 3.0.0 MinGW Package 
 在 CodeBlocks 開啟GLUTproject:

#include <GL/glut.h> #include <opencv/highgui.h> ///OpenCV High GUI讀圖 //貼圖需要它 #include <opencv/cv.h> ///OpenCV cvCvtColor() to convert color//貼圖需要它 ///程式碼是對的, 但是沒有設定好include, lib, bin GLuint id1, id2, id3;///NOW2 //貼圖需要它 float a=0; void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBindTexture(GL_TEXTURE_2D, id1);///id1 for background //貼圖需要它 glBegin(GL_POLYGON); //貼圖需要它 glTexCoord2f(0, 0); glVertex3f(-1, +1, 0); //貼圖需要它 glTexCoord2f(0, 1); glVertex3f(-1, -1, 0); //貼圖需要它 glTexCoord2f(1, 1); glVertex3f(+1, -1, 0); //貼圖需要它 glTexCoord2f(1, 0); glVertex3f(+1, +1, 0); //貼圖需要它 glEnd();//貼圖需要它 glBindTexture(GL_TEXTURE_2D, id3);///id3 for rotating square glPushMatrix(); glTranslatef(0.5, 0.5, 0); glRotatef(a++, 0, 0, 1); glScalef(0.3, 0.3, 0.3); glBegin(GL_POLYGON); glTexCoord2f(0, 0); glVertex3f(-1, +1, 0); glTexCoord2f(0, 1); glVertex3f(-1, -1, 0); glTexCoord2f(1, 1); glVertex3f(+1, -1, 0); glTexCoord2f(1, 0); glVertex3f(+1, +1, 0); glEnd(); glPopMatrix(); glBindTexture(GL_TEXTURE_2D, id2);///id2 for teapot glutSolidTeapot( 0.3 ); glutSwapBuffers(); } ///void myInit() GLuint myTexture(char * filename) //貼圖需要它 { IplImage * img = cvLoadImage(filename); ///NOW OpenCV //貼圖需要它 cvCvtColor(img, img, CV_BGR2RGB);///convert color ///NOW OpenCV //貼圖需要它 GLuint id; ///貼圖需要它 glEnable(GL_TEXTURE_2D); ///貼圖需要它 glGenTextures(1, &id ); ///貼圖需要它 glBindTexture(GL_TEXTURE_2D, id); ///貼圖需要它 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); ///貼圖需要它 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); ///貼圖需要它 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;///貼圖需要它 } int main(int argc, char **argv) { ///IplImage * img = cvLoadImage("marvel.jpg"); ///cvShowImage("opencv", img); ///cvWaitKey(0);///等你按按鍵 glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH); glutCreateWindow("GLUT");///之後 ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖) id1 = myTexture("marvel.jpg"); ///myInit();///我們的貼圖在這裡 ///貼圖需要它 id2 = myTexture("teapot.jpg"); id3 = myTexture("square.jpg"); glutDisplayFunc(display); glutIdleFunc(display); glutMainLoop();///之前 }



3.glm秀模型/打光, obj色彩正確

#include <GL/glut.h> #include <opencv/highgui.h> ///OpenCV High GUI讀圖 ///貼圖需要它 #include <opencv/cv.h> ///OpenCV cvCvtColor() to convert color///貼圖需要它 ///程式碼是對的, 但是沒有設定好include, lib, bin GLuint id1, id2, id3;///NOW2 ///貼圖需要它 float a=0; #include "glm.h"///呼叫外掛 ///glm需要它 GLMmodel * pmodel=NULL;///準備指標 ///glm需要它 GLMmodel * pmodel2=NULL;///準備指標 ///glm需要它 GLMmodel * pmodel3=NULL;///準備指標 ///glm需要它 GLMmodel * pmodel4=NULL;///準備指標 ///glm需要它 void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, id1);///id1 for background ///貼圖需要它 glBegin(GL_POLYGON); ///貼圖需要它 glTexCoord2f(0, 0); glVertex3f(-1, +1, -1); ///貼圖需要它 glTexCoord2f(0, 1); glVertex3f(-1, -1, -1); ///貼圖需要它 glTexCoord2f(1, 1); glVertex3f(+1, -1, -1); ///貼圖需要它 glTexCoord2f(1, 0); glVertex3f(+1, +1, -1); ///貼圖需要它 glEnd();///貼圖需要它 if (!pmodel) { ///glm需要它 pmodel = glmReadOBJ("body.obj"); ///glm需要它 if (!pmodel) exit(0); ///glm需要它 ///glmUnitize(pmodel); ///glm需要它 glmFacetNormals(pmodel); ///glm需要它 glmVertexNormals(pmodel, 90.0); ///glm需要它 } glDisable(GL_TEXTURE_2D); glPushMatrix(); glRotatef(a++, 0,1,0); glScalef(0.2, 0.2, 0.2); glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL); glPopMatrix(); if (!pmodel2) { ///glm需要它 pmodel2 = glmReadOBJ("head.obj"); ///glm需要它 if (!pmodel2) exit(0); ///glm需要它 ///glmUnitize(pmodel2); ///glm需要它 glmFacetNormals(pmodel2); ///glm需要它 glmVertexNormals(pmodel2, 90.0); ///glm需要它 } glDisable(GL_TEXTURE_2D); glPushMatrix(); glRotatef(a, 0,1,0); glScalef(0.2, 0.2, 0.2); glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL); glPopMatrix(); glutSwapBuffers(); } ///void myInit() GLuint myTexture(char * filename) ///貼圖需要它 { IplImage * img = cvLoadImage(filename); ///NOW OpenCV ///貼圖需要它 cvCvtColor(img, img, CV_BGR2RGB);///convert color ///NOW OpenCV ///貼圖需要它 GLuint id; ///貼圖需要它 glEnable(GL_TEXTURE_2D); ///貼圖需要它 glGenTextures(1, &id ); ///貼圖需要它 glBindTexture(GL_TEXTURE_2D, id); ///貼圖需要它 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); ///貼圖需要它 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); ///貼圖需要它 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;///貼圖需要它 } const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; ///glm需要它 const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它 const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它 const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f }; ///glm需要它 int main(int argc, char **argv) { ///IplImage * img = cvLoadImage("marvel.jpg"); ///cvShowImage("opencv", img); ///cvWaitKey(0);///等你按按鍵 glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH); glutCreateWindow("GLUT");///之後 ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖) id1 = myTexture("marvel.jpg"); ///myInit();///我們的貼圖在這裡 ///貼圖需要它 id2 = myTexture("teapot.jpg"); id3 = myTexture("square.jpg"); glutDisplayFunc(display); glutIdleFunc(display); glEnable(GL_DEPTH_TEST); ///glm需要它 glEnable(GL_LIGHT0); ///glm需要它 glEnable(GL_NORMALIZE); ///glm需要它 glEnable(GL_COLOR_MATERIAL); ///glm需要它 glEnable(GL_LIGHTING); ///glm需要它 glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); ///glm需要它 glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); ///glm需要它 glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); ///glm需要它 glLightfv(GL_LIGHT0, GL_POSITION, light_position); ///glm需要它 glMatrixMode(GL_PROJECTION); ///投影矩陣相關 戴好我們的正確度數的眼睛 glLoadIdentity(); ///投影矩陣相關 戴好我們的正確度數的眼睛 glOrtho(-1,+1, -1,+1, -100,+100); ///投影矩陣相關 戴好我們的正確度數的眼睛 glMatrixMode(GL_MODELVIEW); ///投影矩陣相關 切換回我們正確的矩陣 glutMainLoop();///之前 }

沒有留言:

張貼留言