博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenGL基础学习杂文
阅读量:5243 次
发布时间:2019-06-14

本文共 2293 字,大约阅读时间需要 7 分钟。

OpenGL的各种数据类型:

  • GLenum: 用于GL枚举的无符号整型。通常用于通知OpenGL由指针传递的存储于数组中数据的类型(例如,GL_FLOAT用于指示数组由GLfloat组成)。
  • GLboolean: 用于单布尔值。OpenGL ES还定义了其自己的“真”和“假”值(GL_TRUE和GL_FALSE)以避免平台和语言的差别。当向OpenGL传递布尔值时,请使用这些值而不是使用YES或NO(尽管由于它们的定义实际没有区别,即使你不小心使用了YES或NO。但是,使用GL-定义值是一个好的习惯。)
  • GLbitfield: 用于将多个布尔值(最多32个)打包到单个使用位操作变量的四字节整型。我们将在第一次使用位域变量时详细介绍,请参阅 
  • GLbyte: 有符号单字节整型,包含数值从-128 到 127
  • GLshort: 有符号双字节整型,包含数值从−32,768 到 32,767
  • GLint: 有符号四字节整型,包含数值从−2,147,483,648 到 2,147,483,647
  • GLsizei: 有符号四字节整型,用于代表数据的尺寸(字节),类似于C中的size_t
  • GLubyte: 无符号单字节整型,包含数值从0 到 255。
  • GLushort: 无符号双字节整型,包含数值从0 到 65,535
  • GLuint: 无符号四字节整型,包含数值从0 到 4,294,967,295
  • GLfloat: 四字节精度 浮点数
  • GLclampf: 这也是四字节精度浮点数,但OpenGL使用GLclampf特别表示数值为0.0 到 1.0
  • GLvoid:void值用于指示一个函数没有返回值,或没有参数
  • GLfixed:  使用整型数存储实数。由于大部分计算机处理器在处理整型数比处理浮点数快很多,这通常是对3D系统的优化方式。但因为iPhone具有用于浮点运算的矢量处理器,我们将不讨论定点运算或GLfixed数据类型。
  • GLclampx: 另一种定点型,用于使用定点运算来表示0.0 到 1.0之间的实数。正如GLfixed,我们不会讨论或使用它。

3D图像的最小单位称为 点(point) 或者 顶点vertex。它们代表三维空间中的一个点并用来建造更复杂的物体。多边形就是由点构成,而物体是由多个多边形组成。尽管通常OpenGL支持多种多边形,但OpenGL ES只支持三边形(即三角形)。

由于任何物体在三维空间中的方位可以由三个数值表示,物体的位置通常在OpenGL中由使用一个三维数组的三个GLfloat变量表示,数组中的第一项(索引0)为x位置,第二项(索引1)为y位置,第三项(索引2)为z位置。下面是一个创建OpenGL ES顶点的简单例子:

GLfloat vertex[3];    vertex[0] = 10.0;       // x    vertex[1] = 23.75;      // y    vertex[2] = -12.532;    // z 通过结构体来保存GLfloat: typedef struct {      GLfloat x;     GLfloat y;     GLfloat z; } Vertex3D;

通过这样做,我们的代码可读性更强:

Vertex3D vertex;

vertex.x = 10.0;
vertex.y = 23.75;
vertex.z = -12.532;

通过这样创建单个顶点:

static inline Vertex3D Vertex3DMake(CGFloat inX, CGFloat inY, CGFloat inZ)

{
    Vertex3D ret;
    ret.x = inX;
    ret.y = inY;
    ret.z = inZ;
    return ret;
}

在OpenGL中有一个概念叫卷绕(winding), 它表示顶点绘制的次序是重要的。不像真实世界中的物体,OpenGL中的多边形通常都不会有两面。它们只有一面,被当做front face(前面), 三角形只有其front face面对观察者时才可见。

 

正如 OpenGL ES 允许你将所有顶点置于一个数组中,它还允许你将每个顶点使用的颜色置于一个颜色数组(color array)中。如果你选择使用颜色数组,那么你需要为每个顶点设置颜色(四个GLfloat值)

  Vertex3D    vertex1 =Vertex3DMake(0.0, 1.0, -3.0);    Vertex3D    vertex2 =Vertex3DMake(1.0, 0.0, -3.0);    Vertex3D    vertex3 =Vertex3DMake(-1.0, 0.0, -3.0);    Triangle3D  triangle =Triangle3DMake(vertex1, vertex2, vertex3);   Color3D     *colors =malloc(sizeof(Color3D) * 3);  Color3DSet(&colors[0], 1.0, 0.0, 0.0, 1.0);  Color3DSet(&colors[1], 0.0, 1.0, 0.0, 1.0);  Color3DSet(&colors[2], 0.0, 0.0, 1.0, 1.0);
 

转载于:https://www.cnblogs.com/bu779783251/p/3152233.html

你可能感兴趣的文章
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
CentOS 简单命令
查看>>
使用 SharedPreferences 分类: Andro...
查看>>
TLA+(待续...)
查看>>
题解: [GXOI/GZOI2019]与或和
查看>>
MacOS copy图标shell脚本
查看>>
第八章 方法
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
堆 栈
查看>>
Kth Smallest Element in Unsorted Array
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
RBAC用户角色权限设计方案
查看>>
thymeleaf
查看>>