2022年3月22日 星期二

電腦圖學筆記


  1. 至https://jsyeh.org/3dcg10 下載data , win32
  2. windows.zip解壓縮 >> windows / transformation.exe
  3. data.zip解壓縮 >> windows / data / 模型obj
  4. 把data檔案放進windows >> 執行transformation.exe
======================================================================================
keyboard

#include <stdio.h>
#include <GL/glut.h>
void display()
{
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glColor3f(1,1,0);
        glutSolidTeapot(0.3);
        glutSwapBuffers();

}
void keyboard( unsigned char key,int x,int y)
{
    printf("你按下了 %c 在 %d %d 座標\n",key,x,y);

}
int main(int argc,char** argv){
    glutInit( &argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("第5週的程式");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}

#include <stdio.h>
#include <GL/glut.h>
float x=0,y=0,z=0;
int oldX=0,oldY=0;
void display()
{
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glPushMatrix();
        glTranslatef( (x-150)/150.0 , -(y-150)/150.0,z);
        glColor3f(1,1,0);
        glutSolidTeapot(0.3);
        glPopMatrix();
        glutSwapBuffers();

}
void keyboard( unsigned char key,int mouseX,int mouseY)
{

}
void mouse(int button,int state,int mouseX,int mouseY)
{

}
void motion(int mouseX,int mouseY)
{
    x += (mouseX-oldX); y+=(mouseY-oldY);
    oldX = mouseX; oldY = mouseY;
    display();
}
int main(int argc,char** argv){
    glutInit( &argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("第5週的程式");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop();
}

他會跟著滑鼠移動

#include <stdio.h>
#include <GL/glut.h>
float x=150,y=150,z=0;
int oldX=0,oldY=0;
void display()
{
        glClearColor(0.5,0.5,0.5,1);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glPushMatrix();
        glTranslatef( (x-150)/150.0 , -(y-150)/150.0,z);
        glColor3f(1,1,0);
        glutSolidTeapot(0.3);
        glPopMatrix();
        glutSwapBuffers();

}
void keyboard( unsigned char key,int mouseX,int mouseY)
{

}
void mouse(int button,int state,int mouseX,int mouseY)
{
    oldX = mouseX; oldY = mouseY;
}
void motion(int mouseX,int mouseY)
{
    x += (mouseX-oldX); y+=(mouseY-oldY);
    oldX = mouseX; oldY = mouseY;
    display();
}
int main(int argc,char** argv){
    glutInit( &argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("第5週的程式");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop();
}

#include <stdio.h>
#include <GL/glut.h>
float x=150,y=150,z=0,scale=1.0;
int oldX=0,oldY=0;
void display()
{
        glClearColor(0.5,0.5,0.5,1);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glPushMatrix();
        glTranslatef( (x-150)/150.0 , -(y-150)/150.0,z);
        glScalef(scale,scale,scale);
        glColor3f(1,1,0);
        glutSolidTeapot(0.3);
        glPopMatrix();
        glutSwapBuffers();

}
void keyboard( unsigned char key,int mouseX,int mouseY)
{

}
void mouse(int button,int state,int mouseX,int mouseY)
{
    oldX = mouseX; oldY = mouseY;
}
void motion(int mouseX,int mouseY)
{
    if( mouseX-oldX > 0) scale *=1.01;
    if( mouseX-oldX < 0) scale *=0.99;
    ///x += (mouseX-oldX); y+=(mouseY-oldY);
    oldX = mouseX; oldY = mouseY;
    display();
}
int main(int argc,char** argv){
    glutInit( &argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("第5週的程式");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop();
}






沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

一.     一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam,                 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...