• 正文概述
  • GitHub – warrenm/GLTFKit:Objective-C glTF 2.0 加载器和基于 Metal 的渲染器

    Name
    7 years ago
    7 years ago
    6 years ago
    7 years ago
    7 years ago
    7 years ago
    7 years ago
    8 years ago
    7 years ago
    7 years ago
    7 years ago
    8 years ago
    7 years ago

    存储库文件导航

    GLTFKit

    Objective-C glTF 2.0 加载器和基于 Metal 的渲染器

    使用 GLTFMTL 框架呈现的 glTF 资产的屏幕截图

    内容

    该项目由几个相关部分组成:

    • GLTF.framework:用 Objective-C 编写的 glTF 2.0 加载器框架(适合在 Swift 中使用)
    • GLTFMTL.framework:使用 Metal 渲染 glTF 资产的框架
    • GLTFSCN.framework:将 glTF 场景转换为 SceneKit 场景的框架
    • 适用于 macOS 的查看器应用程序
    • 适用于 macOS 的 SceneKit 示例应用

    用法

    使用框架项目

    您可以将 GLTF 和 GLTFMTL 项目添加为您自己的 Xcode 项目的子项目,或者使用提供的工作区构建它们并将生成的框架二进制文件复制到您的项目中。

    要使用 GLTF.framework,请链接并嵌入 GLTF.framework。

    要使用提供的 Metal 渲染器,还要链接并嵌入 GLTFMTL 框架。

    加载资产

    要加载 glTF 2.0 模型,请导入并使用类:<GLTF/GLTF.h>GLTFAsset

    GLTFAsset *asset = [[GLTFAsset alloc] initWithURL:url bufferAllocator:bufferAllocator];

    URL 必须是本地文件 URL。不支持加载远程资产和资源。

    bufferAllocator是一个对象,它知道如何分配加载 glTF 缓冲区数据的内存(它必须符合协议)。要使用提供的Metal渲染器渲染资产,您可以传递一个实例 具体类 ,这是一个专门的实现,知道如何分配可以由Metal读取的GPU可访问内存。要创建这样的分配器,您需要为其提供对先前创建的对象的引用:GLTFBufferAllocatorGLTFMTLBufferAllocatorGLTFBufferAllocatorMTLDevice

    id<MTLDevice> device = MTLCreateSystemDefaultDevice();
    id<GLTFBufferAllocator> bufferAllocator = [[GLTFMTLBufferAllocator alloc] initWithDevice:device];

    渲染资产

    创建金属渲染器

    要创建 Metal 渲染器,请提供用于创建资源的相同设备:

    renderer = [[GLTFMTLRenderer alloc] initWithDevice:device];
    

    在渲染器上,您需要配置颜色和深度附件的初始可绘制大小和像素格式,以便它们与渲染通道上配置的纹理匹配。Metal 渲染器当前不支持 MSAA,首次绘制资源后也无法更改这些像素格式。

    如果要绘制到 中,则可以配置渲染器以匹配其设置:MTKView

    renderer.drawableSize = mtkView.drawableSize;
    renderer.colorPixelFormat = mtkView.colorPixelFormat;
    renderer.depthStencilPixelFormat = mtkView.depthStencilPixelFormat;
    

    绘图

    渲染器旨在允许将 glTF 资源绘制到与其他 Metal 绘制调用相同的渲染命令编码器(传递)中。

    下面是创建命令缓冲区和命令编码器并绘制 glTF 资产的示例:

    id <MTLCommandBuffer> commandBuffer = [commandQueue commandBuffer];
    
    MTLRenderPassDescriptor *renderPassDescriptor = mtkView.currentRenderPassDescriptor;
    
    id <MTLRenderCommandEncoder> renderEncoder = [commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor];
    
    // ... additional command encoder configuration and draw calls ...
    
    [renderer renderScene:asset.defaultScene
            commandBuffer:commandBuffer
           commandEncoder:renderEncoder];
    
    // ... additional command encoder configuration and draw calls ...
    
    [renderEncoder endEncoding];
    
    [commandBuffer presentDrawable:mtkView.currentDrawable];
    
    [commandBuffer addCompletedHandler:^(id<MTLCommandBuffer> buffer) {
        [renderer signalFrameCompletion];
    }];
    
    [commandBuffer commit];

    请注意,如果你的glTF资源包含透明网格体,这些网格体将按照它们在场景图表中的显示顺序绘制,因此可能无法与不透明内容或其他内容正确合成。

    与 SceneKit 互作

    附带的 GLTFSCN 框架可用于轻松地将 glTF 资产转换为 s 的集合,以便与 SceneKit 进行互作。SCNScene

    若要获取 glTF 资产中包含的场景集合,请使用 class 扩展方法 。此方法返回场景数组,因为没有表示场景集合的 SceneKit 类型。SCNScene+[SCNScene scenesFromGLTFAsset:options:]

    下面是一个示例,说明如何加载 GLTF 资源,将其转换为 SceneKit 场景的集合,并访问默认场景:

    id<GLTFBufferAllocator> bufferAllocator = [[GLTFDefaultBufferAllocator alloc] init];
    GLTFAsset *asset = [[GLTFAsset alloc] initWithURL:url bufferAllocator:bufferAllocator];
    GLTFSCNAsset *scnAsset = [SCNScene assetFromGLTFAsset:asset options:@{}];
    SCNScene *scene = scnAsset.defaultScene;

    请注意类型的使用。这是一个缓冲区分配器,用于分配常规内存,而不是GPU可访问的内存。如果你想将资产与Metal和SceneKit一起使用,你应该改用(如上图所示)。GLTFDefaultBufferAllocatorGLTFMTLBufferAllocator

    状态和一致性

    以下是 glTF 功能及其当前支持级别的清单。

    地位

    编码

    • JSON
    • 二进制 (.glb)

    缓冲区存储

    • 外部参考 (buffer.uri)
    • Base-64 编码缓冲区

    众所周知的顶点访问器语义

    • 位置
    • 正常
    • 切线
    • TEXCOORD_0
    • TEXCOORD_1
    • COLOR_0
    • JOINTS_0
    • WEIGHTS_0

    基元类型

    • 线
    • 线环
    • 线条
    • 三角形
    • 三角带
    • 三角风扇

    图像

    • 外部图像引用 (image.uri)
    • Base-64 编码图像
    • 巴布亚新几内亚
    • JPEG格式
    • 蒂夫
    • 开放EXR
    • 光芒

    材料

    • 基色系数
    • 金属系数
    • 粗糙度系数
    • 自发光因子
    • 基础颜色贴图
    • 金属粗糙度图
    • 遮挡贴图
    • 自发光贴图
    • 法线纹理比例
    • Alpha 模式
      • 不透明 alpha 模式
      • 蒙版 alpha 模式
      • 混合 alpha 模式
    • 双面材料

    取样

    • 包装模式
    • 缩小/放大滤光片
    • Mipmap

    相机

    • 透视相机
    • 正交相机

    变形目标(Morph Targets)

    • 变形目标

    动画

    • 翻译动画
    • 旋转动画
    • 缩放动画
    • 变形目标权重动画
    • 线性插值
    • 离散动画
    • 三次样条插值

    剥皮

    • 联合矩阵计算
    • 基于GPU的顶点蒙皮

    稀疏访问器

    • 稀疏访问器

    扩展

    • KHR_materials_pbrSpecularGlossiness
    • KHR_materials_common
    • KHR_lights
    • KHR_materials_unlit
    • KHR_texture_transform
    • EXT_pbr_attributes

    一致性

    已知此实现不符合 glTF 2.0 规范,并且正在积极开发中。

    贡献

    我们很乐意接受拉取请求,但将严格审核以保持代码风格。如果您对贡献有任何疑虑,请在 Github 上提出问题,以便我们讨论。

    许可证

     Copyright (c) 2018 Warren Moore. All rights reserved.
    
     Permission to use, copy, modify, and distribute this software for any
     purpose with or without fee is hereby granted, provided that the above
     copyright notice and this permission notice appear in all copies.
    
     THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.	
    
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,请不要用于商业用途!
    3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
    8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
    声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

    GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » Objective-C glTF 2.0 加载器和基于 Metal 的渲染器

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载要提取码
    百度网盘提取码都是gltf。
    分享过期和重复下载怎么办
    分享过期请使用备份下载,重复下载是不另扣费的,请放心下载。
    模型和平台不兼容怎么办
    可以用网站在线编辑功能,修改模型属性,大小,方向,坐标,中心,透明等问题,然后重新导出既可https://glbxz.com/38636.html
    开通VIP 享更多特权,建议使用 QQ 登录