20210308 GLUT畫圖
一開始先照上次的方法打開OpenGL project
可參照Hello World_Week01
https://2021graphics.blogspot.com/2021/02/hello-worldweek01.html
打開後把底下框起來的程式碼先複製起來(放到記事本 等一下會用到)
再來打開GLUT project
一樣可參照Hello World_Week01
然後將程式碼做刪減 只要留底下的幾行就好
#include <GL/glut.h>
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutMainLoop();
}
--------------------------------------------------------------------------------------------------------------------------
再加上一開始從OpenGL project複製的程式碼
#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();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutMainLoop();
}
--------------------------------------------------------------------------------------------------------------------------
這樣就可以畫出彩色的三角形了!
然後再打開一個新的GLUT project
接下來要開始自己打程式碼來畫圖了!
一開始先畫一個茶壺
#include <GL/glut.h>///使用GLUT外掛
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///清空
glutSolidTeapot(0.5);///畫實心茶壺(可調整大小)
glutSwapBuffers();///交換2倍的buffers
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);///GULT初始設定
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);///顯示模式
glutCreateWindow("08161080");///開視窗
glutDisplayFunc(display);///要顯示的函式
glutMainLoop();///主要的迴圈
}
來看看程式碼中的argc和argv是用來做什麼的
先切回一開始開的OpenGL project
然後印出argc和argv
#include <stdio.h>
int main(int argc,char** argv)
{
printf("現在的argc是:%d\n",argc);
for(int i=0;i<argc;i++)
{
printf("argv[%d]是:%s\n",i,argv[i]);
}
}
--------------------------------------------------------------------------------------------------------------------------
打開命令提示字元後 進到week03-1的資料夾
可以發現argc會計算參數的數量 argv會記錄輸入的參數
知道程式碼到底在做什麼之後 就可以放心畫圖了!
可以先來改變茶壺的顏色
#include <GL/glut.h>///使用GLUT外掛
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///清空
glColor3f(0,0,1);///調整顏色(R,G,B)
glutSolidTeapot(0.5);///畫實心茶壺(可調整大小)
glutSwapBuffers();///交換2倍的buffers
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);///GULT初始設定
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);///顯示模式
glutCreateWindow("08161080");///開視窗
glutDisplayFunc(display);///要顯示的函式
glutMainLoop();///主要的迴圈
}
--------------------------------------------------------------------------------------------------------------------------
也可以把彩色三角形跟茶壺一起畫出來!
#include <GL/glut.h>///使用GLUT外掛
void display()
{
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(0,0,1);///調整顏色(R,G,B)
glutSolidTeapot(0.5);///畫實心茶壺(可調整大小)
glutSwapBuffers();///交換2倍的buffers
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);///GULT初始設定
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);///顯示模式
glutCreateWindow("08161080");///開視窗
glutDisplayFunc(display);///要顯示的函式
glutMainLoop();///主要的迴圈
}
--------------------------------------------------------------------------------------------------------------------------
最後要用三角形畫圖
#include <GL/glut.h>///使用GLUT外掛
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///清空
glBegin(GL_TRIANGLES);
glColor3ub(24,94,151); glVertex2f((148-150)/150.0,-(29-150)/150.0);
glColor3ub(24,94,151); glVertex2f((0-150)/150.0,-(300-150)/150.0);
glColor3ub(24,94,151); glVertex2f((300-150)/150.0,-(300-150)/150.0);
glColor3ub(255,255,255); glVertex2f((148-150)/150.0,-(29-150)/150.0);
glColor3ub(255,255,255); glVertex2f((84-150)/150.0,-(146-150)/150.0);
glColor3ub(255,255,255); glVertex2f((213-150)/150.0,-(146-150)/150.0);
glEnd();
glutSwapBuffers();///交換2倍的buffers
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);///GULT初始設定
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);///顯示模式
glutCreateWindow("08161080");///開視窗
glutDisplayFunc(display);///要顯示的函式
glutMainLoop();///主要的迴圈
}













沒有留言:
張貼留言