程式碼:
#include<GL/glut.h>
#include<stdio.h>
float rot=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(rot,0,0,1);
glutSolidTeapot(0.1);
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
if(key=='a') rot++;
printf("%f\n",rot);
glutPostRedisplay();
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("text");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
圖片:
旋轉後(按a鍵):
#include<GL/glut.h>
#include<stdio.h>
float rot=0;
void body()
{
glBegin(GL_POLYGON);
glVertex2f(-0.3,-0.1);
glVertex2f(0.3,-0.1);
glVertex2f(0.3,0.1);
glVertex2f(-0.3,0.1);
glEnd();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,1,1);
glutSolidTeapot(0.3);
glRotatef(rot,0,0,1);
glTranslatef(0.3,0.1,0);
glColor3f(1,0,0);
body();
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
if(key=='a') rot++;
printf("%f\n",rot);
glutPostRedisplay();
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("text");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
glPopMatrix();//還原//matrix
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='a') rot++;//按a逆時針走
else if(key=='A') rot--;//按A順時針走
printf("%f\n", rot);
glutPostRedisplay();
}
轉轉長方形:
#include<GL/glut.h>
#include<stdio.h>
float rot=0;
void body()
{
glBegin(GL_POLYGON);
glVertex2f(-0.3,-0.1);
glVertex2f(0.3,-0.1);
glVertex2f(0.3,0.1);
glVertex2f(-0.3,0.1);
glEnd();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,1,1);
glutSolidTeapot(0.3);
glRotatef(rot,0,0,1);
glTranslatef(0.3,0.1,0);
glColor3f(1,0,0);
body();
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
if(key=='a') rot++;
printf("%f\n",rot);
glutPostRedisplay();
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("text");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
圖:
3.移動方形:
程式碼:
#include<GL/glut.h>
#include<stdio.h>
float rot=0;
void body()
{
glBegin(GL_POLYGON);
glVertex2f(-0.3,-0.1);
glVertex2f(0.3,-0.1);
glVertex2f(0.3,0.1);
glVertex2f(-0.3,0.1);
glEnd();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,1,1);
glutSolidTeapot(0.3);
glTranslatef(0.5,0.13,0);//第3步把轉動物體移到右上角
glRotatef(rot,0,0,1);//第1步有個轉動中心
glTranslatef(0.3,0.1,0);//第3步把旋轉中心移動
glColor3f(1,0,0);
body();
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
if(key=='a') rot++;
printf("%f\n",rot);
glutPostRedisplay();
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("text");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
圖:
作業:
#include <GL/glut.h>
#include <stdio.h>
#include <opencv/highgui.h>
#include <opencv/cv.h>
GLuint gun, gundam;
GLuint leftlower;
float rot=0;//角度初始為0
void drawLeftLower()//盾牌
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,leftlower);
glBegin(GL_POLYGON);
glTexCoord2f(0,0);glVertex3f(-0.9,-0.15,0);//貼圖座標
glTexCoord2f(1,0);glVertex3f(0.9,-0.15,0);//貼圖座標
glTexCoord2f(1,1);glVertex3f(0.9,0.15,0);//貼圖座標
glTexCoord2f(0,1);glVertex3f(-0.9,0.15,0);//貼圖座標
glEnd();
}
void drawGun()//槍
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,gun);
glBegin(GL_POLYGON);
glTexCoord2f(0,0);glVertex3f(-1,-0.3,0);//貼圖座標
glTexCoord2f(1,0);glVertex3f(1,-0.3,0);//貼圖座標
glTexCoord2f(1,1);glVertex3f(1,0.3,0);//貼圖座標
glTexCoord2f(0,1);glVertex3f(-1,0.3,0);//貼圖座標
glEnd();
}
void drawGundam()//鋼彈模型
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,gundam);
glBegin(GL_POLYGON);
glTexCoord2f(0,0);glVertex3f(-2,-1,0);//貼圖座標
glTexCoord2f(1,0);glVertex3f(1,-1,0);//貼圖座標
glTexCoord2f(1,1);glVertex3f(1,1,0);//貼圖座標
glTexCoord2f(0,1);glVertex3f(-2,1,0);//貼圖座標
glEnd();
}
void myTexture(GLuint &id, char * filename)
{
//Texture image file by OpenCV
IplImage * img = cvLoadImage(filename);
cvCvtColor(img,img,CV_BGR2RGB);
//Texture image file by OpenGL
glEnable(GL_TEXTURE_2D);
glGenTextures(1,&id);
glBindTexture(GL_TEXTURE_2D,id);
#include <stdio.h>
#include <opencv/highgui.h>
#include <opencv/cv.h>
GLuint gun, gundam;
GLuint leftlower;
float rot=0;//角度初始為0
void drawLeftLower()//盾牌
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,leftlower);
glBegin(GL_POLYGON);
glTexCoord2f(0,0);glVertex3f(-0.9,-0.15,0);//貼圖座標
glTexCoord2f(1,0);glVertex3f(0.9,-0.15,0);//貼圖座標
glTexCoord2f(1,1);glVertex3f(0.9,0.15,0);//貼圖座標
glTexCoord2f(0,1);glVertex3f(-0.9,0.15,0);//貼圖座標
glEnd();
}
void drawGun()//槍
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,gun);
glBegin(GL_POLYGON);
glTexCoord2f(0,0);glVertex3f(-1,-0.3,0);//貼圖座標
glTexCoord2f(1,0);glVertex3f(1,-0.3,0);//貼圖座標
glTexCoord2f(1,1);glVertex3f(1,0.3,0);//貼圖座標
glTexCoord2f(0,1);glVertex3f(-1,0.3,0);//貼圖座標
glEnd();
}
void drawGundam()//鋼彈模型
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,gundam);
glBegin(GL_POLYGON);
glTexCoord2f(0,0);glVertex3f(-2,-1,0);//貼圖座標
glTexCoord2f(1,0);glVertex3f(1,-1,0);//貼圖座標
glTexCoord2f(1,1);glVertex3f(1,1,0);//貼圖座標
glTexCoord2f(0,1);glVertex3f(-2,1,0);//貼圖座標
glEnd();
}
void myTexture(GLuint &id, char * filename)
{
//Texture image file by OpenCV
IplImage * img = cvLoadImage(filename);
cvCvtColor(img,img,CV_BGR2RGB);
//Texture image file by OpenGL
glEnable(GL_TEXTURE_2D);
glGenTextures(1,&id);
glBindTexture(GL_TEXTURE_2D,id);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,img->width,img->height,0,GL_RGB,GL_UNSIGNED_BYTE,img->imageData);
//Texture End
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
drawGundam();
glPushMatrix();//備份matrix
glTranslatef(-1, 0.2,0);//移動旋轉角度位置
glRotatef(rot, 0,0,1);//旋轉角度
glTranslatef(0, 0.2, 0 );//移動圖形
drawGun();//槍
glPopMatrix();//還原//matrix
glPushMatrix();//備份matrix
glTranslatef(0,0,0);//移動旋轉角度位置
glRotatef(rot, 0,0,1);//旋轉角度
glTranslatef(0,0,0);//移動圖形
drawLeftLower();//盾牌
//Texture End
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
drawGundam();
glPushMatrix();//備份matrix
glTranslatef(-1, 0.2,0);//移動旋轉角度位置
glRotatef(rot, 0,0,1);//旋轉角度
glTranslatef(0, 0.2, 0 );//移動圖形
drawGun();//槍
glPopMatrix();//還原//matrix
glPushMatrix();//備份matrix
glTranslatef(0,0,0);//移動旋轉角度位置
glRotatef(rot, 0,0,1);//旋轉角度
glTranslatef(0,0,0);//移動圖形
drawLeftLower();//盾牌
glPopMatrix();//還原//matrix
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='a') rot++;//按a逆時針走
else if(key=='A') rot--;//按A順時針走
printf("%f\n", rot);
glutPostRedisplay();
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("00161081");
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("00161081");
myTexture(gun,"gun.png");
myTexture(gundam,"gundam.png");
myTexture(leftlower, "sh.png");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
myTexture(gundam,"gundam.png");
myTexture(leftlower, "sh.png");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
damo:
沒有留言:
張貼留言