• 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个点将被画为虚的。

  • 相关阅读:
    oracle 怎样查询某用户下的所有表的表名
    Oracle db_name, db_unique_name, global_name 的区别
    Oracle 修改 GLOBAL_NAME 和 SERVICE_NAME
    Oracle中DB_NAME,SID,DB_DOMAIN,SERVICE_NAME等之间的区别
    spoon(kettle)基本配置(连接Mysql和Oracle)
    ESLint学习(四)如何在提交时检查代码
    ESLint学习(三)webpack中使用ESLint
    ESLint学习(二).eslintignore文件
    ESLint学习(一)简介、安装、配置、命令行、规则
    host学习(一)如何修改host?提示无法修改host怎么办?
  • 原文地址:https://www.cnblogs.com/SeekHit/p/4835462.html
Copyright © 2020-2023  润新知