❶ 2023骞10娆炬渶浣3D妯″瀷镆ョ湅鍣ㄥ簲鐢锛圆ndroid鍜宨OS锛
鎺㈢储2023骞寸殑涓夌淮璁捐℃柊瑙嗛噹
1. ViewSTL - 娴忚埚櫒鐗堜箣阃: 鍏嶈垂涓旂敤鎴峰弸濂斤纴ViewSTL浠ョ亩鍗旷洿瑙傜殑鐣岄溃娆㈣繋浣犮傚畠镄勬牳蹇冨姛鑳藉寘𨰾澶氭牸寮忔敮鎸佸拰娴佺晠镄凷TL镆ョ湅浣挞獙銆傝槠铹跺熀纭鐗堟彁渚涘熀纭锷熻兘锛屼絾阃氲繃鍐呰喘瑙i挛楂樼骇鐗规э纴濡备綋绉娴嬮噺鍜屽幓闄ゅ箍锻婏纴璁╀綘镄勪娇鐢ㄦ洿锷犲叏闱銆
2. 3D Model Viewer-AR View (iOS) - 浜掑姩澧炲己浣挞獙: 涓扑负iOS璁捐★纴鍏嶈垂搴旂敤甯︽湁骞垮憡鏀鎸侊纴鏀鎸佸氱3D鏂囦欢镙煎纺锛岀壒鍒鏄疉R妯″纺鍜屼簰锷ㄥ伐鍏枫傚熀纭鐗堟湰链夐檺鍒讹纴浣嗗彲浠巌Cloud瀵煎叆镓╁𪾢锷熻兘銆
3. 鍦ㄧ嚎3D娴忚堢殑鏂板ぉ鍦 - Online 3D Viewer (锘轰簬娴忚埚櫒): 浜戞祻瑙堢殑渚挎嵎宸ュ叿锛屾棤闇娉ㄥ唽锛屾祴閲忓拰瀵煎嚭阃夐”涓搴斾勘鍏锛岄傚悎闇瑕佸嵆镞舵煡鐪嬬殑璁捐″笀銆
4. android鐗堣交閲忕骇涔嬮 - 3D Model Viewer (Android): 寮婧愪笖锷熻兘涓板瘜镄勫簲鐢锛屼负绉诲姩璁惧囦紭鍖栵纴链𨱒ュ皢甯︽潵镟村氩炲己浣挞獙銆
5. 鍒涗綔钥呯殑鍦ㄧ嚎瀹濆簱 - Creators3D Online Viewer: 鍏嶈垂娉ㄥ唽钖庯纴浣犲彲浠ヤ韩鍙楀氱3D鏂囦欢镄勬敮鎸侊纴涓板瘜镄勪氦浜掑伐鍏锋彁鍗囱捐℃晥鐜囥
6. CAD Assistant - 绂荤嚎CAD镄勫叏鑳戒箣阃: 鏀鎸乮OS鍜孉ndroid锛屽熀纭CAD锷熻兘寮哄ぇ锛岄傚悎闇瑕佺荤嚎镆ョ湅镄勮捐″笀銆
鍏煎规枃浠舵牸寮忥细浠岙TEP鍒3DM锛屾兜鐩栦简璁捐$晫镄勪富娴佹牸寮忥纴杞绘涧阃氲繃鏂囦欢阃夋嫨锷熻兘镓揿紑銆
镎崭綔渚挎嵎镐ф彁鍗囷细阃氲繃鏀硅繘镄勬坠锷挎带鍒讹纴浣犲彲浠ユ棤缂濇斁澶с佺缉灏忋佹棆杞鍜屽钩绉绘ā鍨嬶纴凿滃崟镙忔彁渚涢濆栫殑瀵艰埅阃夐”銆
璺ㄥ钩鍙板吋瀹规э细镞犺轰綘鏄鍦╓indows銆丩inux銆丮acOS锛岃缮鏄疉ndroid銆乮OS璁惧囦笂锛岃繖浜涘簲鐢ㄩ兘鑳芥棤缂濊繍琛屻
缁忔祹瀹炴儬镄勯夋嫨锛镓链夋帹钻愮殑搴旂敤鍧囧厤璐规彁渚涘熀链链嶅姟锛岄儴鍒嗗簲鐢ㄦ彁渚涘唴璐浠ヨВ阌佹洿澶氶珮绾у姛鑳姐
AVE3D Viewer - 鍏ㄨ兘镙煎纺鏀鎸: 瀵逛簬OBJ銆丳LY銆丢LTF绛夋牸寮忕殑鐖卞ソ钥咃纴AVE3D Viewer鎻愪緵浜嗕粯璐圭増锛岃В阌佹洿澶氭牸寮忔敮鎸侊纴鐢ㄦ埛瀵瑰叾鐣岄溃銆佹带鍒跺拰镙煎纺阃夋嫨璧炶獕链夊姞銆
涓扑负Android镓挞 - AVE3D Viewer (Android): 鍐呰喘阃夐”璁╀綘浣挞獙瀹屾暣镄勫姛鑳介泦锛屾弧瓒充綘镄勫氭牱鍖栭渶姹伞
杩欎竴鍒囷纴鐢盇LL3DP绮惧绩缂栬疟锻堢幇锛屼负浣犵殑3D璁捐′箣镞呮彁渚涘叏鏂逛綅鏀鎸併
❷ 在Android上开发一个3D游戏需要用到哪些技术
Android开源游戏引擎是Android游戏开发的基础,选择一个好的Android游戏开发的引擎能让我们更好的来开发游戏,下面就为大家简绍几个Android开源游戏引擎。
1、Angle
Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL ES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程。
2、Rokon
rokon是一款Android 2D游戏引擎,基于OpenGL ES技术开发,物理引擎为Box2D,因此能够实现一些较为复杂的物理效果,该项目最新版本为 2.0.3 (09/07/10)。总体来说,此引擎最大的优点在于其开发文档相当之完备,并且项目作者对反馈Bug的修正非常之神速,所以该框架的使用在目前也最为 广泛,有人干脆将它称为Cocos2d-iPhone引擎的Android版(业务逻辑和编码风格上也确实很像)。附带一提,国内某个需要注册会员才能下 载的Android游戏框架衍生于此框架,所以大家也不要刻板的认为收费便一定是好的,免费就一定不好,最低运行环境要求为Android 1.5。
3、LGame
LGame是一款国人开发的Java游戏引擎,有Android及PC(J2SE)两个开发版本,目前最高版本同为0.2.6(31/07/10)。其底 层绘图器LGrpaphics封装有J2SE以及J2ME提供的全部Graphics API(PC版采用Graphics2D封装,Android版采用Canvas模拟实现),所以能够将J2SE或J2ME开发经验直接套用其中,两版本 间主要代码能够相互移植。Android版内置有Admob接口,可以不必配置XML直接硬编码Admob广告信息。
该引擎除了基本的音效、图形、物理、精灵等常用组件以外,也内置有Ioc、xml、http等常用Java组件的封装,代价是jar体积较为庞大,PC版 已突破1.2MB,Android版有所简化也在500KB左右。此外,该引擎还内置有按照1:1实现的J2ME精灵类及相关组件,可以将绝大多数 J2ME游戏平移到Android或PC版中。唯一遗憾的是,该项目作者是个极其懒惰的家伙,开发文档从去年说到今年依旧没有提供,只有游戏示例可供下 载。
4、jPCT
jPCT是一款基于OpenGL技术开发的3D图形引擎(PC环境为标准OpenGL,Android为OpenGL ES), 以Java语言为基础的,拥有功能强大的Java 3D解决方案。该引擎与LGame(此为2D游戏引擎)相类似,目前拥有PC(J2SE)以及Android两个开发版本。
jPCT的最大优势之一,就在于它惊人的向下兼容性。在PC环境中,jPCT甚至可以运行在JVM1.1环境之中,因为jPCT内部提供的图形渲染接口完 全符合所有的Java 1.1规范(就连已经消失的Microsoft VM乃至更古老的Netscape 4 VM也不例外)。
5、Catcake
Catcake是一款跨平台的Java 3D图形引擎,目前支持PC(J2SE)及Android环境运行(已有iPhone版规划)。该引擎在易用性和运行性能上皆有出色的表现,支持常见的游戏开发功能,诸如精灵动画,音频处理和视频播放等。
转网络知道
❸ 怎样用Android开发Unity3D游戏
1.认识Unity3D
Unity3D是一个让开发者能够在多平台制作同一款游戏的游戏开发工具,有专业的图像处理和游戏引擎,能做出各式各样的游戏。
羽化以前认为Android游戏开发只能在Eclipse里面死活敲代码,也许是自己阅历不够,不知道游戏引擎能给游戏开发带来如此大的便利,无论是3D游戏还是2D游戏都可以用Unity3D开发而且转成IPHONE游戏也很简单,因为Unity3D很多移动开发功能IPHONE与Android是共用的,其中最主要的控制器就是一样的,这样我们就基本上告别Eclipse了。。。
由于Unity3D里面的脚本是用C#或者Java Script写的,学习过这两个语言最好,不会也没关系,还可以学嘛(和羽化一样),其实C#和JS与Java类似,看起来不会那么陌生,要注意的是JS中无论什么变量声明都是”var”表示,这点对于声明经常出错的羽化来说很好-0-
2. Unity3D环境搭建与Android软件生成方法
这里给大家介绍两个网站,在里面可以下载到最新的UnitySetup-3.3.0包括破解补丁U3v3.3.0f4_Win和脚本编辑器UnityScriptEditor2.55,还有很多学习资料,包括羽化正在学的Unity视频教程(全英文啊=。=),还有全中文帮助文档,虽然现在资料很少,但可以看出Unity3D越来越给力中。。。
安装过程就不详细写了,很简单的。这里要注意的是,安装的系统用户名不要是中文的,要不打开Unity3D以后Scene里面看不到东西,这是羽化的切生体验- -。
1)第一次打开Unity3D后会出现创建Project的界面,这就和Eclipse创建项目一样的道理,这时候可以添加一些插件包,这步操作羽化留在了软件打开后。
2)新建以后就出现了开发界面,这里简单介绍下:
Scene 开发视图:里面可以拖拽物体位置、改变大小、旋转角度等,是开发中最常的地方。
Game 游戏视图:点上面的运行以后游戏就会在Game视图里面运行,没点的时候可以看到摄像机当前的图像。
Hierarchy 层试图:放置游戏物件,在游戏运行时可以观察游戏物件变化
Project 工程视图:里面可以新建文件夹管理脚本,渲染,图片等。
Inspector 检查视图:显示物件属性等
最下面一条,一般情况下不会显示东西,如果出错或者打印语句都是显示在下面:
先不管那么多,生成个Android软件再说。
3)在Project里面右击 ——〉 Import Package ——〉 Standard Assets(Mobile)这是移动开发的包,全部Import导入吧。再在Project里面选中导入的Standard Assets(Mobile)———〉Control Setups——〉CameraRelativeSetup,这会提示保存Scene,我们就保存一个,可以看到Project里面多了一个我们保存的Scene,游戏运行就是从Scene开始,这时应该可以看到这个包的显示了。一眼就看出这是一个演示控制器的包,这个时候我们就不管这个工作原理,先放在Android手机里面看看效果。
4)点击左上角的File菜单——〉Build Settings——〉选中Android——〉右边Development Build勾打上——〉点击下面Player Settings,这时在Insperctor视图里面可以看到一些基本设定,第一个Resolution and Presentation是游戏视图设定,横屏还是竖屏随你可以默认它,点击Other Settings,这里主要设置Identification这个属性,里面第一个相当于项目包,这个一定不能默认,自己随便写个名字比如羽化就是com.LB.first其他设定大家可以自己研究,对于生成这个软件,这步必须改。
5)然后回到窗口点击Build,这里第一次点会跳出一个选中Android SDK的路径,大家都懂的,自己放哪的选哪,确定后,输入一个apk的名字,就叫作LB,如果发生什么错误,可以看看下面的提示。
6)软件已经生成好了后就可以丢到手机里面安装试试了,你可以直接丢在SD卡里面安装,这里羽化给大家介绍个简单的方法,对于模拟器还是真机都适用,首先设置环境变量,在Path里面添加如羽化自己目录的D:android-sdk-windowsplatform-tools,这样就可以在命令控制台里面打命令了,比如羽化安装的命令是cd C:UsersLiBeiDocumentsLB先到apk目录下,再输入adb install LB.apk这里要注意若你原来安装过相同名字软件,先卸载了再装。
7)实际运行效果左摇杆是控制位移,右摇杆是控制方向:
步骤看起很多,其实很简单。
3.Unity3D基本使用方法
这里羽化推荐大家看看视频,看视频学起来得很快,羽化就讲讲自己照视频做的例子,解压后可以通过Open Project选项打开这个例子,选中Scene里面的Scene1打开,运行是在电脑上。
1)场景创建
全是Cube搭建的,看一眼就知道了,Cube可以在上方Gameobject——〉create other里面创建,也点击Hierarchy层视图下面的Create创建,位置调整可以在Scene里面通过左上角的物件选项慢慢调整,第一个是观察,第二个是调整位置,第三个是调整角度,第四个调整大小。
2)主视角
这里主视角是用Standard Assets(这要自己导入)——〉Character Controllers——〉First Person Controller 可以看到这里能直接用的物件其实都是Prefab预设。这里可以看天空,其实是运用了Skybox组件,选中Main Camera可以在菜单中Component——〉Rendering——〉Skybox。
3)光
若无光运行的时候漆黑一片,这里放了个Point Light点光,数值可自行调整,添加和Cube一样。
4)脚本
脚本放在Scripts文件夹下,里面Door是控制门开关,Shoot是鼠标点击事件,Respawn是坠落返原地。注意这里脚本写好以后要拖到对应物体上才能运行。
5)动画
开门其实是个动画,创建在Component——〉Miscellaneous ——〉Animation
6)火焰
火焰是粒子产生的,粒子创建和Cube类似,Particle System里面的数值要做相应调整就会有火焰效果了。
再介绍几个Component里面重要的组件
1)Rigidbody 刚体
刚体顾名思义,有重量,带碰撞都是刚体的属性,若你为一个物件添加这个组件,证明你需要前面这几个属性。
2)Character 人物
其实里面放的都是控制视角或者是主角操作的脚本。
3)Trail Renderer 路径渲染器
很有用的组件,可以看到自己走过的路径,论坛上有个切水果刀光的例子就是用到它。
❹ 求助!在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();
}。