导航:首页 > 操作系统 > android加载obj文件

android加载obj文件

发布时间:2022-07-18 15:09:58

android的动态加载和静态加载的区别

两者区别: 一,静态库的使用需要: 1 包含一个对应的头文件告知编译器lib文件里面的具体内容 2 设置lib文件允许编译器去查找已经编译好的二进制代码 二,动态库的使用: 程序运行时需要加载动态库,对动态库有依赖性,需要手动加入动态库 三,依赖性: 静态链接表示静态性,在编译链接之后, lib库中需要的资源已经在可执行程序中了, 也就是静态存在,没有依赖性了 动态,就是实时性,在运行的时候载入需要的资源,那么必须在运行的时候提供 需要的 动态库,有依赖性, 运行时候没有找到库就不能运行了 四,区别: 简单讲,静态库就是直接将需要的代码连接进可执行程序;动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。 做成静态库可执行文件本身比较大,但不必附带动态库 做成动态库可执行文件本身比较小,但需要附带动态库 五: 首先纠正所谓“静态连接就是把需要的库函数放进你的exe之中”的说法。在真实世界中,有三个概念:Use static libary, static linked DLL, dynamic linked DLL. 多数人混淆了static libary 和 static linked DLL的概念,当然他们有似是而非的“相似之处”,比如都用到.lib,下面具体说明。 使用静态库(Use static libary)是把.lib和其他.obj一起build在目标文件中,目标文件可以是.exe,也可以是.dll或.oxc等。一般情况下,可以根本就没有“对应的”.dll 文件,如C Run Time(CRT)库。一个例子就是,写一个main(){},build出来并不是只有几个字节,当然有人会说那还有exe文件头呢?是,即使加上文件头的尺寸,build出的执行文件仍然“莫名的大”。实际上那多出来的部分就是CRT静态库。姑且可以把静态库.lib理解成外部程序的obj文件比较合理,它包含了函数的实现。

㈡ 求帮写一个在android手机上显示obj文件

下面的List可用ArrayList替换

InputStream input;
BufferedReader reader;
try
{
List verticeLines = new List();
List textureLines = new List();
List normalLines = new List();
List verticeIndiceLines = new List();
List textureIndiceLines = new List();
List normalIndiceLines = new List();
input=new FileInputStream(data);
reader = new BufferedReader(new InputStreamReader(input));
String line = null;
while((line = reader.readLine()) != null)
{

//?狦琌猔秆┪?フ膥尿铬筁
if(line.startsWith("//") ||line.startsWith("#")|| line.trim().equals(""))
{
continue;
}
String SPACE=" ";
String SLASH="/";
String[] st=RemoveNull(line.split(SPACE));

String lineType = st[0];
if(lineType.equals("v"))
{//郴翴畒夹
verticeLines.Add(st[1]);
verticeLines.Add(st[2]);
verticeLines.Add(st[3]);
}
else if(lineType.equals("vt"))
{//郴翴?借畒夹
textureLines.Add(st[1]);
textureLines.Add(st[2]);
}
else if(lineType.equals("vn"))
{//郴翴猭?秖
normalLines.Add(st[1]);
normalLines.Add(st[2]);
normalLines.Add(st[3]);
}
else if(lineType.equals("f"))
{//?à?癸莱?郴翴??借?猭?秖
//?舱畒夹
String v1=st[1];
String v2=st[2];
String v3=st[3];

String[] st1=v1.split(SLASH);
String[] st2=v2.split(SLASH);
String[] st3=v3.split(SLASH);
//顶点
verticeIndiceLines.Add(st1[0]);
verticeIndiceLines.Add(st2[0]);
verticeIndiceLines.Add(st3[0]);
//纹理
textureIndiceLines.Add(st1[1]);
textureIndiceLines.Add(st2[1]);
textureIndiceLines.Add(st3[1]);
//正常
normalIndiceLines.Add(st1[2]);
normalIndiceLines.Add(st2[2]);
normalIndiceLines.Add(st3[2]);
}
}

//郴翴畒夹:3?????郴翴
int indicesSize=verticeIndiceLines.Count();
indices=new short[indicesSize];
int verticeSize=indicesSize*3;
vertices=new float[verticeSize];
//?借畒夹:埃3т?砀?郴翴??2Τㄢ?畒夹
int textureSize=indicesSize*2;
textures=new float[textureSize];
//猭?秖:–?郴翴常Τ?舱猭?秖??3Τ3?よ??秖
int normalSize=indicesSize*3;
normals =new float[normalSize];
for(int i=0;i
{
//郴翴
indices[i]=(short)i;
int indice=Integer.valueOf(verticeIndiceLines.Item(i))-1;
//郴翴畒夹
vertices[i*3]=Float.valueOf(verticeLines.Item(indice*3));
vertices[i*3+1]=Float.valueOf(verticeLines.Item(indice*3+1));
vertices[i*3+2]=Float.valueOf(verticeLines.Item(indice*3+2));

if(!textureIndiceLines.Item(i).equals("")){
int textureIndice=Integer.valueOf(textureIndiceLines.ItemOrDefault(i, "0"))-1;
textures[i*2]=Float.valueOf(textureLines.ItemOrDefault(textureIndice*2,"0"));
textures[i*2+1]=Float.valueOf(textureLines.ItemOrDefault(textureIndice*2+1,"0"));
System.out.println(textureIndiceLines.Item(i));
}

//猭?秖畒夹
int normalIndice=Integer.valueOf(normalIndiceLines.Item(i))-1;
normals[i*3]=Float.valueOf(normalLines.Item(normalIndice*3));
normals[i*3+1]=Float.valueOf(normalLines.Item(normalIndice*3+1));
normals[i*3+2]=Float.valueOf(normalLines.Item(normalIndice*3+2));
}
}
catch (FileNotFoundException e)
{

e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}

㈢ 手机android文件夹下obb,obj,media都是干什么的能删除不

可以删除的,但是,删除以后就用不了这些 多媒体的文件夹了。一般是删除文件,不删除文件夹。

开心快乐每一天!哈哈哈!

㈣ 求助!在android中导入OBJ的3D模型怎么导入,求具体方法

下面的List可用ArrayList替换

InputStream input;
BufferedReader reader;
try
{
List<String> verticeLines = new List<String>();
List<String> textureLines = new List<String>();
List<String> normalLines = new List<String>();
List<String> verticeIndiceLines = new List<String>();
List<String> textureIndiceLines = new List<String>();
List<String> normalIndiceLines = new List<String>();
input=new FileInputStream(data);
reader = new BufferedReader(new InputStreamReader(input));
String line = null;
while((line = reader.readLine()) != null)
{

//?狦琌猔秆┪?フ膥尿铬筁
if(line.startsWith("//") ||line.startsWith("#")|| line.trim().equals(""))
{
continue;
}
String SPACE=" ";
String SLASH="/";
String[] st=RemoveNull(line.split(SPACE));

String lineType = st[0];
if(lineType.equals("v"))
{//郴翴畒夹
verticeLines.Add(st[1]);
verticeLines.Add(st[2]);
verticeLines.Add(st[3]);
}
else if(lineType.equals("vt"))
{//郴翴?借畒夹
textureLines.Add(st[1]);
textureLines.Add(st[2]);
}
else if(lineType.equals("vn"))
{//郴翴猭?秖
normalLines.Add(st[1]);
normalLines.Add(st[2]);
normalLines.Add(st[3]);
}
else if(lineType.equals("f"))
{//?à?癸莱?郴翴??借?猭?秖
//?舱畒夹
String v1=st[1];
String v2=st[2];
String v3=st[3];

String[] st1=v1.split(SLASH);
String[] st2=v2.split(SLASH);
String[] st3=v3.split(SLASH);
//顶点
verticeIndiceLines.Add(st1[0]);
verticeIndiceLines.Add(st2[0]);
verticeIndiceLines.Add(st3[0]);
//纹理
textureIndiceLines.Add(st1[1]);
textureIndiceLines.Add(st2[1]);
textureIndiceLines.Add(st3[1]);
//正常
normalIndiceLines.Add(st1[2]);
normalIndiceLines.Add(st2[2]);
normalIndiceLines.Add(st3[2]);
}
}

//郴翴畒夹:3?????郴翴
int indicesSize=verticeIndiceLines.Count();
indices=new short[indicesSize];
int verticeSize=indicesSize*3;
vertices=new float[verticeSize];
//?借畒夹:埃3т?砀?郴翴??2Τㄢ?畒夹
int textureSize=indicesSize*2;
textures=new float[textureSize];
//猭?秖:–?郴翴常Τ?舱猭?秖??3Τ3?よ??秖
int normalSize=indicesSize*3;
normals =new float[normalSize];
for(int i=0;i<verticeIndiceLines.Count();i++)
{
//郴翴
indices[i]=(short)i;
int indice=Integer.valueOf(verticeIndiceLines.Item(i))-1;
//郴翴畒夹
vertices[i*3]=Float.valueOf(verticeLines.Item(indice*3));
vertices[i*3+1]=Float.valueOf(verticeLines.Item(indice*3+1));
vertices[i*3+2]=Float.valueOf(verticeLines.Item(indice*3+2));

if(!textureIndiceLines.Item(i).equals("")){
int textureIndice=Integer.valueOf(textureIndiceLines.ItemOrDefault(i, "0"))-1;
textures[i*2]=Float.valueOf(textureLines.ItemOrDefault(textureIndice*2,"0"));
textures[i*2+1]=Float.valueOf(textureLines.ItemOrDefault(textureIndice*2+1,"0"));
System.out.println(textureIndiceLines.Item(i));
}

//猭?秖畒夹
int normalIndice=Integer.valueOf(normalIndiceLines.Item(i))-1;
normals[i*3]=Float.valueOf(normalLines.Item(normalIndice*3));
normals[i*3+1]=Float.valueOf(normalLines.Item(normalIndice*3+1));
normals[i*3+2]=Float.valueOf(normalLines.Item(normalIndice*3+2));
}
}
catch (FileNotFoundException e)
{

e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}。

㈤ 安卓opengl能打开obj文件

软件名称:Quickoffice 移动办公

[软件大小:1.86MB]
[是否中文:中文]
[更新日期:2010-01-26 11:09]
[软件格式:apk]
[开 发 者:]
[适用手机:Android Android1.5,Android1.6,Android2.1,Android2.2机型]
望采纳。

㈥ 打包android的时候怎么引入一些静态库

方法1 :
人为建立上面的文件夹并将静态库拷入;

方法2 :
就是通过编译配置来做上面的动作。具体如下:
1. 将动态库的编译部分和静态库的编译部分分开;
2. 在工作目录下建立一个lib文件夹(必须是这个名字),将第三方的静态库拷贝进去,并且增加一个编译配置文件Android.mk,具体内容如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库
这个编译配置文件就是要在obj下生成中间文件,供其他地方使用。
文件列表如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库

3. 在工作目录下建立一个文件夹,并且将生成动态库的相关文件全部拷贝进去。这里我们起的名字是src,当然也可以起其他名字。Android.mk内容如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库
这里只要直接引入第三方库就可以了。
文件列表如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库
third_lib.h是静态库的头文件,test.cpp很简单,就是一个函数里面顺序调了一下静态库里开放的函数,内容如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库

3. 工作目录下增加一个编译配置文件Android.mk,作用就是查找工作目录下所有的子目录中的Android.mk来编译。Android.mk的内容如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库
好,工作都做完了,下面进入工作目录mm -B 试一下,可以顺利编译成功。

阅读全文

与android加载obj文件相关的资料

热点内容
linux命令连接oracle 浏览:200
垫江停车收费桩怎么上App 浏览:133
好兴动app还款怎么登录不上去了 浏览:665
郑州云服务器托管 浏览:722
服务器地址跟踪 浏览:980
免费google云服务器 浏览:516
摘译和编译的英文 浏览:359
热泵压缩机选型 浏览:121
op手机微信加密如何解除 浏览:386
如何在王牌战争找到高爆率服务器 浏览:13
江浙小学语文辅导课用什么APP 浏览:99
新梦幻大陆服务器地址 浏览:241
网吧服务器怎么更换壁纸 浏览:530
linux命令方法 浏览:332
linux下载freetype 浏览:123
程序员入驻平台 浏览:327
程序员大战外挂 浏览:745
html实例教程pdf 浏览:157
linux命令开放所有权限 浏览:575
30岁能学会编程 浏览:737