zoukankan      html  css  js  c++  java
  • OpenGL基础图形的绘制

    例一:绘制五角星

    设五角星5个顶点分别为ABCDE,顶点到坐标轴原点距离为r,ABCDE各点用r表示,分别为

    A(0,r);

    B(-r*sin(2/5*Pi),r*cos(2/5*Pi));

    C(-r*sin(Pi/5),-r*cos(Pi/5));

    DE和CB关于Y轴对称。

    确定5个顶点的坐标后,使用GL_LINE_LOOP函数,将5个点连接起来,顺序依次为ACEBD。

    主要代码为:

     1 void Star(void)
     2 {
     3 
     4     GLfloat r = 0.8f;
     5     GLfloat PointA[2] = { 0, r };
     6     GLfloat PointB[2] = { -r*sin(0.4*Pi), r*cos(0.4*Pi) };
     7     GLfloat PointC[2] = { -r*sin(Pi / 5), -r*cos(Pi / 5) };
     8     GLfloat PointD[2] = { r*sin(Pi / 5), -r*cos(Pi / 5) };
     9     GLfloat PointE[2] = { r*sin(0.4*Pi), r*cos(0.4*Pi) };
    10 
    11     glClear(GL_COLOR_BUFFER_BIT);
    12 
    13     glBegin(GL_LINE_LOOP);
    14     glVertex2fv(PointA);
    15     glVertex2fv(PointC);
    16     glVertex2fv(PointE);
    17     glVertex2fv(PointB);
    18     glVertex2fv(PointD);
    19 
    20     glEnd();
    21 
    22     glFinish();
    23 }

    绘制成果如下:

    例二:正弦函数绘制

    先用GL_LINES,4个坐标点,将坐标轴绘制出来,再绘制出正弦函数。

     1 void Sin(void)
     2 {
     3 
     4      const float x = 0.1f;//默认坐标值从—1到1,,所以为了绘制完全,设定一个缩放的因子x
     5     glClear(GL_COLOR_BUFFER_BIT);
     6 
     7     glBegin(GL_LINES);
     8     glVertex2f(0, -1.0f);
     9     glVertex2f(0, 1.0f);
    10     glVertex2f(1.0f, 0);
    11     glVertex2f(-1.0f, 0);
    12 
    13     //glEnd;
    14 
    15     glBegin(GL_LINE_STRIP);
    16     for(float i = -10; i < 10; i+= 0.01 ){
    17         glVertex2f(i*x,0.5*sin(i));
    18     }
    19 
    20     glEnd();
    21 
    22     glFinish();
    23 }

    补充:

    点的大小,线的粗细,实线虚线。

    glPointSize(),和glLineWidth(),默认都为1个像素,可以设置点的大小,和线的粗细,(注:需在glBegin前设置好)

    glEnable(GL_LINE_STIPPLE);//启用虚线

    glDisable(GL_LINE_STIPPLE);//关闭虚线

    glLineStipple(GLint factor, GLushort pattern);

    pattern是由1和0组成的长度为16的序列,从最低位开始看,如果为1,则直线上接下来应该画的factor个点将被画为实的;如果为0,则直线上接下来应该画的factor个点将被画为虚的。

  • 相关阅读:
    Redis的发布订阅
    Redis的事务
    Redis的持久化下
    Redis的持久化上
    Redis数据类型之Redis有序集合Zset(sorted set
    Redis数据类型之Redis哈希(Hash)
    Redis数据类型之Redis集合(Set)
    LeetCode#53-最大子序和
    LeetCode#442-数组中的重复数据
    LeetCode#1014-最佳观光组合
  • 原文地址:https://www.cnblogs.com/SeekHit/p/4835462.html
Copyright © 2011-2022 走看看