2023年3月16日 星期四

123電腦圖學 T-R-T 特定軸轉

week05 T-R-T 特定軸轉

第一堂課

https://jsyeh.org/3dcg10/  下載deta,win32(解壓縮)


解壓縮完開啟Transformation =>複習上周的旋轉、移動




開啟一個新專案=>week05-1 TRT translate
並把week04-1的程式碼貼上並修改


得到新的程式碼=>兩個不同色的茶壺旋轉
#include <GL/glut.h>
float angle = 0;
void display()
{

 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

 glColor3f(1, 0, 0);
 glPushMatrix();
    glRotatef(angle, 0, 0, 1);
    glTranslatef(0.8, 0, 0);
    glutSolidTeapot( 0.3 );
 glPopMatrix();

 glColor3f(0, 1, 0);
 glPushMatrix();
    glTranslatef(0.8, 0, 0);
    glRotatef(angle*1.5, 0, 0, 1);
    glutSolidTeapot( 0.3 );
    glPopMatrix();

 glutSwapBuffers();
 angle++;

}
int main(int argc, char* argv[])
{

  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
  glutCreateWindow("week03");
  glutDisplayFunc(display);
  glutIdleFunc(display);
  glutMainLoop();

}




第二堂課

跑openGL程式


按to draw 可以畫身體和手臂



練習下禮拜的小考


第三堂課

開啟新專案 week05-2_T-R-T robot
並貼上week05-1 並修改




#include <GL/glut.h>
float angle = 0;
void myCube()
{
   glPushMatrix();
     glScalef(0.5, 0.2, 0.2);
     glutSolidCube(1);
   glPopMatrix();

}
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glPushMatrix();
     glRotatef(angle, 0, 0, 1);
     glTranslatef(0.25, 0, 0);
     myCube();
   glPopMatrix();

 glutSwapBuffers();
 angle++;
}

int main(int argc, char* argv[])
{

  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
  glutCreateWindow("week03");
  glutDisplayFunc(display);
  glutIdleFunc(display);
  glutMainLoop();

}
得到一個旋轉的方塊

製作機械手臂
#include <GL/glut.h>
float angle = 0;
void myCube()
{
   glPushMatrix();
     glScalef(0.5, 0.2, 0.2);
     glutSolidCube(1);
   glPopMatrix();

}
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glColor3f(1,1,1);
    glutSolidCube(1);

    glPushMatrix();
     glTranslatef(0.5, 0.5, 0);
     glRotatef(angle, 0, 0, 1);
     glTranslatef(0.25, 0, 0);
     glColor3f(0,1,0);
     myCube();
   glPopMatrix();

 glutSwapBuffers();
 angle++;
}

int main(int argc, char* argv[])
{

  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
  glutCreateWindow("week03");
  glutDisplayFunc(display);
  glutIdleFunc(display);
  glutMainLoop();

}




兩個手臂

增加程式碼=>將0.5改成-0.5

  glPushMatrix();
     glTranslatef(-0.5, 0.5, 0);
     glRotatef(angle, 0, 0, 1);
     glTranslatef(0.25, 0, 0);
     glColor3f(0,1,0);
     myCube();
   glPopMatrix();




了解Martix

沒有留言:

張貼留言