1.至https://jsyeh.org/3dcg10/下載 WIN32跟data.zip後解壓縮,並把data丟進去windows裡面。2.至windows資料夾裡開起transformation.exe 執行他 2.1右上角可以切換模型 3根據修改glRotatef的數據,使他跟著座標軸選轉。(這裡採用(0,-1,0)去選轉 是根據像安培右手定則的方式去選轉)
#include <GL/glut.h>void display(){ glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glPushMatrix(); glRotatef(180, 0,0,1); glColor3f( 1, 1, 0); glutSolidTeapot(0.3); glPopMatrix(); glutSwapBuffers();}int main(int argc, char**argv){ glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow("week05-1"); glutDisplayFunc( display ); glutMainLoop();} 4.1新增一個angle再寫一個motion以及滑鼠事件去改變他的轉向 #include <GL/glut.h> float angle=0; void display() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glPushMatrix(); glRotatef(angle, 0,0,1); glColor3f( 1, 1, 0); glutSolidTeapot(0.3); glPopMatrix(); glutSwapBuffers(); } void motion(int x, int y) { angle = x; display(); } int main(int argc, char**argv) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow("week05-1"); glutDisplayFunc( display ); glutMotionFunc(motion); glutMainLoop();
}
5.新增一個oldx去讓他轉#include <GL/glut.h>float angle=0, oldx=0;void display(){ glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glPushMatrix(); glRotatef(angle, 0,0,1); glColor3f( 1, 1, 0); glutSolidTeapot(0.3); glPopMatrix(); glutSwapBuffers();}void mouse(int button, int state, int x, int y){ oldx = x;}void motion(int x, int y){ angle += (x-oldx); oldx = x; display();}int main(int argc, char**argv){ glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow("week05-1"); glutDisplayFunc( display );
glutMouseFunc(mouse); glutMotionFunc(motion); glutMainLoop();}#include <GL/glut.h>#include <stdio.h>int N=0;int x[1000], y[1000];void display(){ glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glBegin(GL_LINE_LOOP); for(int i=0; i<N; i++){ glVertex2f((x[i]-150)/150.0,-(y[i]-150)/150.0); } glEnd(); glutSwapBuffers();}void mouse(int button,int state, int mouseX, int mouseY){ if(state==GLUT_DOWN){ N++; x[N-1]=mouseX; y[N-1]=mouseY; printf("現在按下滑鼠,得到新座標 %d %d\n", x[N-1], y[N-1] ); } display();}int main(int argc, char**argv){ glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow("week05 複習mouse");
glutDisplayFunc( display ); glutMouseFunc(mouse); glutMainLoop();}
#include <GL/glut.h>#include <stdio.h>int N=0;int x[1000], y[1000];void display(){ glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glBegin(GL_LINE_LOOP); for(int i=0; i<N; i++){ glVertex2f((x[i]-150)/150.0,-(y[i]-150)/150.0); } glEnd(); glutSwapBuffers();}//void mouse(int button,int state, int mouseX, int mouseY)void motion(int mouseX, int mouseY){ //if(state==GLUT_DOWN){ N++; x[N-1]=mouseX; y[N-1]=mouseY; printf("現在按下滑鼠,得到新座標 %d %d\n", x[N-1], y[N-1] ); //} display();}int main(int argc, char**argv){ glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow("week05 複習mouse");
glutDisplayFunc( display ); glutMotionFunc(motion); //glutMouseFunc(mouse); glutMainLoop();}
2.1右上角可以切換模型
3根據修改glRotatef的數據,使他跟著座標軸選轉。(這裡採用(0,-1,0)去選轉
是根據像安培右手定則的方式去選轉)
#include <GL/glut.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();
glRotatef(180, 0,0,1);
glColor3f( 1, 1, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("week05-1");
glutDisplayFunc( display );
glutMainLoop();
}
4.1新增一個angle再寫一個motion以及滑鼠事件去改變他的轉向
#include <GL/glut.h>
5.新增一個oldx去讓他轉
float angle=0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();
glRotatef(angle, 0,0,1);
glColor3f( 1, 1, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x, int y)
{
angle = x;
display();
}
int main(int argc, char**argv)
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("week05-1");
glutDisplayFunc( display );
glutMotionFunc(motion);
glutMainLoop();
}
#include <GL/glut.h>
float angle=0, oldx=0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();
glRotatef(angle, 0,0,1);
glColor3f( 1, 1, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
oldx = x;
}
void motion(int x, int y)
{
angle += (x-oldx);
oldx = x;
display();
}
int main(int argc, char**argv)
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("week05-1");
glutDisplayFunc( display );
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
#include <GL/glut.h>
#include <stdio.h>
int N=0;
int x[1000], y[1000];
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glBegin(GL_LINE_LOOP);
for(int i=0; i<N; i++){
glVertex2f((x[i]-150)/150.0,-(y[i]-150)/150.0);
}
glEnd();
glutSwapBuffers();
}
void mouse(int button,int state, int mouseX, int mouseY)
{
if(state==GLUT_DOWN){
N++;
x[N-1]=mouseX;
y[N-1]=mouseY;
printf("現在按下滑鼠,得到新座標 %d %d\n", x[N-1], y[N-1] );
}
display();
}
int main(int argc, char**argv)
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("week05 複習mouse");
glutDisplayFunc( display );
glutMouseFunc(mouse);
glutMainLoop();
}
#include <GL/glut.h>
#include <stdio.h>
int N=0;
int x[1000], y[1000];
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glBegin(GL_LINE_LOOP);
for(int i=0; i<N; i++){
glVertex2f((x[i]-150)/150.0,-(y[i]-150)/150.0);
}
glEnd();
glutSwapBuffers();
}
//void mouse(int button,int state, int mouseX, int mouseY)
void motion(int mouseX, int mouseY)
{
//if(state==GLUT_DOWN){
N++;
x[N-1]=mouseX;
y[N-1]=mouseY;
printf("現在按下滑鼠,得到新座標 %d %d\n", x[N-1], y[N-1] );
//}
display();
}
int main(int argc, char**argv)
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("week05 複習mouse");
glutDisplayFunc( display );
glutMotionFunc(motion);
//glutMouseFunc(mouse);
glutMainLoop();
}

沒有留言:
張貼留言