前言:
课程最近开始学习使用OpenGL库函数进行图像处理,个人而言非常陌生,记录一下以便未来学习时候查阅。
主题:
绘制图形主要运用了glBegin()和glEnd()搭配的函数。在我们没有加入任何位移函数的时候,默认在我们画布的正中心即(0,0,0)为中点。
glBegin()中的参数规定了画的是什么图像。部分参数值对应图象会在下文中提及。
在同一组Begin()和End()中间可加入多个图形绘制,后绘制的图形会遮挡前方图形。而且他们共享同一个中点。
我们可以使用多组glBegin()和glEnd()通过glTransted()来构造我们的图案。由于还只是入门级别,这里我直接平面绘图的方式,所有函数中只涉及x,y轴,z轴没有提及。
好的直接上代码,其中glColor3f控制每个顶点的RBG值。背景初始化默认是黑色,我这里加入代码改变了颜色
#include "stdafx.h"
#include
void helloOpengl(void) {
glClearColor(1.0, 1.0, 0.6, 1.0); //改变默认背景有颜色为浅黄色,要写在glLoadIdentity()前
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_TRIANGLES);
{
// glColor3f(0.0f, 1.0f, 0.0f);
glVertex2f(0.0, 0.3);
// glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(-0.3, -0.3);
// glColor3f(0.0f, 0.0f, 1.0f);
glVertex2f(0.3, -0.3);
}
glEnd();
glTranslated(0.3, 0.3, 0);
glColor3f(1.0f, 0.0f, 1.0f);
glBegin(GL_QUADS);
{
glVertex3f(-0.2f, 0.2f, 0.0f);
glVertex3f(0.2f, 0.2f, 0.0f);
glVertex3f(0.2f, -0.2f, 0.0f);
glVertex3f(-0.2f, -0.2f, 0.0f);
}
glEnd();
glutSwapBuffers();
}
int main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 640);
glutCreateWindow("HelloTriangle");
glutDisplayFunc(helloOpengl);
glutMainLoop();
return 0;
}
这里环境简单配置了freeglut,GLFW的配置一直有部分问题,等我解决后再写一下。
额外:
提供几个其他博客看到的Begin中的参数,出处已标
GL_POINTS:把每个顶点作为一个点进行处理,顶点n定义了点n,绘制N个点。
GL_LINES: 把每个顶点作为一个独立的线段,顶点2n-1和2n之间定义了n条线段,绘制N/2条线段
GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,绘制n-1条线段。
GL_LINE_LOOP: 绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,绘制n条线段。
GL_TRIANGLES: 把每个顶点作为一个独立的三角形,顶点3n-2,3n-1和3n定义了第n个三角形,绘制了N/3个三角形。
GL_TRIANGLE_STPIP:绘制一组相连的三角形,对于奇数n,顶点n,n+1,和n+2定义了第n个三角形;对于偶数n,顶点n+1,n和n+2定义了第n个三角形,绘制N-2个三角形。
GL_QUADS: 绘制由四个顶点组成的一组单独的四边形。顶点4n-3,4n-2,4n-1和4n定义了第n个四边形。绘制了N/4个四边形。
GL_QUAD_STRIP:绘制一组相连的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。顶点2n-1,2n,2n+2和2n+1定义了第n个四边形,绘制了N/2-1个四边形。
GL_POLYGON:绘制了一个凸多边形。顶点1到n定义了这个多边形。
以上参考:http://blog.csdn.net/aa941096979/article/details/50843596