把顶点法线坐标分别存到buffer上,然后draw的时候x/y/z用这三个的index,shader里面分别根据index读出来buffer对应的数据,然后再计算。
感觉应该可行,不过没这么做过不确定成不成,需要写shader所以比较麻烦
想要顺利读取obj模型文件,先要了解这种文件的格式,obj文件格式是非常简单的。这种文件以纯文本的形式存储了模型的顶点、法线和纹理坐标和材质使用信息。obj文件的每一行,都有极其相似的格式。在obj文件中,每行的格式如下:
前缀 参数1 参数2 参数3 ...
其中,前缀标识了这一行所存储的信息类型。参数则是具体的数据。obj文件常见的的前缀有
v 表示本行指定一个顶点。 前缀后跟着3个单精度浮点数,分别表示该定点的x、y、z坐标值
vt 表示本行指定一个纹理坐标。此前缀后跟着两个单精度浮点数。分别表示此纹理坐标的u、v值
vn 表示本行指定一个法线向量。此前缀后跟着3个单精度浮点数,分别表示该法向量的x、y、z坐标值
f 表示本行指定一个表面(face)。一个表面实际上就是一个三角形图元。此前缀行的参数格式后面将详细介绍。
usemtl 此前缀后只跟着一个参数。该参数指定了从此行之后到下一个以usemtl开头的行之间的所有表面所使用的材质名称。该材质可以在此obj文件所附属的mtl文件中找到具体信息。
mtllib 此前缀后只跟着一个参数。该参数指定了此obj文件所使用的材质库文件(*.mtl)的文件路径
现在,我们再来看一下obj文件的结构。在一个obj文件中,首先有一些以v、vt或vn前缀开头的行指定了所有的顶点、纹理坐标、法线的坐标。然后再由一些以f开头的行指定每一个三角形所对应的顶点、纹理坐标和法线的索引。在顶点、纹理坐标和法线的索引之间,使用符号“/”隔开的。一个f行可以以下面几种格式出现:
f 1 2 3 这样的行表示以第1、2、3号顶点组成一个三角形。
f 1/3 2/5 3/4 这样的行表示以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3,第二个顶点的纹理坐标的索引值为5,第三个顶点的纹理坐标的索引值为4。
f 1/3/4 2/5/6 3/4/2 这样的行表示以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3,其法线的索引值是4;第二个顶点的纹理坐标的索引值为5,其法线的索引值是6;第三个顶点的纹理坐标的索引值为6,其法线的索引值是2。
f 1//4 2//6 3//2这样的行表示以第1、2、3号顶点组成一个三角形,且忽略纹理坐标。其中第一个顶点的法线的索引值是4;第二个顶点的法线的索引值是6;第三个顶点的法线的索引值是2。
值得注意的是文件中的索引值是以1作为起点的,这一点与c语言中以0作为起点有很大的不同。在渲染的时候应注意将从文件中读取的坐标值减去1。
Photoshop|
Dreamweaver|
SVG|
WebGL|
Visual Studio|
PowerDesigner|
Eclipse|
Git|
Apache Ant|
Atom|
Composer|
CodeSmith|
Flex|
Gradle|
Maven|
Sublime Text3|
SVN|
Tableau|
Vim|
Chrome开发者工具|
OpenGL|
Unity|
Direct3D|
用户登录
还没有账号?立即注册
用户注册
投稿取消
| 文章分类: |
|
还能输入300字
上传中....
无聊95170962