Week16
反正就是之前得程式碼複製貼上,小葉老師的git hub有更詳細的解說
Step01 點線面色彩
程式碼:
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(0,1,0);
glBegin(GL_POLYGON);
glVertex2f(0.5, 0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(-0.5, -0.5);
glVertex2f(0.5, -0.5);
glEnd();
glColor3f(1,1,0);
glutSolidTeapot( 0.3 );
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMainLoop();
}
#include <GL/glut.h>
float teapotX = 0, teapotY = 0;
void motion(int x, int y)
{
teapotX = (x-150.0)/150.0;
teapotY = (150.0-y)/150.0;
glMatrixMode(GL_MODELVIEW);
glutPostRedisplay();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(teapotX,teapotY,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
#include <GL/glut.h>
float teapotX=0, teapotY=0, angle=0, oldX=0, oldY=0;
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
angle += x - oldX; ///teapotX = (x-150) / 150.0;
oldX = x; ///teapotY = (150-y) / 150.0;
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle, 0, 0, 1); ///glTranslatef(teapotX, teapotY, 0);
glutSolidTeapot( 0.3 );
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
glutMainLoop();
}
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0, angle=0, oldX=0, oldY=0;
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX = (x-150) / 150.0;///angle += x - oldX; ///
teapotY = (150-y) / 150.0;///oldX = x; ///
printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,1,1);
///glTranslatef(....);
///glRotatef(angle, 0, 0, 1);
///glTranslatef(....);
glTranslatef(teapotX, teapotY, 0);
glutSolidTeapot( 0.3 );
glPopMatrix();
glColor3f(0,1,0);
glutSolidTeapot( 0.01 );
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
glutMainLoop();
}
#include "glm.h"
GLMmodel * gundam = NULL;
float teapotX=0, teapotY=0, angle=0, oldX=0, oldY=0;
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX = (x-150) / 150.0;
teapotY = (150-y) / 150.0;
angle += x - oldX;
oldX = x;
printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,0,0);
glScalef(0.03, 0.03, 0.03);
glmDraw(gundam, GLM_MATERIAL);
glPopMatrix();
glColor3f(0,1,0);
glutSolidTeapot( 0.01 );
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
gundam = glmReadOBJ("model/gundam.obj");
glutMainLoop();
}
#include <stdio.h>
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * gundam = NULL;
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
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;
}
float teapotX=0, teapotY=0, angle=0, oldX=0, oldY=0;
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX = (x-150) / 150.0;
teapotY = (150-y) / 150.0;
angle += x - oldX;
oldX = x;
printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,1,1);///glColor3f(1,0,0);
glScalef(0.03, 0.03, 0.03);
glRotatef(angle, 0, 1, 0);
glmDraw(gundam, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glColor3f(0,1,0);
glutSolidTeapot( 0.01 );
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
gundam = glmReadOBJ("model/gundam.obj");
myTexture("model/Diffuse.jpg");
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
#include <stdio.h>
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head = NULL;
GLMmodel * body = NULL; ///GLMmodel * gundam = NULL;
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
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;
}
float teapotX=0, teapotY=0, angle=0, angle2=0, oldX=0, oldY=0; ///有不同
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX += (x - oldX)/10.0; ///有不同
teapotY += (oldY - y)/10.0; ///有不同
angle += x - oldX;
angle2 += y - oldY; ///有不同
oldX = x;
oldY = y; ///有不同
printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,1,1);///glColor3f(1,0,0);
glScalef(0.03, 0.03, 0.03);
///glRotatef(angle, 0, 1, 0);
glmDraw(body, GLM_MATERIAL | GLM_TEXTURE); ///glmDraw(gundam, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
///glTranslatef(+0.000 , +33.200 , 0 );
///glRotatef(angle, 0, 1, 0);
///glRotatef(angle2, 1, 0, 0);
///glTranslatef(-0.000 , -33.200 , 0 );
glTranslatef(teapotX, teapotY, 0);
glmDraw(head, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glColor3f(0,1,0);
glutSolidTeapot( 0.01 );
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
head = glmReadOBJ("model/head.obj");
body = glmReadOBJ("model/body.obj"); ///gundam = glmReadOBJ("model/gundam.obj");
myTexture("model/Diffuse.jpg");
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
#include <stdio.h>
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head = NULL;
GLMmodel * body = NULL; ///GLMmodel * gundam = NULL;
GLMmodel * arm1 = NULL, * arm2 = NULL;
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
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;
}
float teapotX=0, teapotY=0, angle=0, angle2=0, oldX=0, oldY=0; ///有不同
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX += (x - oldX)/10.0; ///有不同
teapotY += (oldY - y)/10.0; ///有不同
angle += x - oldX;
angle2 += y - oldY; ///有不同
oldX = x;
oldY = y; ///有不同
printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glScalef(2,2,2);
glTranslatef(0, -0.4, 0);
glPushMatrix();
glColor3f(1,1,1);///glColor3f(1,0,0);
glScalef(0.03, 0.03, 0.03);
///glRotatef(angle, 0, 1, 0);
glmDraw(body, GLM_MATERIAL | GLM_TEXTURE); ///glmDraw(gundam, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(0.000 , +22.300 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(0.000 , -22.300 , 0 );
///glTranslatef(teapotX, teapotY, 0);
glmDraw(head, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPushMatrix();
glTranslatef(-3.800 , +21.200 , 0 );
glRotatef(angle, 0, 1, 0);
glRotatef(angle2, 1, 0, 0);
glTranslatef(3.800 , -21.200 , 0 );
///glTranslatef(teapotX, teapotY, 0);
glmDraw(arm1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glColor3f(0,1,0);///中心點的位置
glutSolidTeapot( 0.01 );///中心點的位置
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
head = glmReadOBJ("model/head.obj");
body = glmReadOBJ("model/body.obj"); ///gundam = glmReadOBJ("model/gundam.obj");
arm1 = glmReadOBJ("model/arm1.obj");
arm2 = glmReadOBJ("model/arm1.obj");
myTexture("model/Diffuse.jpg");
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
#include <stdio.h>
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head = NULL;
GLMmodel * body = NULL; ///GLMmodel * gundam = NULL;
GLMmodel * arm1 = NULL, * arm2 = NULL;
GLMmodel * hand1 = NULL, * hand2 = NULL;
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
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;
}
float teapotX=0, teapotY=0, angle=0, angle2=0, oldX=0, oldY=0; ///有不同
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX += (x - oldX)/10.0; ///有不同
teapotY += (oldY - y)/10.0; ///有不同
angle += x - oldX;
angle2 += y - oldY; ///有不同
oldX = x;
oldY = y; ///有不同
printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glScalef(2,2,2);
glTranslatef(0, -0.4, 0);
glPushMatrix();
glColor3f(1,1,1);///glColor3f(1,0,0);
glScalef(0.03, 0.03, 0.03);
///glRotatef(angle, 0, 1, 0);
glmDraw(body, GLM_MATERIAL | GLM_TEXTURE); ///glmDraw(gundam, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(0.000 , +22.300 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(0.000 , -22.300 , 0 );
///glTranslatef(teapotX, teapotY, 0);
glmDraw(head, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPushMatrix();
glTranslatef(-3.800 , +21.200 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(3.800 , -21.200 , 0 );
///glTranslatef(teapotX, teapotY, 0);
glmDraw(arm1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-4.300 , +18.600 , 0 );
glRotatef(angle, 0, 1, 0);
glRotatef(angle2, 1, 0, 0);
glTranslatef(4.300 , -18.600 , 0 );
glmDraw(hand1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(+3.800 , +21.200 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(-3.800 , -21.200 , 0 );
///glTranslatef(teapotX, teapotY, 0);
glmDraw(arm2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+4.300 , +18.600 , 0 );
glRotatef(angle, 0, 1, 0);
glRotatef(angle2, 1, 0, 0);
glTranslatef(-4.300 , -18.600 , 0 );
glmDraw(hand2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glColor3f(0,1,0);///中心點的位置
glutSolidTeapot( 0.01 );///中心點的位置
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
head = glmReadOBJ("model/head.obj");
body = glmReadOBJ("model/body.obj"); ///gundam = glmReadOBJ("model/gundam.obj");
arm1 = glmReadOBJ("model/arm1.obj");
arm2 = glmReadOBJ("model/arm2.obj");
hand1 = glmReadOBJ("model/hand1.obj");
hand2 = glmReadOBJ("model/hand2.obj");
myTexture("model/Diffuse.jpg");
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
#include <stdio.h>
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head = NULL;
GLMmodel * body = NULL; ///GLMmodel * gundam = NULL;
GLMmodel * arm1 = NULL, * arm2 = NULL;
GLMmodel * hand1 = NULL, * hand2 = NULL;
GLMmodel * bot = NULL;
GLMmodel * leg1 = NULL, * leg2 = NULL;
GLMmodel * knee1 = NULL, * knee2 = NULL;
GLMmodel * foot1 = NULL, * foot2 = NULL;
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
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;
}
float teapotX=0, teapotY=0, angle=0, angle2=0, oldX=0, oldY=0; ///有不同
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX += (x - oldX)/10.0; ///有不同
teapotY += (oldY - y)/10.0; ///有不同
angle += x - oldX;
angle2 += y - oldY; ///有不同
oldX = x;
oldY = y; ///有不同
printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glScalef(2,2,2);
glTranslatef(0, -0.4, 0);
glPushMatrix();
glColor3f(1,1,1);///glColor3f(1,0,0);
glScalef(0.03, 0.03, 0.03);
///glRotatef(angle, 0, 1, 0);
glmDraw(body, GLM_MATERIAL | GLM_TEXTURE); ///glmDraw(gundam, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(0.000 , +22.300 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(0.000 , -22.300 , 0 );
///glTranslatef(teapotX, teapotY, 0);
glmDraw(head, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPushMatrix();
glTranslatef(-3.800 , +21.200 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(3.800 , -21.200 , 0 );
///glTranslatef(teapotX, teapotY, 0);
glmDraw(arm1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-4.300 , +18.600 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(4.300 , -18.600 , 0 );
glmDraw(hand1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(+3.800 , +21.200 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(-3.800 , -21.200 , 0 );
///glTranslatef(teapotX, teapotY, 0);
glmDraw(arm2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+4.300 , +18.600 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(-4.300 , -18.600 , 0 );
glmDraw(hand2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glmDraw(bot, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();///左大腿
glTranslatef(-2.000 , +14.100 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(2.000 , -14.100 , 0 );
glmDraw(leg1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +10.500 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(2.000 , -10.500 , 0 );
glmDraw(knee1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +3.000 , 0 );
glRotatef(angle, 0, 1, 0);
glRotatef(angle2, 1, 0, 0);
glTranslatef(2.000 , -3.000 , 0 );
glmDraw(foot1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glColor3f(0,1,0);///中心點的位置
glutSolidTeapot( 0.01 );///中心點的位置
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
head = glmReadOBJ("model/head.obj");
body = glmReadOBJ("model/body.obj"); ///gundam = glmReadOBJ("model/gundam.obj");
arm1 = glmReadOBJ("model/arm1.obj");
arm2 = glmReadOBJ("model/arm2.obj");
hand1 = glmReadOBJ("model/hand1.obj");
hand2 = glmReadOBJ("model/hand2.obj");
bot = glmReadOBJ("model/bot.obj");
leg1 = glmReadOBJ("model/leg1.obj");
leg2 = glmReadOBJ("model/leg2.obj");
knee1 = glmReadOBJ("model/knee1.obj");
knee2 = glmReadOBJ("model/knee2.obj");
foot1 = glmReadOBJ("model/foot1.obj");
foot2 = glmReadOBJ("model/foot2.obj");
myTexture("model/Diffuse.jpg");
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
#include <stdio.h>
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head = NULL;
GLMmodel * body = NULL; ///GLMmodel * gundam = NULL;
GLMmodel * arm1 = NULL, * arm2 = NULL;
GLMmodel * hand1 = NULL, * hand2 = NULL;
GLMmodel * bot = NULL;
GLMmodel * leg1 = NULL, * leg2 = NULL;
GLMmodel * knee1 = NULL, * knee2 = NULL;
GLMmodel * foot1 = NULL, * foot2 = NULL;
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
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;
}
float teapotX=0, teapotY=0, angle=0, angle2=0, oldX=0, oldY=0; ///有不同
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX += (x - oldX)/10.0; ///有不同
teapotY += (oldY - y)/10.0; ///有不同
angle += x - oldX;
angle2 += y - oldY; ///有不同
oldX = x;
oldY = y; ///有不同
printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glScalef(2,2,2);
glTranslatef(0, -0.4, 0);
glPushMatrix();
glColor3f(1,1,1);///glColor3f(1,0,0);
glScalef(0.03, 0.03, 0.03);
///glRotatef(angle, 0, 1, 0);
glmDraw(body, GLM_MATERIAL | GLM_TEXTURE); ///glmDraw(gundam, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(0.000 , +22.300 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(0.000 , -22.300 , 0 );
///glTranslatef(teapotX, teapotY, 0);
glmDraw(head, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPushMatrix();
glTranslatef(-3.800 , +21.200 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(3.800 , -21.200 , 0 );
///glTranslatef(teapotX, teapotY, 0);
glmDraw(arm1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-4.300 , +18.600 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(4.300 , -18.600 , 0 );
glmDraw(hand1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(+3.800 , +21.200 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(-3.800 , -21.200 , 0 );
///glTranslatef(teapotX, teapotY, 0);
glmDraw(arm2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+4.300 , +18.600 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(-4.300 , -18.600 , 0 );
glmDraw(hand2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glmDraw(bot, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();///左大腿
glTranslatef(-2.000 , +14.100 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(2.000 , -14.100 , 0 );
glmDraw(leg1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +10.500 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(2.000 , -10.500 , 0 );
glmDraw(knee1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +3.000 , 0 );
glRotatef(angle, 0, 1, 0);
glRotatef(angle2, 1, 0, 0);
glTranslatef(2.000 , -3.000 , 0 );
glmDraw(foot1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPushMatrix();///右大腿
glTranslatef(+2.000 , +14.100 , 0 );
//glRotatef(angle, 0, 1, 0);
//glRotatef(angle2, 1, 0, 0);
glTranslatef(-2.000 , -14.100 , 0 );
glmDraw(leg2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+2.000 , +10.500 , 0 );
glRotatef(angle, 0, 1, 0);
glRotatef(angle2, 1, 0, 0);
glTranslatef(-2.000 , -10.500 , 0 );
glmDraw(knee2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+2.000 , +3.000 , 0 );
glRotatef(angle, 0, 1, 0);
glRotatef(angle2, 1, 0, 0);
glTranslatef(-2.000 , -3.000 , 0 );
glmDraw(foot2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glColor3f(0,1,0);///中心點的位置
glutSolidTeapot( 0.01 );///中心點的位置
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
head = glmReadOBJ("model/head.obj");
body = glmReadOBJ("model/body.obj"); ///gundam = glmReadOBJ("model/gundam.obj");
arm1 = glmReadOBJ("model/arm1.obj");
arm2 = glmReadOBJ("model/arm2.obj");
hand1 = glmReadOBJ("model/hand1.obj");
hand2 = glmReadOBJ("model/hand2.obj");
bot = glmReadOBJ("model/bot.obj");
leg1 = glmReadOBJ("model/leg1.obj");
leg2 = glmReadOBJ("model/leg2.obj");
knee1 = glmReadOBJ("model/knee1.obj");
knee2 = glmReadOBJ("model/knee2.obj");
foot1 = glmReadOBJ("model/foot1.obj");
foot2 = glmReadOBJ("model/foot2.obj");
myTexture("model/Diffuse.jpg");
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
#include <stdio.h>
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head = NULL;
GLMmodel * body = NULL; ///GLMmodel * gundam = NULL;
GLMmodel * arm1 = NULL, * arm2 = NULL;
GLMmodel * hand1 = NULL, * hand2 = NULL;
GLMmodel * bot = NULL;
GLMmodel * leg1 = NULL, * leg2 = NULL;
GLMmodel * knee1 = NULL, * knee2 = NULL;
GLMmodel * foot1 = NULL, * foot2 = NULL;
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
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;
}
float teapotX=0, teapotY=0, oldX=0, oldY=0; ///有不同
float angle[20]={}, angle2[20]={};
int ID=0; ///0:head, 1,2:left, 3,4:right hand, 5,6,7:left leg, 8,9,10:right leg
void keyboard(unsigned char key, int x, int y) {
if(key=='0') ID=0;
if(key=='1') ID=1;
if(key=='2') ID=2;
if(key=='3') ID=3;
if(key=='4') ID=4;
if(key=='5') ID=5;
if(key=='6') ID=6;
if(key=='7') ID=7;
if(key=='8') ID=8;
if(key=='9') ID=9;
}
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX += (x - oldX)/10.0; ///有不同
teapotY += (oldY - y)/10.0; ///有不同
angle[ID] += x - oldX;
angle2[ID] += y - oldY; ///有不同
oldX = x;
oldY = y; ///有不同
printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glScalef(2,2,2);
glTranslatef(0, -0.4, 0);
glPushMatrix();
glColor3f(1,1,1);///glColor3f(1,0,0);
glScalef(0.03, 0.03, 0.03);
glRotatef(90, 0, 1, 0);
glmDraw(body, GLM_MATERIAL | GLM_TEXTURE); ///glmDraw(gundam, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(0.000 , +22.300 , 0 );
glRotatef(angle[0], 0, 1, 0);
glRotatef(angle2[0], 1, 0, 0);
glTranslatef(0.000 , -22.300 , 0 );
glmDraw(head, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPushMatrix();
glTranslatef(-3.800 , +21.200 , 0 );
glRotatef(angle[1], 0, 1, 0);
glRotatef(angle2[1], 1, 0, 0);
glTranslatef(3.800 , -21.200 , 0 );
glmDraw(arm1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-4.300 , +18.600 , 0 );
glRotatef(angle[2], 0, 1, 0);
glRotatef(angle2[2], 1, 0, 0);
glTranslatef(4.300 , -18.600 , 0 );
glmDraw(hand1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(+3.800 , +21.200 , 0 );
glRotatef(angle[3], 0, 1, 0);
glRotatef(angle2[3], 1, 0, 0);
glTranslatef(-3.800 , -21.200 , 0 );
glmDraw(arm2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+4.300 , +18.600 , 0 );
glRotatef(angle[4], 0, 1, 0);
glRotatef(angle2[4], 1, 0, 0);
glTranslatef(-4.300 , -18.600 , 0 );
glmDraw(hand2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glmDraw(bot, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();///左大腿
glTranslatef(-2.000 , +14.100 , 0 );
glRotatef(angle[5], 0, 1, 0);
glRotatef(angle2[5], 1, 0, 0);
glTranslatef(2.000 , -14.100 , 0 );
glmDraw(leg1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +10.500 , 0 );
glRotatef(angle[6], 0, 1, 0);
glRotatef(angle2[6], 1, 0, 0);
glTranslatef(2.000 , -10.500 , 0 );
glmDraw(knee1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +3.000 , 0 );
glRotatef(angle[7], 0, 1, 0);
glRotatef(angle2[7], 1, 0, 0);
glTranslatef(2.000 , -3.000 , 0 );
glmDraw(foot1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPushMatrix();///右大腿
glTranslatef(+2.000 , +14.100 , 0 );
glRotatef(angle[8], 0, 1, 0);
glRotatef(angle2[8], 1, 0, 0);
glTranslatef(-2.000 , -14.100 , 0 );
glmDraw(leg2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+2.000 , +10.500 , 0 );
glRotatef(angle[9], 0, 1, 0);
glRotatef(angle2[9], 1, 0, 0);
glTranslatef(-2.000 , -10.500 , 0 );
glmDraw(knee2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+2.000 , +3.000 , 0 );
glRotatef(angle[10], 0, 1, 0);
glRotatef(angle2[10], 1, 0, 0);
glTranslatef(-2.000 , -3.000 , 0 );
glmDraw(foot2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glColor3f(0,1,0);///中心點的位置
glutSolidTeapot( 0.01 );///中心點的位置
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
head = glmReadOBJ("model/head.obj");
body = glmReadOBJ("model/body.obj"); ///gundam = glmReadOBJ("model/gundam.obj");
arm1 = glmReadOBJ("model/arm1.obj");
arm2 = glmReadOBJ("model/arm2.obj");
hand1 = glmReadOBJ("model/hand1.obj");
hand2 = glmReadOBJ("model/hand2.obj");
bot = glmReadOBJ("model/bot.obj");
leg1 = glmReadOBJ("model/leg1.obj");
leg2 = glmReadOBJ("model/leg2.obj");
knee1 = glmReadOBJ("model/knee1.obj");
knee2 = glmReadOBJ("model/knee2.obj");
foot1 = glmReadOBJ("model/foot1.obj");
foot2 = glmReadOBJ("model/foot2.obj");
myTexture("model/Diffuse.jpg");
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
#include <stdio.h>
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head = NULL;
GLMmodel * body = NULL; ///GLMmodel * gundam = NULL;
GLMmodel * arm1 = NULL, * arm2 = NULL;
GLMmodel * hand1 = NULL, * hand2 = NULL;
GLMmodel * bot = NULL;
GLMmodel * leg1 = NULL, * leg2 = NULL;
GLMmodel * knee1 = NULL, * knee2 = NULL;
GLMmodel * foot1 = NULL, * foot2 = NULL;
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
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;
}
FILE * fin = NULL;
FILE * fout = NULL;
float teapotX=0, teapotY=0, oldX=0, oldY=0; ///有不同
float angle[20]={}, angle2[20]={};
int ID=0; ///0:head, 1,2:left, 3,4:right hand, 5,6,7:left leg, 8,9,10:right leg
void keyboard(unsigned char key, int x, int y) {
if(key=='0') ID=0;
if(key=='1') ID=1;
if(key=='2') ID=2;
if(key=='3') ID=3;
if(key=='4') ID=4;
if(key=='5') ID=5;
if(key=='6') ID=6;
if(key=='7') ID=7;
if(key=='8') ID=8;
if(key=='9') ID=9;
if(key=='s'){ ///save
if(fout==NULL) fout = fopen("motion.txt", "w");
for(int i=0; i<20; i++){
fprintf(fout, "%.2f ", angle[i] );
fprintf(fout, "%.2f ", angle2[i] );
}
fprintf(fout, "\n");
printf("你寫了1行\n");
}
}
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX += (x - oldX)/10.0; ///有不同
teapotY += (oldY - y)/10.0; ///有不同
angle[ID] += x - oldX;
angle2[ID] += y - oldY; ///有不同
oldX = x;
oldY = y; ///有不同
///printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glScalef(2,2,2);
glTranslatef(0, -0.4, 0);
glPushMatrix();
glColor3f(1,1,1);///glColor3f(1,0,0);
glScalef(0.03, 0.03, 0.03);
glRotatef(180, 0, 1, 0);
glmDraw(body, GLM_MATERIAL | GLM_TEXTURE); ///glmDraw(gundam, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(0.000 , +22.300 , 0 );
glRotatef(angle[0], 0, 1, 0);
glRotatef(angle2[0], 1, 0, 0);
glTranslatef(0.000 , -22.300 , 0 );
glmDraw(head, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPushMatrix();
glTranslatef(-3.800 , +21.200 , 0 );
glRotatef(angle[1], 0, 1, 0);
glRotatef(angle2[1], 1, 0, 0);
glTranslatef(3.800 , -21.200 , 0 );
glmDraw(arm1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-4.300 , +18.600 , 0 );
glRotatef(angle[2], 0, 1, 0);
glRotatef(angle2[2], 1, 0, 0);
glTranslatef(4.300 , -18.600 , 0 );
glmDraw(hand1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(+3.800 , +21.200 , 0 );
glRotatef(angle[3], 0, 1, 0);
glRotatef(angle2[3], 1, 0, 0);
glTranslatef(-3.800 , -21.200 , 0 );
glmDraw(arm2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+4.300 , +18.600 , 0 );
glRotatef(angle[4], 0, 1, 0);
glRotatef(angle2[4], 1, 0, 0);
glTranslatef(-4.300 , -18.600 , 0 );
glmDraw(hand2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glmDraw(bot, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();///左大腿
glTranslatef(-2.000 , +14.100 , 0 );
glRotatef(angle[5], 0, 1, 0);
glRotatef(angle2[5], 1, 0, 0);
glTranslatef(2.000 , -14.100 , 0 );
glmDraw(leg1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +10.500 , 0 );
glRotatef(angle[6], 0, 1, 0);
glRotatef(angle2[6], 1, 0, 0);
glTranslatef(2.000 , -10.500 , 0 );
glmDraw(knee1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +3.000 , 0 );
glRotatef(angle[7], 0, 1, 0);
glRotatef(angle2[7], 1, 0, 0);
glTranslatef(2.000 , -3.000 , 0 );
glmDraw(foot1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPushMatrix();///右大腿
glTranslatef(+2.000 , +14.100 , 0 );
glRotatef(angle[8], 0, 1, 0);
glRotatef(angle2[8], 1, 0, 0);
glTranslatef(-2.000 , -14.100 , 0 );
glmDraw(leg2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+2.000 , +10.500 , 0 );
glRotatef(angle[9], 0, 1, 0);
glRotatef(angle2[9], 1, 0, 0);
glTranslatef(-2.000 , -10.500 , 0 );
glmDraw(knee2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+2.000 , +3.000 , 0 );
glRotatef(angle[10], 0, 1, 0);
glRotatef(angle2[10], 1, 0, 0);
glTranslatef(-2.000 , -3.000 , 0 );
glmDraw(foot2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glColor3f(0,1,0);///中心點的位置
glutSolidTeapot( 0.01 );///中心點的位置
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
head = glmReadOBJ("model/head.obj");
body = glmReadOBJ("model/body.obj"); ///gundam = glmReadOBJ("model/gundam.obj");
arm1 = glmReadOBJ("model/arm1.obj");
arm2 = glmReadOBJ("model/arm2.obj");
hand1 = glmReadOBJ("model/hand1.obj");
hand2 = glmReadOBJ("model/hand2.obj");
bot = glmReadOBJ("model/bot.obj");
leg1 = glmReadOBJ("model/leg1.obj");
leg2 = glmReadOBJ("model/leg2.obj");
knee1 = glmReadOBJ("model/knee1.obj");
knee2 = glmReadOBJ("model/knee2.obj");
foot1 = glmReadOBJ("model/foot1.obj");
foot2 = glmReadOBJ("model/foot2.obj");
myTexture("model/Diffuse.jpg");
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
#include <stdio.h>
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head = NULL;
GLMmodel * body = NULL; ///GLMmodel * gundam = NULL;
GLMmodel * arm1 = NULL, * arm2 = NULL;
GLMmodel * hand1 = NULL, * hand2 = NULL;
GLMmodel * bot = NULL;
GLMmodel * leg1 = NULL, * leg2 = NULL;
GLMmodel * knee1 = NULL, * knee2 = NULL;
GLMmodel * foot1 = NULL, * foot2 = NULL;
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
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;
}
FILE * fin = NULL;
FILE * fout = NULL;
float teapotX=0, teapotY=0, oldX=0, oldY=0; ///有不同
float angle[20]={}, angle2[20]={};
int ID=0; ///0:head, 1,2:left, 3,4:right hand, 5,6,7:left leg, 8,9,10:right leg
void keyboard(unsigned char key, int x, int y) {
if(key=='0') ID=0;
if(key=='1') ID=1;
if(key=='2') ID=2;
if(key=='3') ID=3;
if(key=='4') ID=4;
if(key=='5') ID=5;
if(key=='6') ID=6;
if(key=='7') ID=7;
if(key=='8') ID=8;
if(key=='9') ID=9;
if(key=='s'){ ///save
if(fout==NULL) fout = fopen("motion.txt", "w");
for(int i=0; i<20; i++){
fprintf(fout, "%.2f ", angle[i] );
fprintf(fout, "%.2f ", angle2[i] );
}
fprintf(fout, "\n");
printf("你寫了1行\n");
}
if(key=='r'){ ///read
if(fin==NULL) fin = fopen("motion.txt", "r");
for(int i=0; i<20; i++){
fscanf(fin, "%f", &angle[i] );
fscanf(fin, "%f", &angle2[i] );
}
glutPostRedisplay();
}
}
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX += (x - oldX)/10.0; ///有不同
teapotY += (oldY - y)/10.0; ///有不同
angle[ID] += x - oldX;
angle2[ID] += y - oldY; ///有不同
oldX = x;
oldY = y; ///有不同
///printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glScalef(2,2,2);
glTranslatef(0, -0.4, 0);
glPushMatrix();
glColor3f(1,1,1);///glColor3f(1,0,0);
glScalef(0.03, 0.03, 0.03);
glRotatef(180, 0, 1, 0);
glmDraw(body, GLM_MATERIAL | GLM_TEXTURE); ///glmDraw(gundam, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(0.000 , +22.300 , 0 );
glRotatef(angle[0], 0, 1, 0);
glRotatef(angle2[0], 1, 0, 0);
glTranslatef(0.000 , -22.300 , 0 );
glmDraw(head, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPushMatrix();
glTranslatef(-3.800 , +21.200 , 0 );
glRotatef(angle[1], 0, 1, 0);
glRotatef(angle2[1], 1, 0, 0);
glTranslatef(3.800 , -21.200 , 0 );
glmDraw(arm1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-4.300 , +18.600 , 0 );
glRotatef(angle[2], 0, 1, 0);
glRotatef(angle2[2], 1, 0, 0);
glTranslatef(4.300 , -18.600 , 0 );
glmDraw(hand1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(+3.800 , +21.200 , 0 );
glRotatef(angle[3], 0, 1, 0);
glRotatef(angle2[3], 1, 0, 0);
glTranslatef(-3.800 , -21.200 , 0 );
glmDraw(arm2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+4.300 , +18.600 , 0 );
glRotatef(angle[4], 0, 1, 0);
glRotatef(angle2[4], 1, 0, 0);
glTranslatef(-4.300 , -18.600 , 0 );
glmDraw(hand2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glmDraw(bot, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();///左大腿
glTranslatef(-2.000 , +14.100 , 0 );
glRotatef(angle[5], 0, 1, 0);
glRotatef(angle2[5], 1, 0, 0);
glTranslatef(2.000 , -14.100 , 0 );
glmDraw(leg1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +10.500 , 0 );
glRotatef(angle[6], 0, 1, 0);
glRotatef(angle2[6], 1, 0, 0);
glTranslatef(2.000 , -10.500 , 0 );
glmDraw(knee1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +3.000 , 0 );
glRotatef(angle[7], 0, 1, 0);
glRotatef(angle2[7], 1, 0, 0);
glTranslatef(2.000 , -3.000 , 0 );
glmDraw(foot1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPushMatrix();///右大腿
glTranslatef(+2.000 , +14.100 , 0 );
glRotatef(angle[8], 0, 1, 0);
glRotatef(angle2[8], 1, 0, 0);
glTranslatef(-2.000 , -14.100 , 0 );
glmDraw(leg2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+2.000 , +10.500 , 0 );
glRotatef(angle[9], 0, 1, 0);
glRotatef(angle2[9], 1, 0, 0);
glTranslatef(-2.000 , -10.500 , 0 );
glmDraw(knee2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+2.000 , +3.000 , 0 );
glRotatef(angle[10], 0, 1, 0);
glRotatef(angle2[10], 1, 0, 0);
glTranslatef(-2.000 , -3.000 , 0 );
glmDraw(foot2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glColor3f(0,1,0);///中心點的位置
glutSolidTeapot( 0.01 );///中心點的位置
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
head = glmReadOBJ("model/head.obj");
body = glmReadOBJ("model/body.obj"); ///gundam = glmReadOBJ("model/gundam.obj");
arm1 = glmReadOBJ("model/arm1.obj");
arm2 = glmReadOBJ("model/arm2.obj");
hand1 = glmReadOBJ("model/hand1.obj");
hand2 = glmReadOBJ("model/hand2.obj");
bot = glmReadOBJ("model/bot.obj");
leg1 = glmReadOBJ("model/leg1.obj");
leg2 = glmReadOBJ("model/leg2.obj");
knee1 = glmReadOBJ("model/knee1.obj");
knee2 = glmReadOBJ("model/knee2.obj");
foot1 = glmReadOBJ("model/foot1.obj");
foot2 = glmReadOBJ("model/foot2.obj");
myTexture("model/Diffuse.jpg");
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
#include <stdio.h>
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head = NULL;
GLMmodel * body = NULL; ///GLMmodel * gundam = NULL;
GLMmodel * arm1 = NULL, * arm2 = NULL;
GLMmodel * hand1 = NULL, * hand2 = NULL;
GLMmodel * bot = NULL;
GLMmodel * leg1 = NULL, * leg2 = NULL;
GLMmodel * knee1 = NULL, * knee2 = NULL;
GLMmodel * foot1 = NULL, * foot2 = NULL;
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
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;
}
FILE * fin = NULL;
FILE * fout = NULL;
float teapotX=0, teapotY=0, oldX=0, oldY=0; ///有不同
float angle[20]={}, angle2[20]={};
float OldAngle[20]={}, NewAngle[20]={};
float OldAngle2[20]={}, NewAngle2[20]={};
int ID=0; ///0:head, 1,2:left, 3,4:right hand, 5,6,7:left leg, 8,9,10:right leg
void timer(int t) {
glutTimerFunc(20, timer, t+1);
if(t%50==0){ ///新的開始,要讀新的動作
if(fin==NULL) fin = fopen("motion.txt", "r");
for(int i=0; i<20; i++){
OldAngle[i] = NewAngle[i];
OldAngle2[i] = NewAngle2[i];
fscanf(fin, "%f", &NewAngle[i] );
fscanf(fin, "%f", &NewAngle2[i] );
}
}
float alpha = t / 50.0;
for(int i=0; i<20; i++){
angle[i] = alpha * NewAngle[i] + (1-alpha) * OldAngle[i];
angle2[i] = alpha * NewAngle2[i] + (1-alpha) * OldAngle2[i];
}
glutPostRedisplay();
}
void keyboard(unsigned char key, int x, int y) {
if(key=='0') ID=0;
if(key=='1') ID=1;
if(key=='2') ID=2;
if(key=='3') ID=3;
if(key=='4') ID=4;
if(key=='5') ID=5;
if(key=='6') ID=6;
if(key=='7') ID=7;
if(key=='8') ID=8;
if(key=='9') ID=9;
if(key=='s'){ ///save 三選一: save, read, play (重開)
if(fout==NULL) fout = fopen("motion.txt", "w");
for(int i=0; i<20; i++){
fprintf(fout, "%.2f ", angle[i] );
fprintf(fout, "%.2f ", angle2[i] );
}
fprintf(fout, "\n");
printf("你寫了1行\n");
}
if(key=='r'){ ///read 三選一: save, read, play (重開)
if(fin==NULL) fin = fopen("motion.txt", "r");
for(int i=0; i<20; i++){
fscanf(fin, "%f", &angle[i] );
fscanf(fin, "%f", &angle2[i] );
}
glutPostRedisplay();
}
if(key=='p'){ ///play 三選一: save, read, play (重開)
glutTimerFunc(0, timer, 0);
}
}
void mouse(int button, int state, int x, int y) {
oldX = x;
oldY = y;
}
void motion(int x, int y) {
teapotX += (x - oldX)/10.0; ///有不同
teapotY += (oldY - y)/10.0; ///有不同
angle[ID] += x - oldX;
angle2[ID] += y - oldY; ///有不同
oldX = x;
oldY = y; ///有不同
///printf("glTranslatef(%.3f , %.3f , 0 );\n", teapotX, teapotY);
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glScalef(2,2,2);
glTranslatef(0, -0.4, 0);
glPushMatrix();
glColor3f(1,1,1);///glColor3f(1,0,0);
glScalef(0.03, 0.03, 0.03);
glRotatef(180, 0, 1, 0);
glmDraw(body, GLM_MATERIAL | GLM_TEXTURE); ///glmDraw(gundam, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(0.000 , +22.300 , 0 );
glRotatef(angle[0], 0, 1, 0);
glRotatef(angle2[0], 1, 0, 0);
glTranslatef(0.000 , -22.300 , 0 );
glmDraw(head, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPushMatrix();
glTranslatef(-3.800 , +21.200 , 0 );
glRotatef(angle[1], 0, 1, 0);
glRotatef(angle2[1], 1, 0, 0);
glTranslatef(3.800 , -21.200 , 0 );
glmDraw(arm1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-4.300 , +18.600 , 0 );
glRotatef(angle[2], 0, 1, 0);
glRotatef(angle2[2], 1, 0, 0);
glTranslatef(4.300 , -18.600 , 0 );
glmDraw(hand1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(+3.800 , +21.200 , 0 );
glRotatef(angle[3], 0, 1, 0);
glRotatef(angle2[3], 1, 0, 0);
glTranslatef(-3.800 , -21.200 , 0 );
glmDraw(arm2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+4.300 , +18.600 , 0 );
glRotatef(angle[4], 0, 1, 0);
glRotatef(angle2[4], 1, 0, 0);
glTranslatef(-4.300 , -18.600 , 0 );
glmDraw(hand2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glmDraw(bot, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();///左大腿
glTranslatef(-2.000 , +14.100 , 0 );
glRotatef(angle[5], 0, 1, 0);
glRotatef(angle2[5], 1, 0, 0);
glTranslatef(2.000 , -14.100 , 0 );
glmDraw(leg1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +10.500 , 0 );
glRotatef(angle[6], 0, 1, 0);
glRotatef(angle2[6], 1, 0, 0);
glTranslatef(2.000 , -10.500 , 0 );
glmDraw(knee1, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(-2.000 , +3.000 , 0 );
glRotatef(angle[7], 0, 1, 0);
glRotatef(angle2[7], 1, 0, 0);
glTranslatef(2.000 , -3.000 , 0 );
glmDraw(foot1, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPushMatrix();///右大腿
glTranslatef(+2.000 , +14.100 , 0 );
glRotatef(angle[8], 0, 1, 0);
glRotatef(angle2[8], 1, 0, 0);
glTranslatef(-2.000 , -14.100 , 0 );
glmDraw(leg2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+2.000 , +10.500 , 0 );
glRotatef(angle[9], 0, 1, 0);
glRotatef(angle2[9], 1, 0, 0);
glTranslatef(-2.000 , -10.500 , 0 );
glmDraw(knee2, GLM_MATERIAL | GLM_TEXTURE);
glPushMatrix();
glTranslatef(+2.000 , +3.000 , 0 );
glRotatef(angle[10], 0, 1, 0);
glRotatef(angle2[10], 1, 0, 0);
glTranslatef(-2.000 , -3.000 , 0 );
glmDraw(foot2, GLM_MATERIAL | GLM_TEXTURE);
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glColor3f(0,1,0);///中心點的位置
glutSolidTeapot( 0.01 );///中心點的位置
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week16");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
head = glmReadOBJ("model/head.obj");
body = glmReadOBJ("model/body.obj"); ///gundam = glmReadOBJ("model/gundam.obj");
arm1 = glmReadOBJ("model/arm1.obj");
arm2 = glmReadOBJ("model/arm2.obj");
hand1 = glmReadOBJ("model/hand1.obj");
hand2 = glmReadOBJ("model/hand2.obj");
bot = glmReadOBJ("model/bot.obj");
leg1 = glmReadOBJ("model/leg1.obj");
leg2 = glmReadOBJ("model/leg2.obj");
knee1 = glmReadOBJ("model/knee1.obj");
knee2 = glmReadOBJ("model/knee2.obj");
foot1 = glmReadOBJ("model/foot1.obj");
foot2 = glmReadOBJ("model/foot2.obj");
myTexture("model/Diffuse.jpg");
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
上傳檔案git指令
1. git指令2. cd desktop3. git clone https://github.com/evan00405/2023graphicsa4. cd 2023graphicsa5. start .6. git add . 7. git status8. git config --global user.email "evan00405@gmail.com"
9. git config --global user.name "evan00405"
10. git commit -m "week16"
11. git push
1. git指令
2. cd desktop
3. git clone https://github.com/evan00405/2023graphicsa
4. cd 2023graphicsa
5. start .
6. git add .
7. git status
8. git config --global user.email "evan00405@gmail.com"
9. git config --global user.name "evan00405"
10. git commit -m "week16"
11. git push
沒有留言:
張貼留言