




2. 主題: 移動、旋轉、縮放

glTranslatef(x,y,z) x左右移動 y上下移動 z前後移動
3. 教材 與 實作
glTranslatef(x,y,z);
glRotatef(角度, x,y,z);
glScalef(x,y,z);
每點一次向上移動一次
#include <GL/glut.h>
void display()
{
glClearColor(1,1,0,1);
glClear(GL_COLOR_BUFFER_BIT);
glTranslatef(0,0.2,0);
glColor3f(1,0,0);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("hello3D");
glutDisplayFunc(display);
glutMainLoop();
}


移動到滑鼠點的地方
#include <GL/glut.h>
float nowX=0,nowY=0;
void mouse(int butten,int state,int x,int y)
{
nowX=(x-150)/150.0; nowY= -(y-150)/150.0;
}
void display()
{
glClearColor(1,1,0,1);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(nowX,nowY,0);
glColor3f(1,0,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("hello3D");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}

4. Mouse進階
圓形
#include <GL/glut.h>
#include <stdio.h>
#include <math.h>
float nowX=0,nowY=0;
void mouse(int butten,int state,int x,int y)
{
nowX=(x-150)/150.0; nowY= -(y-150)/150.0;
printf("glTranslatef(%f,%f, 0\n",nowX,nowY);
}
void display()
{
glClearColor(1,1,0,1);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(nowX,nowY,0);
glColor3f(1,0,0);
glBegin(GL_POLYGON);
for(float angle=0; angle< 3.14159265358979*2; angle+=0.1){
glVertex2f(0.2*cos(angle),0.2*sin(angle) );
}
glEnd();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("hello3D");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
沒有留言:
張貼留言