week04
1.到 https://jsyeh.org/3dcg10/下載win32跟data
windows.zip =>下載\windows\Transformation.exe
data.zip =>下載\windows\data\很多模型檔
執行 下載\windows\Transformation.exe
2.接著打開Transformation.exe,會出現畫面
3.開啟以前的程式 加入三行程式碼
4.用座標讓他變成四個
#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("week04茶壺");
glutDisplayFunc( display );
glutMainLoop();
return 0;
}
5.滑鼠事件int 一個mouse外掛事件
void mouse(int button,int state, int x, int y)
{
printf("%d %d %d %d\n", button, state, x, y);
}
整體程式碼
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 %d\n", button, state, x, y);
}
int main(int argc, char**argv)
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("week04 mouse");
glutDisplayFunc( display );
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}
6.用滑鼠事件培和茶壺去讓滑鼠控制茶壺,使茶壺會因為你滑鼠點擊的位子而做改變
#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();
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 %d\n", button, state, x, y);
mouseX=x; mouseY=y;
}
int main(int argc, char**argv)
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("week04 mouse");
glutDisplayFunc( display );
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}
#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 %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_DOUBLE | GLUT_DEPTH );
glutCreateWindow("week04 mouse");
glutDisplayFunc( display );
glutMouseFunc(mouse);
glutMainLoop();
return 0;
沒有留言:
張貼留言