SceneKit:简单的3D游戏场景搭建
SceneKit是Apple用来开发休闲3D游戏的框架,不同于底层的OpenGL库,你仅仅需要很少的代码就可以快速看到实际的3D场景效果.下面简单的聊聊搭建一个3D游戏场景需要做的事情.
首先你必须用其他3D建模工具生成你需要的3D模型,后缀为dae或者scn,应该还附带一张纹理图片.
可以将3D模型文件连同纹理图片导入Xcode,以下是一个例子
可能有些童鞋不知道如何打开场景图(scene graph)的界面,只要点击上图最下一行local按钮左边的方框按钮即可:
你在场景图界面中可以添加光源,摄像头等附属在SCNNode上的元素:
SceneKit中也自带一些简单的3D几何图形类,比如球体,圆锥体等等.你可以将他们组合成更加复杂的3D形体放到3D场景中.稍后我也会给出一些例子.
下面我们可以将3D场景导入到视图中来:
let mainScene = SCNScene(named: "art.scnassets/hero.scn")
let sceneView = self.view as! SCNView
sceneView.scene = mainScene
sceneView.showsStatistics = true
sceneView.allowsCameraControl = true
好玩起见,我们再添加几个简单几何体到场景中去:
func BoxNode()->SCNNode{
let box = SCNBox(width: 10, height: 10, length: 10, chamferRadius: 1)
let boxNode = SCNNode(geometry: box)
boxNode.geometry?.firstMaterial?.diffuse.contents = UIColor.brownColor()
boxNode.position = SCNVector3(x: 0, y: 10, z: -20)
return boxNode
}
mainScene.rootNode.addChildNode(BoxNode())
类似的还有其他几个简单几何体,设置都大同小异.
最后我们SceneKit还内置了可以直接将字符串变为3D几何体的类SCNText,我们可以方便的在游戏场景中生成3D文字
func createStartingText()->SCNNode{
let startText = SCNText(string: "大熊猫猪侯佩", extrusionDepth: 5)
startText.chamferRadius = 0.5
startText.flatness = 0.3
startText.font = UIFont(name: "Copperplate", size: 30)
startText.firstMaterial?.specular.contents = UIColor.blueColor()
startText.firstMaterial?.diffuse.contents = UIColor.yellowColor()
startText.firstMaterial?.shininess = 0.4
let textNode = SCNNode(geometry: startText)
textNode.scale = SCNVector3(x: 0.75, y: 0.75, z: 0.75)
textNode.position = SCNVector3(x: 0, y: 50, z: -50)
return textNode
}
最后运行App看看效果:
还是蛮赞的,不是吗 ;]
SceneKit:简单的3D游戏场景搭建的更多相关文章
- 【Unity】实验二 游戏场景搭建
实验要求 实验二 游戏场景搭建 实验目的:掌握游戏场景搭建. 实验要求:能够使用Unity的地形引擎创建地形,熟悉场景中的光照与阴影,掌握天空盒和雾化效果等. 实验内容: 地形的绘制:使用高度图绘制: ...
- Unity5.X 创建基本的3D游戏场景
点New(新建懒得写了,反正不是智障应该都会) 创建好的项目会自带一个场景,场景会自带Main Camera (主摄像机),Directional Light (方向光) 系统自带几个可以创建的3 ...
- unity 3D游戏场景转换
//////////////////2015/07/07//////// /////////////////by xbw/////////////// ///////////////环境 unity ...
- 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景
最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...
- 2d游戏和 3d游戏的区别
2D游戏和3D游戏的主要区别 一.总结 一句话总结:2D中的单位就是贴图,3D中的单位还有高 1. 3D 和 2D 游戏的区别主要体现在呈现画面和文件体积上: 2. 借助 3D 引擎可以提升 2D 游 ...
- 3D游戏引擎中常见的三维场景管理方法
对于一个有很多物体的3D场景来说,渲染这个场景最简单的方式就是用一个List将这些物体进行存储,并送入GPU进行渲染.当然,这种做法在效率上来说是相当低下的,因为真正需要渲染的物体应该是视椎体内的物体 ...
- 能快速搭建三维场景,这款3D全场景编辑器你还没用过吗?
今天就给大家分享一个非常好用的老子云3D全场景编辑器,不仅可以基于GIS数据,帮助用户快速搭建3D城市大场景.实现Web端流畅展示. 并且搭建的3D场景可离线开发成一个空间信息直观的.可交互.易于设计 ...
- 3D游戏编程大师技巧──环境搭建
刚开微博,想借助这个平台与大家交流,写下自己的学习记录,希望得到大家的批评指正. 好了,进入主题.这段时间对游戏编程很感兴趣,于是在网友的推荐下开始学习<3D游戏编程大师技巧>这本书.今天 ...
- 【Unity3d】3d网页游戏场景打包与加载
http://www.cnblogs.com/dosomething/archive/2012/04/07/2436353.html 3d游戏中 一个场景往往比较大 如果游戏的进行需要下载一个10 ...
随机推荐
- php中一些提高性能的技巧
php中一些提高性能的技巧 tags:php性能 提高性能 php中的@ php的静态 引言:php作为一种脚本语言,本身的性能上肯定是不如c++或者java的.拥有简单易学的特性的同时,性能提升的空 ...
- 树莓派控制HC-SR04超声波模块测距(新手向+C语言向)
因为作业要求使用c语言代码,这里先附上一段摘自网上的代码 感谢KalaerSun的c语言代码,摘自https://blog.csdn.net/qq_25247589/article/details/6 ...
- [BZOJ 4919]大根堆
Description 题库链接 给定一棵 \(n\) 个节点的有根树,每个点有一个权值 \(val_i\) .你需要选择尽可能多的节点,使得:对于任意两个点 \(i,j\) ,如果 \(i\) 在树 ...
- [HNOI 2011]XOR和路径
Description 给定一个无向连通图,其节点编号为 1 到 N,其边的权值为非负整数.试求出一条从 1 号节点到 N 号节点的路径,使得该路径上经过的边的权值的“XOR 和”最大.该路径可以重复 ...
- poj3580 splay树 REVOVLE循环
SuperMemo Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 12795 Accepted: 3989 Case T ...
- Entity Framework DBContext 增删改查深度解析
Entity Framework DBContext 增删改查深度解析 有一段时间没有更新博客了,赶上今天外面下雨,而且没人约球,打算把最近对Entity Framework DBContext使用的 ...
- Python virtualenv 使用总结篇
一.virtualenv的安装 1.使用pip全局安装virtualenv,建议使用pip 1.3或更高版本,在1.3之前,pip没有通过SSL从PYPI下载. $ [sudo] pip instal ...
- 笔记12 注入AspectJ切面
虽然Spring AOP能够满足许多应用的切面需求,但是与AspectJ相比, Spring AOP 是一个功能比较弱的AOP解决方案.AspectJ提供了Spring AOP所不能支持的许多类型的切 ...
- js操作符+和()
ECMA-262 描述了一组用于操作数据值的操作符,包括一元操作符.算数操作符逻辑操作符.关系操作符.赋值操作符.字符串操作符.对象操作符等.ECMAScript 操作符的与众不同之处在于,它们能够适 ...
- Python小代码_5_二维矩阵转置
使用列表推导式实现二维矩阵转置 matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] print(matrix) matrix_t = [[ro ...