jjzjj

ios - 无限滚动 3d map

我对Metal有一些经验,对Unity也有一定的经验,并且熟悉设置网格、缓冲区和绘图的支持数据;但与其说是数学/着色器方面。我正在苦苦挣扎的是如何获得一个无尽的滚动世界。因此,如果我向右侧平移很远,我可以看到左侧并继续前进。这将是一个无缝地形的应用,玩家可以永远向任何方向滚动并让它只是环绕。我不想在绘制时复制所有内容并对其进行偏移,这看起来效率极低。我希望有一种方法可以使用一些神奇的矩阵数学或某种着色器来在平移map时将事物包装/绘制到它们应该的位置。我到处搜索了某种指南或解释如何使它工作但没有想出任何东西。我知道很多旧的(dos)游戏都以某种方式做到了这一点,这仍然可能吗?行业似乎已

swift - 生成支持折痕的 MDLMesh?

我已经能够创建一个MDLMesh并转换为SCNGeometry以在SceneKit中渲染。但是我无法在我的网格或几何体中获得折痕支持。我只是想验证我是否采取了正确的步骤来为我的网格添加折痕支持。创建MDLSubmeshTopology对于新拓扑对象,将MDLMeshBuffers分配给edgeCreaseIndices、edgeCreases并将Int分配给edgeCreaseCount属性。使用拓扑对象创建MDLSubmesh。我不是在寻找具体的解决方案,只是关于如何为网格添加折痕支持的一般想法。任何有这方面经验的人都会很棒。 最佳答案

swift - Metal/Metal 2 + swift : How to pass complex Swift structure as shader argument?

我在Metal中有一个结构:structBlurDesc{shortfenceRows;shortoffs;shortsampleCnt;floatmuls[64];};它用作着色器参数:kernelvoidhBlurCompute(constantBlurDesc&blurDesc[[buffer(0)]],texture2dsrcTexture[[texture(0)]],texture2dhBlurTexture[[texture(1)]],ushortgid[[thread_position_in_grid]]){这是相应的Swift结构:structBlurDesc{varf

ios - 相当于 OpenGL 混合的 Metal

我试图了解什么是Metal中的mixOpenGL函数。这是我要转换的OpenGL代码:floatudRoundBox(vec2p,vec2b,floatr){returnlength(max(abs(p)-b+r,0.0))-r;}voidmainImage(outvec4fragColor,invec2fragCoord){//setupfloatt=0.2+0.2*sin(mod(iTime,2.0*PI)-0.5*PI);floatiRadius=min(iResolution.x,iResolution.y)*(0.05+t);vec2halfRes=0.5*iResoluti

ios - Xcode 7.3 : Can't import MetalKit

我正在尝试使用MetalKit做一些工作。我创建了一个基于游戏模板的全新项目,并选择了Metal作为游戏技术。但是,出于某种原因,Xcode7.3不会将MetalKit识别为有效模块。在GameViewController的顶部:importUIKitimportMetalimportMetalKitMetalKit的导入语句被标记为错误Nosuchmodule'MetalKit'我已经检查过并且MetalKit.framework肯定与Metal和所有其他的一起存在于frameworks文件夹中。如果我将项目基于Objective-C,这也会失败。 最佳答

swift - 我可以在一个 MTLRenderCommandEncoder 中使用多个 MTLRenderPipelineStates 吗?

我目前正在为游戏制作简单的UI,并且要绘制每个按钮,我需要使用2个管道状态(每个状态都使用相同的顶点着色器)。一种是用静态颜色片段着色器绘制边框的线条,另一种是用波纹渐变绘制按钮内部。我想知道我是否需要两个不同的渲染命令编码器,每个管道一个,或者我是否可以执行以下操作:letencoder=command.makeRenderCommandEncoder(descriptor:renderPassDesc)encoder.setRenderPipelineState(stateWithStaticFragmentShader)//encodesomebuffersanddrawline

swift - 使用 CVMetalTextureCacheCreateTextureFromImage 在 Swift 中将 CMSampleBuffer 转换为 CVMetalTexture

我正在尝试建立一个简单的渲染相机输出到Metal层管道,它在Objective-C中工作得很好(有MetalVideoCapture示例应用程序)但是当我试着把它翻译成swift。我的超简单捕获缓冲区看起来像这样(忽略缺乏清理...)funccaptureOutput(captureOutput:AVCaptureOutput!,didOutputSampleBuffersampleBuffer:CMSampleBuffer!,fromConnectionconnection:AVCaptureConnection!){varerror:CVReturn!=nilletsourceIm

ios - 类型 'MTLBuffer' 的值没有成员 'didModifyRange'

我很困惑,因为我在Swift4中创建了一个MTLBuffer,但我无法使用didModifyRange方法。有趣的是,我仍然可以在Apple文档中找到它,并且还没有听说过它被更改了。为什么会发生错误Valueoftype'MTLBuffer'hasnomember'didModifyRange'?以下代码将在最新版本的XCode中产生此错误letdevice=MTLCreateSystemDefaultDevice()varbuffer=device?.makeBuffer(length:3,options:[])letrange=Range(NSRange())buffer.didM

swift - 使用 SCNGeometryPrimitiveType 多边形崩溃/错误创建自定义 SCNGeometry 多边形平面

我正在尝试创建一个具有自定义形状的平面形式的自定义SCNGeometry,它可以放置在ARKitsession中。我在以下方法中使用选项SCNGeometryPrimitiveTypePolygon似乎工作正常:extensionSCNGeometry{staticfuncpolygonPlane(vertices:[SCNVector3])->SCNGeometry{varindices:[Int32]=[Int32(vertices.count)]varindex:Int32=0for_invertices{indices.append(index)index+=1}letvert

swift - 如何在 MTKView 中使用多重采样?

我正在尝试使用MTKView进行多重采样。我有一个带有委托(delegate)的MTKView。我将View的sampleCount属性设置为4。我创建了一个将rasterSampleCount设置为4的管道状态描述符,并使用它来制作我在渲染时使用的渲染管道状态.在委托(delegate)的draw(in:)方法中,我通过获取View的当前渲染过程描述符并将storeAction设置为multisampleResolve创建渲染过程描述符。我还设置了试过的storeAndMultisampleResolve无济于事。我已经为渲染过程描述符创建了一个解析纹理,它与View具有相同的宽度和