OpenGL3:幼儿园篇 第二章 绘制基本的几何描述图形

一.简介

 

二.绘制几何描述

void glBegin(GLenun mode)  // 定义图元,图元顶点序列开始

  • mode

    GL_POINTS             // 单个点

    GL_LINES             // 一条线

    GLINE_STRIP         // 多条直线

    GLI_LINE_LOOP         // 多条直线首尾相连

    GL_TRIANGLES       // 一个三角形

    GL_TRIANGLE_STRIP     // 多个三角形 

    GL_TRIANGLE_FAN      // 扇形三角形

    GL_QUADS          // 一个四边形

    GL_QUAD_STRIP       // 多个四边形

    GL_POLYGON      // 一个多边形

void glEnd()  //定义图元,图元顶点序列结束

 

在glBegin()和glEnd()之间,不仅可以包含坐标值,还可以有颜色 纹理坐标 法线向量等值

 

1.点

(1) 指定点绘制

glVertex2s(2, 3);

glVertex3d(0.0, 0.0, 3.1415926);

glVertex4f(2.3, 1.0, -2.2, 2.0);

 

GLdouble v[3] = {5.0, 9.0, 1992.0};

glVertex3dv(v);

 

复制代码
void Draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POINTS);
    glVertex2f(0.0f, 0.0f);
    glVertex2f(0.5f, 0.5f);
    glEnd();
    glFlush();
}
复制代码

 

(2) 点属性

void glPointSize(GLfloat size)    // 设置像素点的宽度,默认为1.0,必须大于0.0

 

2.线

(1) 指定线绘制

glLineWidth()

glLineStipple()

 

复制代码
void Draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_LINES);
    glVertex2f(0.0f, 0.0f);
    glVertex2f(0.5f, 0.5f);
    glEnd();
    glFlush();
}
复制代码

 

(2) 线属性

void glLineWidth(GLfloat width)

void glLineStipple(GLint factor, GLushort pattern)

 

3.三角形

 

 

四.矩形

void Draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
    glFlush();
}

 

 

五.圆形

 

三.快速绘制

void glutWireCube(GLdouble size);

void glutSolidCube(GLdouble size);

void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);

void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);

 

四.法线向量

法线向量是一条垂直于某个表面的方向向量

OpenGL使用法线向量确定这个物体的各个顶点所接收的光照

 

glBegin(GL_POLYGON);
    glNormal3fv(n0);
    glVertex3fv(v0);
glEnd();

 

五.顶点数组

OpenGL提供了顶点数组来指定大量数据,

 

复制代码
static GLint vertices[] = {25, 25
                           100, 325,
                           175, 25,
                           175, 325,
                           250, 25,
                           325, 325};

static GLfloat colors[] = {1.0, 0.2, 0.2,
                0.2, 0.2, 1.0,
                0.8, 1.0, 0.2,
                0.75, 0.75, 0.75,
                0.35, 0.35, 0.35,
                0.5, 0.5, 0.5};
glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); glColorPointer(
3, GL_FLOAT, 0, colors); glVertexPointer(2, GL_INT, 0, vertices);
复制代码

 

posted @   言午丶  阅读(362)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示