通过这样做,我们的代码可读性更强:
Vertex3D vertex;
vertex.x = 10.0;
vertex.y = 23.75;
vertex.z = -12.532;
现在由于Vertex3D由三个GLfloat组成,向Vertex3D传递指针与向数组传递一个包含三个GLfloat的数组的指针完全一样。对于电脑而言毫无分别;两者具有同样的尺寸和同样的字节数以及OpenGL需要的同样的顺序。将数据分组到数据结构只是让程序员感到更容易,处理起来更方便。如果你下载了文章开头处的Xcode模板,你会发现此数据结构以及我后面将讨论的各种函数都定义在文件OpenGLCommon.h中。还有一个内联函数用于创建单个顶点:
static inline Vertex3D Vertex3DMake(CGFloat inX, CGFloat inY, CGFloat inZ)
{
Vertex3D ret;
ret.x = inX;
ret.y = inY;
ret.z = inZ;
return ret;
}
如果你回忆起几何学(如果不记得也不要紧)的内容,你会知道空间中两点间的距离是使用下面公式计算的:
我们可以在一个简单的内联函数中实现这个公式来计算三维空间中任何两点间的直线距离:
static inline GLfloat Vertex3DCalculateDistanceBetweenVertices (Vertex3D first, Vertex3D second)
{
GLfloat deltaX = second.x - first.x;
GLfloat deltaY = second.y - first.y;
GLfloat deltaZ = second.z - first.z;
return sqrtf(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ );
};
三角形
由于OpenGL ES仅支持三角形,因此我们可以通过创建一个数据结构将三个顶点组合成一个三角形物体。
typedef struct {
Vertex3D v1;
Vertex3D v2;
Vertex3D v3;
} Triangle3D;
一个 Triangle3D实际上与一个九个GLfloat构成的数组是完全一样的,因为我们通过顶点和三角形而不是GLfloat数组来构建物体,所以它能帮助我们更容易地处理我们的代码。
然而关于三角形你需要知道更多的事情。在OpenGL中有一个概念叫卷绕(winding), 它表示顶点绘制的次序是重要的。不像真实世界中的物体,OpenGL中的多边形通常都不会有两面。它们只有一面,被当做front face(前面), 三角形只有其front face面对观察者时才可见。可以设置OpenGL将多边形作为两面处理,但默认状态下,三角形只有一个可见面。通过知道哪一个面是多边形的前面或可见面,才能使OpenGL只做一半的计算。
尽管有时多边形也可以独立存在,需要绘制其背面,但通常三角形是一个大物体的一部分,其面对物体内部的一面永远也不可见。不被绘制的一面称为backface(背面),OpenGL是通过观察顶点的绘制次序来确定front face和backface的。以反时针次序绘制顶点的构成的面是frontface(默认,可以改变)。由于OpenGL可以很容易确定哪个三角形对用户可见,所以它使用了一种称为Backface Culling(隐面消除) 的技术来避免绘制视窗中多边形的不可见面。下一篇文章将讨论视窗,现在你可将其想象成一个虚拟摄像或观察OpenGL世界的虚拟窗口。
上图中,左边青色的三角形是backface,因此将不可见。而右方的三角形是frontface,所以将被绘制。
本系列的下一篇文章将设定一个OpenGL的虚拟世界并使用Vertex3D 和 Triangle3D进行一些基本绘图。再后,我们将讨论变换,它使用线性代数在虚拟世界中移动物体。
相关推荐
从零开始学习OpenGL ES之基础概念权威版本,内附有讲解代码!
从零开始学习OpenGL_ES 网页文件
Opengl ES 入门 从零开始学习OpenGL ES
从零开始学习OpenGL ES中的项目文件 Empty.OpenGL.ES.Application.zip
iphone上学习opengles的必备资料,完全零基础开始学习
这个比那个西蒙的要简单点。希望大家去学习这个。里面有模版,大家学习的时候 跟着模版来,那样就跟能快速入门了。
泰然论坛翻译的 OpenGL ES 从零开始系列 文章源码,由于是很早之前的,原连接失效了。 找了很久才找到的,是目前最齐全的。总共7个DEMO, 涵盖了总共9章的内容
学习iphone openGL_ES从这里开始!这是一本关于iphone openGL_ES的入门书,从最基本的开始讲起,只要你看了,那么就能掌握openGL_ES的内容。这真是一本好书,我的openGL_ES就是从这里开始的。(中文版)
1.从零开始学习OpenGL+ES 2.opengl-es画图步骤 3.图形绘制与OpenGL_ES 4.Android开发之OpenGL+ES教程
ios游戏编程的OpenGL ES入门非常好的资料。
opengl es 入门级教程,虽然是IOS的代码,android java 及 ndk 是一样可移植使用的,opengl es的函数名在各平台是一致的
教程名称:OpenGL ES经典教程大全课程目录:【】Android应用OpenGLES制作3D图像【技术文档】【】OpenGL ES 2.0 官方手册【】OpenGL ES ...从零开始学习Open 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
从零开始学习OpenGL ES之五 – 材质的项目文件
OpenGLES 3.0从零开始,绘制点、线、三角形、立方体,相机实时预览等等实践
从零开始学习OpenGL ES系列教程的工程模板,XCode4.2,路径为/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/Application/
从零开始学习OpenGL ES系列教程XCode4的工程模板,Empty OpenGL ES Application,路径/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Application/
从零开始学习OpenGL ES之五 – 材质, 这一章 的 球体绘制 的项目文件 。 Opengl es 学习用到的例子。Part5ProjectStart.zip.
android平台opengles3.0实践学习 效果预览
OpenGL ES 从零开始系列教程的工程模板,XCode4.2,路径为/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/Application/