顶点数组函数可以在一个数组里包含大量的与顶点相关的数据,并且可以减少函数的调用。使用顶点数组需要先启用顶点数组功能,使用glEnableClientState函数启用顶点数组,参数可以是GL_VERTEX_ARRAY(顶点数据)和GL_COLOR_ARRAY(颜色数组),颜色数组可以为每个顶点分别分配颜色。

glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);

第一个参数size,代表顶点数组中数据的维度,只能是2,3或4,即二维、三维、四维;

第二个参数type,代表顶点数组中每个数据的类型,如GL_INT,GL_FLOAT;

第三个参数stride,代表连续顶点之间的字节偏移量,经常使用一个int型常量乘以sizeof(int/float)来表示;

第四个参数pointer,指向数组数据的起始位置;

glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)

第一个参数mode指定用顶点数组创建的图元的类型;

第二个参数count,代表整个图元包含的顶点数;

第三个参数type,是顶点数组序列数据的类型,GL_UNSIGNED_BYTE或GL_UNSIGNED_INT;

第四个参数indices,顶点数组序列数据的起始位置;

glDrawArrays (GLenum mode, GLint first, GLsizei count);

第一个参数mode指定用顶点数组创建的图元的类型;

第二个参数first指定从顶点数组内起始的位置偏移量;

第三个参数count指定顶点数量;

用顶点数组绘制立方体的三个面:

#include <glut.h> 

GLsizei windowWidth=400,windowHeight=400;
GLfloat data[]={-10,-10,10,1,0,0,
10,-10,10,0,1,0,
10,10,10,0,0,1,
-10,10,10,1,1,0,
-10,-10,-10,1,0,1,
10,-10,-10,0,1,1,
10,10,-10,1,1,1};
GLubyte index[]={0,1,2,3,4,5,1,0,2,1,5,6}; void Init()
{
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(75,1,1,50);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(20,-20,30,0,0,0,0,1,0);
} void Display()
{
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(3,GL_FLOAT,6*sizeof(GLfloat),&data[3]);
glVertexPointer(3,GL_FLOAT,6*sizeof(GLfloat),&data[0]);
//glDrawArrays(GL_QUADS,0,8);
glDrawElements(GL_QUADS,12,GL_UNSIGNED_BYTE,index);
glutSwapBuffers();
} int main(int argc, char *argv[])
{
glutInit(&argc, argv); //初始化GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(500, 200);
glutInitWindowSize(windowWidth, windowHeight);
glutCreateWindow("OpenGL");
Init();
glutDisplayFunc(&Display); //回调函数
glutMainLoop();
}

光栅是一个一个离散的单元,在显示的时候具有锯齿形或阶梯状外观,这种由于低频取样(不充分取样)导致的信息失真的情况称为走样,OpenGL中可以对走样进行校正。

对于点的反锯齿校正使用glEnable(GL_POINT_SMOOTH)启用对点的锯齿校正,glHint (GL_POINT_SMOOTH, GL_NICEST)函数来进行校正。

glHint函数的第一个参数是校正的图元类型:

  1. GL_POINT_SMOOTH 点
  2. GL_LINE_SMOOTH 线
  3. GL_POLYGON_SMOOTH 多边形

第二个参数是对校正效果的设定:

  1. GL_DONT_CARE  不校正
  2. GL_FASTEST  优先考虑处理速度
  3. GL_NICEST     优先考虑显示质量

#include <glut.h> 

GLsizei windowWidth=400,windowHeight=400;

void Init()
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluOrtho2D(0,400,0,400);
} void Display()
{
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0,0,1);
glPointSize(10); glBegin(GL_POINTS);
glVertex2f(100,300);
glEnd(); glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH,GL_NICEST); glBegin(GL_POINTS);
glVertex2f(130,300);
glEnd();
glDisable(GL_POINT_SMOOTH); glColor3f(1,0,0);
glLineWidth(10); glBegin(GL_LINES);
glVertex2f(80,120);
glVertex2f(280,320);
glEnd(); glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH,GL_FASTEST); glBegin(GL_LINES);
glVertex2f(80,80);
glVertex2f(280,280);
glEnd(); glDisable(GL_LINE_SMOOTH); glFlush();
} int main(int argc, char *argv[])
{
glutInit(&argc, argv); //初始化GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(500, 200);
glutInitWindowSize(windowWidth, windowHeight);
glutCreateWindow("OpenGL");
Init();
glutDisplayFunc(&Display); //回调函数
glutMainLoop();
}

左侧是没有经过反走样校正的点和线,右侧经过校正:




OpenGL(十八) 顶点数组和抗锯齿(反走样)设置的更多相关文章

  1. osg如何设置抗锯齿(反走样,反锯齿)

    首先抗锯齿是什么? 举个最简单的例子 你用windows画图软件画一根直线(准确说这个叫做线段),当水平或者垂直的时候,如下图,这是绝对完美的 但是当线段出现倾斜时,就无法做到完美了此时就会出现锯齿 ...

  2. 「kuangbin带你飞」专题十八 后缀数组

    layout: post title: 「kuangbin带你飞」专题十八 后缀数组 author: "luowentaoaa" catalog: true tags: - kua ...

  3. OpenGL:使用顶点数组法绘制正六面体

    在今天的opengl的课程以及实验中,我们学习了如何使用顶点数组的方法来绘制图形,但相信还有很多同学对它的实际使用方法不太了解,我们就用我们今天实验课上的实例来简单讲解一下 题目及要求 绘制一个正六面 ...

  4. 剑指offer二十八之数组中出现次数超过一半的数字

    一.题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  5. iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)

    新建一个Category,命名为UIColor+Hex,表示UIColor支持十六进制Hex颜色设置. UIColor+Hex.h文件, #import <UIKit/UIKit.h> # ...

  6. Android实战简易教程-第二十八枪(基于Bmob实现头像图片设置和网络上传功能!)

    上一篇我们介绍了怎样由uri转换成String ,本文就用到了上篇文章的方法.以下我们介绍一下怎样设置头像后将头像图片上传到云端的方法,本文基于Bmob提供的服务. 看一下代码:(布局文件和前两篇文章 ...

  7. openGL线型和线宽以及线的抗锯齿

    openGL线型和线宽以及线抗锯齿 一. 线宽 Opengl的线宽设置:glLineWidth(width); width为float类型值,在0~10.0,大于10以上按10来处理. 若开启线的反走 ...

  8. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写

    实验十八:SDRAM模块① — 单字读写 笔者与SDRAM有段不短的孽缘,它作为冤魂日夜不断纠缠笔者.笔者尝试过许多方法将其退散,不过屡试屡败的笔者,最终心情像橘子一样橙.<整合篇>之际, ...

  9. Unity QualitySettings.antiAliasing 抗锯齿

    QualitySettings.antiAliasing 抗锯齿 Description 描述 Set The AA Filtering option. 设置AA过滤选项. The AntiAliaz ...

随机推荐

  1. codeforces 571B--Minimization(贪心+dp)

    D. Minimization time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  2. Chromium网页URL载入过程分析

    Chromium在Browser进程中为网页创建了一个Frame Tree之后,会将网页的URL发送给Render进程进行载入.Render进程接收到网页URL载入请求之后,会做一些必要的初始化工作, ...

  3. RSA DH

    https://www.cnblogs.com/hiflora/archive/2013/07/04/3171775.html http://www.ruanyifeng.com/blog/2013/ ...

  4. css3背景透明文字不透明

    在 FF/Chrome 等较新的浏览器中可以使用css属性background-color的rgba轻松实现背景透明,而文字保持不透明.而IE6/7/8浏览器不支持rgba,只有使用IE的专属滤镜fi ...

  5. crx

    https://www.crx4chrome.com/down/770/crx/ Downloading crx file for Linkclump The Linkclump crx file y ...

  6. Docker CE for Windows安装使用

    原文:Docker CE for Windows安装使用 官网下载并安装Docker CE for Windows IDEA连接Docker Docker一些常用命令 Docker for windo ...

  7. Ubuntu snmp配置

    http://wenku.baidu.com/link?url=7ieAta_w87NDrTOT_DyEQSj4Rd9i82YRUGQl--g077oC3ftckgH7wpT5QEyir-NtZLA3 ...

  8. [React Router v4] Parse Query Parameters

    React Router v4 ignores query parameters entirely. That means that it is up to you to parse them so ...

  9. Ambari——大数据平台的搭建利器(一)

    Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是**项目.目前最新的发布版本是 2.0.1,未来不久将发布 2.1 版本 ...

  10. python3 numpy API练习代码

    # -*- coding: utf-8 -*- import numpy as np; a=np.array([1,2,3,4,5,6]); print("数组是:",a) #数组 ...