第一節:
1.去網頁https://jsyeh.org/3dcg10/
2.下載win32 和 data
3.解壓縮兩個檔案
4.將解壓縮完的data拉進windows資料夾
6.點開Transformation
完成!!!
-----------------------------------------------------------------------------------------------------------------------------
第二節1.單個茶壺的移動
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslated( 0.3,0.2,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("HW2 bonus");
glutDisplayFunc(display);
glutMainLoop();
}
2.多個茶壺的移動
#include <GL/glut.h>
void myTeapot(float x,float y)
{
glPushMatrix();
glTranslatef(x,y,0);
glutSolidTeapot(0.3);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1,0,0);
myTeapot(+0.5,+0.5);
myTeapot(+0.5,-0.5);
myTeapot(-0.5,-0.5);
myTeapot(-0.5,+0.5);
glutSwapBuffers();
}
int main(int argc,char**argv )
{
glutInit( &argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("HW2 bonus");
glutDisplayFunc(display);
glutMainLoop();
}
3.滑鼠事件的運用
#include <GL/glut.h>
#include <stdio.h>
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSwapBuffers();
}
void mouse (int button,int state,int x,int y)
{
printf("%d %d %d\n",button,state,x,y);
}
int main(int argc, char *argv[]){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("ME");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
-----------------------------------------------------------------------------------------------------------------------------
第三節1.運用剛剛的座標換算,用在茶壺身上
#include <GL/glut.h>
#include <stdio.h>
int mouseX=0,mouseY=0;
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0); 黃色的
glPushMatrix();口訣:減一半,除一半,Y還倒過來
glTranslatef((mouseX-150)/150.0,-(mouseY-150)/150.0,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void mouse (int button,int state,int x,int y)
{
// printf("%d %d %d\n",button,state,x,y);
mouseX=x;mouseY=y;
}
int main(int argc, char *argv[]){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("ME");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
2.用滑鼠寫程式
#include <GL/glut.h>
#include <stdio.h>
int mouseX=0,mouseY=0 ,N=0;
int mx[100],my[100];
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0);
glBegin(GL_LINE_LOOP);
for( int i=0;i<N;i++){
glVertex2f((mx[i]-150)/150.0,-(my[i]-150/150.0));
}
glEnd();
glutSwapBuffers();
}
void mouse (int button,int state,int x,int y)
{
// printf("%d %d %d\n",button,state,x,y);
mouseX=x;mouseY=y;
if(state==GLUT_DOWN){
printf(" glVertex2f( (%d-150)/150.0,-(%d-150)/150.0);\n",x,y);
N++;
mx[N-1]=x;my[N-1]=y;
}
}
int main(int argc, char *argv[]){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("ME");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
沒有留言:
張貼留言