Open GL es 2.0 简单加载Obj格式的模型文件

加载Obj 文件首先需要了解Obj 文件的格式

  “#” 号开头的行为注释,在程序加载的过程中可以省略
  “v” 号开头的为存放顶点的坐标,其后面的3个数值分别表示一个顶点的x,y,z 坐标。
   "vt"开头的用于存放顶点纹理坐标,其后面的3个数值分别表示纹理坐标的S,T,W 
   "vn" 开头的用于存放法向量,其后面的3个数值 分别表示一个顶点的法向量在x,y,z的分量
    "g" 表示一组的开始,后面的字符串为此组的名称。所谓组是指由顶点组成的一些面的几何。只包含“g”的行表示一组的结束,与“g”开头的行对应
    “f”开头的行表示组中的一个面,如果是三角形(OpenGL只支持三角形)则后面有3组用空格分隔的数据,代表三角形的3个顶点。 每组顶点包含3个数值,用 “/” 分割,依次表示顶点坐标的 数据索引,顶点纹理坐标的数据索引,顶点法向量的数据索引.

  
分割每组 数据 采用 String.split() ,在Obj 中,每行数据 中用 空格间断,所以要用正则表达式 
  
  
  
String[] tempsa=temps.split("[ ]+");
意思是 按照 空格(1个或者多个) 进行数据的分割

!!好像没什么好讲的~~上一份来自 OpenGL es 2.0 游戏开发 的读取obj 方法,不包括骨骼,以及动画。

唯一要讲的是,书上给出的obj 法向量是需要自己计算的,并没有在obj文件中给出这里涉及了2中 计算法向量的方式
1 采用面法向量 计算法,也就是说该点在的面的  法向量,即是该点的发现量, 这种计算的方法适合于 菱角分明的模型,如矩形。(也许会想,同一个点,可能涉及了多个面,那到底是哪个面的法向量呢?~是这样的,我们绘制的用的是
GL_Triangle 的方式绘制面,也就是说 每3个点就一个面,即每个点只会涉及一个面~~)

2. 采用点法向量 计算法, 一般曲面采取该方法计算,会得到更加平滑的法向量 计算光照, 每个顶点的法向量 = 临近3个面的法向量的 平均值。。

 计算面的法向量使用 叉积计算, 如 面由 0 1 2  三个顶点组成 那么  0->1 0->2 两个向量的 叉积即使 该面的法向量
   
   
   
package com.bn.Sample9_4;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import android.content.res.Resources;
import android.util.Log;
 
public class LoadUtil
{
//求两个向量的叉积
public static float[] getCrossProduct(float x1,float y1,float z1,float x2,float y2,float z2)
{
//求出两个矢量叉积矢量在XYZ轴的分量ABC
float A=y1*z2-y2*z1;
float B=z1*x2-z2*x1;
float C=x1*y2-x2*y1;
return new float[]{ A,B,C};
}
//向量规格化
public static float[] vectorNormal(float[] vector)
{
//求向量的模
float module=(float)Math.sqrt(vector[0]*vector[0]+vector[1]*vector[1]+vector[2]*vector[2]);
return new float[]{ vector[0]/module,vector[1]/module,vector[2]/module};
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值