2022年5月16日 星期一

week13 涵030 上課筆記

 13-1:

第一個程式碼( 使用codeblocks寫出一個矩形 )

#include<gl/glut.h>


void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///具有3D深度

glRectf(0.5, 0.5, -0.5, -0.5); ///繪制一個矩形

glutSwapBuffers();///(只能存在一個)共4種buffers

}

glut10個涵式:

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

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///有3D功能

glutInitWindowSize(600,600); ///視窗大小

glutCreateWindow("week13 rect TRT"); ///專案

glutDisplayFunc(Display); ///設置當前窗口的顯示回調函數(但我還是不懂,用背的)


glutMainLoop(); ///結束

return 0;

}


13-2:

程式碼如下:

#include<gl/glut.h>


void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///具有3D深度

glColor3f(1,1,1);///白色

glRectf(0.5, 0.5, -0.5, -0.5); ///繪制一個矩形(白色)

glPushMatrix();///備份矩陣

不知道就先註解

  ///  glTranslated(0,0,0);///掛在0.5的地方

  ///  glRotatef(angle,0,0,1);///旋轉

  ///  glTranslatef(0.2,0,0);///移動

    glColor3f(1,0,0);///紅色

glRectf(0.5, 0.5, 1.0, 0.3); ///繪制第二個個矩形///可用-1~1

glPopMatrix();

glutSwapBuffers();///(只能存在一個)共4種buffers

}


13-3: 程式碼如下

#include<gl/glut.h>

float angle=45;///設定角度 步驟三

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///具有3D深度

glColor3f(1,1,1);///白色

glRectf(0.5, 0.5, -0.5, -0.5); ///繪制一個矩形(白色)

glPushMatrix();///備份矩陣

  ///  glTranslated(0,0,0);///掛在0.5的地方

    glRotatef(angle,0,0,1);///旋轉  步驟二

    glTranslatef(-0.5,-0.4,0);///移動  步驟一

    glColor3f(1,0,0);///紅色

glRectf(0.5, 0.5, 1.0, 0.3); ///繪制第二個個矩形

glPopMatrix();

glutSwapBuffers();///(只能存在一個)共4種buffers

}



13-4 程式碼如下: (黃色為新增)
float angle=45,oldX=0;///設定角度
void mouse(int button,int state,int x,int y){
    oldX = x;
}
void motion(int x,int y){
    angle += (x-oldX);
    oldX = x;
    glutPostRedisplay();///重畫螢幕
}
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///具有3D深度
glColor3f(1,1,1);///白色
glRectf(0.5, 0.5, -0.5, -0.5); ///繪制一個矩形(白色)
glPushMatrix();///備份矩陣
    glTranslated(0.5,0.5,0);///掛在0.5的地方 3.
    glRotatef(angle,0,0,1);///旋轉2.
    glTranslatef(-0.5,-0.4,0);///移動1.
    glColor3f(1,0,0);///紅色
glRectf(0.5, 0.5, 1.0, 0.3); ///繪制第二個個矩形///可用-1~1
glPopMatrix();
glutSwapBuffers();///(只能存在一個)共4種buffers
}
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
///glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 無3D功能
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///有3D功能
glutInitWindowSize(600,600); ///視窗大小
glutCreateWindow("week13 rect TRT"); ///專案
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(Display); ///設置當前窗口的顯示回調函數(但我還是不懂,用背的)

glutMainLoop(); ///結束
return 0;
}


13-5 更新程式碼
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///具有3D深度
glColor3f(1,1,1);///白色
glRectf(0.3, 0.5, -0.3, -0.2); ///繪制一個矩形(白色)
glPushMatrix();///備份矩陣
    glTranslatef(0.3,0.5,0);///掛在0.5的地方 3.
    glRotatef(angle,0,0,1);///旋轉2.
    glTranslatef(-0.3,-0.4,0);///移動1.
    glColor3f(1,0,0);///紅色
glRectf(0.3, 0.5, 0.8, 0.3); ///繪制第二個個矩形///可用-1~1
glPushMatrix();
    ///
    ///
    glColor3f(0,1,0);///綠色
    glRectf(0.8,0.5,1.1,0.3);
glPopMatrix();
glPopMatrix();
glutSwapBuffers();///(只能存在一個)共4種buffers
}

13-6 新增程式碼

float angle[20],oldX=0;///設定角度
int angleID=0;
void keyboard( unsigned char key,int x,int y){
    if( key =='0') angleID=0;
    if( key =='1') angleID=1;
    if( key =='2') angleID=2;
    if( key =='3') angleID=3;
}

glutKeyboardFunc(keyboard); ///鍵盤操作指令



沒有留言:

張貼留言