OpenGL 数据类型
因为OpenGL是一个跨平台的API,数据类型的大小会随使用的编程语言以及处理器(64位,32位,16位)等的不同而不同,所以OpenGL定义了自己的数据类型。当传递数据到OpenGL时,你应该坚持使用这些OpenGL的数据类型,从而保证传递数据的尺寸和精度正确。不这样做的后果是可能会导致无法预料的结果或由于运行时的数据转换造成效率低下。不论平台或语言实现的OpenGL都采用这种方式定义数据类型以保证在各平台上数据的尺寸一致,并使平台间OpenGL代码移植更为容易。
OpenGL ES仅支持三角形
typedef struct {
GLfloat x;
GLfloat y;
GLfloat z;
} Vertex3D;
GLfloat x;
GLfloat y;
GLfloat z;
} Vertex3D;
static inline Vertex3D Vertex3DMake(CGFloat inX, CGFloat inY, CGFloat inZ)
{
Vertex3D ret;
ret.x = inX;
ret.y = inY;
ret.z = inZ;
return ret;
}
{
Vertex3D ret;
ret.x = inX;
ret.y = inY;
ret.z = inZ;
return ret;
}
typedef struct {
Vertex3D v1;
Vertex3D v2;
Vertex3D v3;
} Triangle3D;
在OpenGL中有一个概念叫
卷绕(winding)
, 它表示顶点绘制的次序是重要的。不像真实世界中的物体,OpenGL中的多边形通常都不会有两面。它们只有一面,被当做
front face(前面),
三角形只有其front face面对观察者时才可见。其面对物体内部的一面永远也不可见。不被绘制的一面称为backface(背面),OpenGL是通过观察顶点的绘制次序来确定front face和backface的。以反时针次序绘制顶点的构成的面是frontface(默认,可以改变)。
它使用了一种称为Backface Culling(隐面消除) 的技术来避免绘制视窗中多边形的不可见面。