2021年3月3日 星期三

距地表面160 Week02

 一開始先複習上周的最簡單3D程式,讓我們跳過ou<

---------------------------------------------------

  • 茶壺

    首先從GLUT中取出我們要用到的程式碼,大概是10行到20行左右>>

\長這個樣紙/

    然後加上一行>>
    glutSolidTeapot(0.3); ///茶壺的圖

    再把glutCreateWindow()中間的字改掉>>
     glutCreateWindow("08160342 WEEEEE");

&完成後的樣子

\yeee是茶壺/
  • 程式碼
#include <GL/glut.h> ///使用 GLUT外掛

static void display(void)
{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
    glutSolidTeapot(0.3);
    glutSwapBuffers();///更新畫面
}

int main(int argc, char *argv[]) ///main()函式
{
    glutInit(&argc, argv);///(1)Inet初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
(2) Init初始化 Display 的功能
     glutCreateWindow("08160342 WEEEEE");///(3)建立GLUT視窗
    glutDisplayFunc(display);///(4)準備 display()函式
    glutMainLoop();///(5)主要函式

}

---------------------------------------------------

  • 茶壺變色

對,加一行可以變色的glColor3f(1,0,0);
\\\一定要3f哦////

  • 程式碼
#include <GL/glut.h> ///使用 GLUT外掛

static void display(void)
{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
    glColor3f(1,0,0);///上色
    glutSolidTeapot(0.3);
    glutSwapBuffers();///更新畫面
}

int main(int argc, char *argv[]) ///main()函式
{
    glutInit(&argc, argv);///(1)Inet初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
(2) Init初始化 Display 的功能
     glutCreateWindow("08160342 WEEEEE");///(3)建立GLUT視窗
    glutDisplayFunc(display);///(4)準備 display()函式
    glutMainLoop();///(5)主要函式

}

---------------------------------------------------

  • 茶壺加三角形

將GL中的幾行>>

glBegin(GL_TRIANGLES);

                glColor3f(1.0f, 0.0f, 0.0f);   glVertex2f(0.0f,   1.0f);
                glColor3f(0.0f, 1.0f, 0.0f);   glVertex2f(0.87f,  -0.5f);
                glColor3f(0.0f, 0.0f, 1.0f);   glVertex2f(-0.87f, -0.5f);

    glEnd();

偷過來用 YEE

\\搭拉//
  • 程式碼
#include <GL/glut.h>


static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_TRIANGLES);

                glColor3f(1.0f, 0.0f, 0.0f);   glVertex2f(0.0f,   1.0f);
                glColor3f(0.0f, 1.0f, 0.0f);   glVertex2f(0.87f,  -0.5f);
                glColor3f(0.0f, 0.0f, 1.0f);   glVertex2f(-0.87f, -0.5f);

    glEnd();
    glColor3f(1,0,0);///上色
    glutSolidTeapot(0.3);
    glutSwapBuffers();///更新畫面
}

int main(int argc, char *argv[]) ///main()函式
{
    glutInit(&argc, argv);///(1)Inet初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
(2) Init初始化 Display 的功能
     glutCreateWindow("08160342 WEEEEE");///(3)建立GLUT視窗
    glutDisplayFunc(display);///(4)準備 display()函式
    glutMainLoop();///(5)主要函式

}

---------------------------------------------------

  • 茶壺旁邊加線線
網路上打GLBegin 能查到許多能用的函式

這次用glBegin(GL_LINE_LOOP);


  • 程式碼
#include <GL/glut.h>


static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_LINE_LOOP);

                glColor3f(1.0f, 0.0f, 0.0f);   glVertex2f(0.0f,   1.0f);
                glColor3f(0.0f, 1.0f, 0.0f);   glVertex2f(0.87f,  -0.5f);
                glColor3f(0.0f, 0.0f, 1.0f);   glVertex2f(-0.87f, -0.5f);

    glEnd();
    glColor3f(1,0,0);///上色
    glutSolidTeapot(0.3);
    glutSwapBuffers();///更新畫面
}

int main(int argc, char *argv[]) ///main()函式
{
    glutInit(&argc, argv);///(1)Inet初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
(2) Init初始化 Display 的功能
     glutCreateWindow("08160342 WEEEEE");///(3)建立GLUT視窗
    glutDisplayFunc(display);///(4)準備 display()函式
    glutMainLoop();///(5)主要函式

}

---------------------------------------------------
  • 茶壺加圈圈
中間更改
    glBegin(GL_POLYGON);

    glColor3f(1.0f, 0.0f, 0.0f);

    for(float angle=0;angle<3.14159265358979*2; angle+=0.01){
          glVertex2f(0.5*cos(angle), 0.5*sin(angle));
    }
就會得到>>

  • 程式碼
#include <GL/glut.h>


static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_POLYGON);

    glColor3f(1.0f, 0.0f, 0.0f);
    for(float angle=0;angle<3.14159265358979*2; angle+=0.01){
          glVertex2f(0.5*cos(angle), 0.5*sin(angle));
    }

    glEnd();
    glColor3f(1,0,0);///上色
    glutSolidTeapot(0.3);
    glutSwapBuffers();///更新畫面
}

int main(int argc, char *argv[]) ///main()函式
{
    glutInit(&argc, argv);///(1)Inet初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
(2) Init初始化 Display 的功能
     glutCreateWindow("08160342 WEEEEE");///(3)建立GLUT視窗
    glutDisplayFunc(display);///(4)準備 display()函式
    glutMainLoop();///(5)主要函式

}

    沒有留言:

    張貼留言

    距地表面160 Week11

     #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...