今天我们开始学习Opengl编程。
a*(2*sin(t)-sin(2*t))
a*(2*cos(t)-cos(2*t))
由于所以要使用sin和cos函数,所以我们导入头文件math.h。
#include <GL/glut.h> #include <math.h> #define PI 3.
下一步是要初始化设置。
glClearColor的作用是来清除RGBA模式下的颜色缓冲区,其中的四个参数分别代表red、green、blue和alpha值。
void init() { glClearColor(1.0f,1.0f,1.0f,1.0f); }
GL_COLOR_BUFFER_BIT),还记得我们在初始化函数里设定的RGBA颜色值吗?这里就是用当前的缓冲区清除值来清除指定的缓冲区。
red、green、blue的强度值,大小从0.0-1.0。我们这里要绘制红色的心,所以把red强度设为1,其余两个设为0。
lBegin()和glEnd()函数里设置我们所需要绘制的点,然后在glBegin参数里使用
GL_POLYGON,即为画凸多边形(为什么设为
GL_POLYGON?
因为当我们所画的点足够多的时候,就能够近似看做曲线),而后Opengl会把glBegin和glEnd里面所有绘制的点依次相连然后填充其内部,就得到了我们所需要绘制的心形线。
void display(void) { GLfloat a=0.25; glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0f,0.0f,0.0f); glBegin(GL_POLYGON); for(GLfloat t=0;t<2*PI;t+=0.01) { GLfloat x=a*(2*sin(t)-sin(2*t)),y=a*(2*cos(t)-cos(2*t)); glVertex2f(x,y); } glEnd(); glFlush(); }
glutInitDisplayMode,里面有三个参数,分别为
GLUT_SINGLE(单缓冲),
GLUT_RGB(RGBA颜色模式),
GLUT_DEPTH(带有深度缓冲区)
glutInitWindowSize,里面两个参数分别为窗口的宽和高。
glutInitWindowPosition,里面两个参数分别为窗口左上角的屏幕位置。
glutCreateWindow,里面的参数为窗口的标题。
函数display,当GLUT窗口里的内容需要重新显示时,通过
glutDisplayFunc注册的那个回调函数就会被执行
。
int main(int argc, char argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(300,300); glutInitWindowPosition(300,300); glutCreateWindow("Cardioid"); init(); glutDisplayFunc(display); glutMainLoop(); return 0; }
到这里所有的工作就做完啦~下面是运行出来的结果:

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231842.html原文链接:https://javaforall.net
