




2. 主題: 移動、旋轉、縮放
jsyeh.org/3dcg10
旋轉
x軸

y軸

z軸

3. 教材 與 實作
glTranslatef(x,y,z);
glRotatef(角度, x,y,z);
glScalef(x,y,z);
#include <GL/glut.h>
float nowX=0, nowY=0;
void mouse(int button, 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 button, 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( 0, 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();
}
沒有留言:
張貼留言