OpenGL ES相关文件pvr文件、OBJ文件

pvr与png的内存占用

Zwoptex生成的spritesheet除了可以导出png格式的图片外还有pvr格式。pvr格式是iOS的显示芯片可以直接读取的,不需要经过解析就能直接显示,所以渲染速度更快,更节省内存。


我特意在cocos2D 2.0 rc1版本做了一项测试:


    一个空的cocos2D模版工程运行起来之后占用的内存大约是4MB。


    直接用CCSprite显示一张2048*1024的数据格式为RGBA565的PNG图片之后,内存占用达到了20MB。


    同样的情况下换成pvr格式之后,内存占用为16MB。也就是说png格式的图片占用了20-4=16MB,pvr格式的图片占用了16-4=12MB。节省了25%。


    Zwoptex还有一个选项叫做“ccz压缩”,选中之后图像的大小几乎可以减小一半。这样的文件格式成了:xxx.pvr.ccz,cocos2d是可以识别的。


     PVRTC2PVRTC4 是两种pvr压缩的图像格式,他们都是pvr文件。这两种图像格式比普通图像有更快的加载速度和更小的内存占用。


PVRTC4: Compressed format, 4 bits per pixel, ok image quality


PVRTC2: Compressed format, 2 bits per pixel, poor image quality


一般pvr格式文件的图像格式有:


RGBA8888: 32-bit texture with alpha channel, best image quality


RGBA4444: 16-bit texture with alpha channel, good image quality


RGB565: 16-bit texture without alpha channel, good image quality but no alpha (transparency)


图像占用内存的公式是: numBytes = width * height * bitsPerPixel / 8


也就是说2048*2048的RGBA8888占用内存16MB,而PVRTC4只占用2MB

3D中的OBJ文件格式详解

  OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,很适合用于3D软件模型之间的互导,也可以通过Maya读写。比如你在3dsMax或LightWave中建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择。目前几乎所有知名的3D软件都支持OBJ文件的读写,不过其中很多需要通过插件才能实现。

  OBJ文件是一种文本文件,可以直接用写字板打开进行查看和编辑修改。另外,有一种与此相关二进制文件格式(*.MOD),其作为专利未公开,因此这里不作讨论。

编辑本段

OBJ文件的特点


  OBJ3.0文件格式支持直线(Line)、多边形(Polygon)、表面(Surface)和自由形态曲线(Free-form Curve)。直线和多角形通过它们的点来描述,曲线和表面则根据它们的控制点和依附于曲线类型的额外信息来定义,这些信息支持规则和不规则的曲线,包括那些基于贝塞尔曲线(Bezier)、B样条(B-spline)、基数(Cardinal/Catmull-Rom)和泰勒方程(Taylor equations)的曲线。其他特点如下:

  (1)OBJ文件是一种3D模型文件。不包含动画、材质特性、贴图路径、动力学、粒子等信息。

  (2)OBJ文件主要支持多边形(Polygons)模型。虽然也支持曲线(Curves)、表面(Surfaces)、点组材质(Point Group Materials),但Maya导出的OBJ文件并不包括这些信息。

  (3)OBJ文件支持三个点以上的面,这一点很有用。很多其它的模型文件格式只支持三个点的面,所以导入Maya的模型经常被三角化了,这对于我们对模型进行再加工甚为不利。

  (4)OBJ文件支持法线和贴图坐标。在其它软件中调整好贴图后,贴图坐标信息可以存入OBJ文件中,这样文件导入Maya后只需指定一下贴图文件路径就行了,不需要再调整贴图坐标。

编辑本段

OBJ文件的基本结构


  OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。OBJ文件由一行行文本组成,注释行以符号“#”为开头,空格和空行可以随意加到文件中以增加文件的可读性。有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。多行可以逻辑地连接在一起表示一行,方法是在每一行最后添加一个连接符(\)。注意连接符(\)后面不能出现空格或Tab格,否则将导致文件出错。

  下列关键字可以在OBJ文件使用。在这个列表中, 关键字根据数据类型排列,每个关键字有一段简短描述。

  顶点数据(Vertex data):  

 v 几何体顶点(Geometric vertices)

  vt 贴图坐标点(Texture vertices)

  vn 顶点法线(Vertex normals)

  vp 参数空格顶点 (Parameter space vertices)

  自由形态曲线(Free-form curve)/表面属性(surface attributes):  

 deg 度(Degree)

  bmat 基础矩阵(Basis matrix)

  step 步尺寸(Step size)

  cstype 曲线或表面类型 (Curve or surface type)

  元素(Elements):  

 p 点(Point)

  l 线(Line)

  f 面(Face)

  curv 曲线(Curve)

  curv2 2D曲线(2D curve)

  surf 表面(Surface)

  自由形态曲线(Free-form curve)/表面主体陈述(surface body statements):

  parm 参数值(Parameter values )

  trim 外部修剪循环(Outer trimming loop)

  hole 内部整修循环(Inner trimming loop)

  scrv 特殊曲线(Special curve)

  sp 特殊的点(Special point)

  end 结束陈述(End statement)

  自由形态表面之间的连接(Connectivity between free-form surfaces):  

con 连接 (Connect)

  成组(Grouping):

  g 组名称(Group name)

  s 光滑组(Smoothing group)

  mg 合并组(Merging group)

  o 对象名称(Object name)

  显示(Display)/渲染属性(render attributes):  

 bevel 导角插值(Bevel interpolation)

  c_interp 颜色插值(Color interpolation)

  d_interp 溶解插值(Dissolve interpolation)

  lod 细节层次(Level of detail)

  usemtl 材质名称(Material name)

  mtllib 材质库(Material library)

  shadow_obj 投射阴影(Shadow casting)

  trace_obj 光线跟踪(Ray tracing)

  ctech 曲线近似技术(Curve approximation technique)

  stech 表面近似技术 (Surface approximation technique)

  OBJ文件不包含面的颜色定义信息,不过可以引用材质库,材质库信息储存在一个后缀是".mtl"的独立文件中。关键字"mtllib"即材质库的意思。

  材质库中包含材质的漫射(diffuse),环境(ambient),光泽(specular)的RGB(红绿蓝)的定义值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特征。

  "usemtl"指定了材质之后,以后的面都是使用这一材质,直到遇到下一个"usemtl"来指定新的材质。