1.複製week01十行程式碼再修改做出mouse
#include <GL/glut.h>
void display()
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc,char*argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week03_mouse");
glutDisplayFunc(display);
glutMainLoop();
}
2.用滑鼠寫程式
3.到https://jsyeh.org/3dcg10/下載windows和data
在model區按右鍵能改圖案
可以調整xyz
4.用範例上與moouse的程式碼寫出:
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;
void mouse(int button, int state, int x, int y)
{
teapotX=(x-150)/150.0;
teapotY=-(y-150)/150.0;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glPopMatrix();
glTranslatef(teapotX, teapotY, 0);
glutSolidTeapot( 0.3 );
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03_mouse");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
5.轉動
右手比讚,轉動軸就是拇指,轉動方向是其他手指的轉動方向\
對x軸轉拇指向右
對y軸轉比讚
對負y軸轉比倒讚
對z軸轉拇指指向鼻子
👍👎
6.讓茶壺旋轉
用上一個移動的程式碼修改:
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;
float angle=0;
void mouse(int button, int state, int x, int y)
{
teapotX=(x-150)/150.0;
teapotY=-(y-150)/150.0;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glPopMatrix();
///glTranslatef(teapotX, teapotY, 0);
glRotatef(angle, 0, 0, 1);
glutSolidTeapot( 0.3 );
glutSwapBuffers();
}
void motion(int x, int y)
{
angle=x;
display();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03_mouse");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
用滑鼠拖曳即可讓茶壺旋轉
7.讓茶壺旋轉,按w e控制
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;
float angle=0;
int method=1;
int oldX=0, oldY=0;
void mouse(int button, int state, int x, int y)
{
oldX=x;///teapotX=(x-150)/150.0;
oldY=y;///teapotY=-(y-150)/150.0;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glPopMatrix();
glTranslatef(teapotX, teapotY, 0);
glRotatef(angle, 0, 0, 1);
glutSolidTeapot( 0.3 );
glutSwapBuffers();
}
void motion(int x, int y)
{
if(method==1){
angle+=x-oldX;
}else if(method==2){
teapotX+=(x-oldX)/150.0;
teapotY-=(y-oldY)/150.0;
}
oldX=x;
oldY=y;
display();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='e') method=1;
if(key=='w') method=2;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03_mouse");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
glutMainLoop();
}
沒有留言:
張貼留言