Tag: 3d

如何通过SceneKit和模型I / O在.OBJ 3D模型上应用.MTL文件

我试图通过SceneKit和模型I / 0在.obj 3d模型上应用.mtl文件纹理。 当我尝试在其上应用纹理的.jpg时,下面的代码正常工作: let url = NSBundle.mainBundle().URLForResource("chair", withExtension: "obj") let asset = MDLAsset(URL: NSURL(string:url)!) guard let object = asset.objectAtIndex(0) as? MDLMesh else { //fatalError("Failed to get mesh from asset.") return } if shouldApplyTexture == true { var textureFileName = "chair.mtl" // Create a material from the various textures let scatteringFunction = MDLScatteringFunction() let […]

初学者指导在iPhone SDK中进行3D编程

我正在考虑开始一个项目来制作一个游戏,也许只是一个简单的游戏,但对于iPhone而言仍然是3D游戏。 虽然我还有很长的路要走,学习Objective-C等等,但是在思考3D游戏世界的时候,一个问题突然出现在我的脑海里。 在为iPhone做游戏之前,我会先学习OpenGL(PC / Mac)吗? 如果是的话,那么好的指南/教程在哪里呢? 而且,它是否存在免费/开源的iPhone的任何良好的OpenGL引擎?

在iOS上加载obj文件的最佳方式

由于OpenGL没有像GLLoadObjFile('myModel.obj')这样的函数,因此在iOS应用程序中加载像.obj这样的3D模型文件的最佳教程是什么? 我已经尝试了波前加载器,但似乎并没有工作。

圆球上的两个点之间的圆柱方向,Scenekit,四元数IOS

我一直在使用SceneKit在球体的外边缘上的两点之间画一个圆柱体。 我已经使用原始几何和使用SCNRendering Delegate的openGL在这两点之间产生了一条界线,但是现在我需要在这两个点之间产生一个圆柱(好吧,不只是两个,而是任意两个坐在球表面上的3Dvector)。 我已经为此工作了大约3天了,而且我已经完成了四元数的实现,但是现在我无法实现。 学术文章,科学研究,什么也没有,没有什么工作是在两个固定点之间重新排列一个圆柱体。 我需要一个algorithm来做到这一点。 无论如何,这是我最近的代码不起作用,但是这只是我已经完成的近2千行代码的一小段代码,没有预期的结果。 我知道我可以移动到更高级的东西,比如构build我自己的SCNProgram和/或SCNRenderer,然后访问GLSL,OpenGL和Metal复杂性,但是这似乎是应该可以使用Scenekit和GLKit向量结构之间的转换和从SCNVector结构,但到目前为止,这是不可能的: 码: 以下代码获取经度和纬度坐标并将其投影到3D球体的表面上。 这些坐标是通过一个专有函数返回的,我在这里构build了一个在我的3D球体上精确显示的{x,y,z}坐标的SCNVector3。 我在两组经度和纬度坐标之间绘制一条线,用原始线绘制线条穿过球体的中心。 所以,正如我上面提到的,我想要这个function,但是用圆柱体,而不是线(顺便提一下,这里列出的经度和纬度坐标是假的,它们是随机生成的,但都落在地球表面上)。 drawLine = [self lat1:37.76830 lon1:-30.40096 height1:tall lat2:3.97620 lon2:63.73095 height2:tall]; float cylHeight = GLKVector3Distance(SCNVector3ToGLKVector3(cooridnateSetOne.position), SCNVector3ToGLKVector3(coordinateSetTwo.position)); SCNCylinder * cylTest = [SCNCylinder cylinderWithRadius:0.2 height:cylHeight]; SCNNode * test = [SCNNode nodeWithGeometry:cylTest]; SCNMaterial *material = [SCNMaterial material]; [[material diffuse] setContents:[SKColor whiteColor]]; material.diffuse.intensity = 60; material.emission.contents = [SKColor […]

opengles在iphone中显示人脸

我需要做一个人脸2D面对3D面孔。 我用这个链接加载一个“.obj”文件并映射纹理。 这个例子只适用于立方体和金字塔。 我加载了一个人脸“.obj”文件。 这加载.obj文件,并可以正确获取人脸,如下所示。 但我的问题是我需要显示不同的人脸而不改变“.obj”文件。 只是通过纹理映射。 但是由于obj文件是不同的模型,纹理没有得到正确的映射。 我只是尝试更改用作纹理的“.png”文件,下面是纹理映射的结果,但不是我所期望的,如下所示。 以下是我的几个问题: 1)我需要加载不同的图像相同的模型(具有相同的.obj文件)的纹理。 在opengles中可能吗? 2)如果上述问题的解决scheme是“形状匹配”,那么我怎么用opengles呢? 3)最后一个基本问题,我需要大面积的显示图像,如何使显示区域更大?

SceneKit – 绘制3D抛物线

我得到三分,需要画一个平滑的三维抛物线。 麻烦的是,曲线是波涛汹涌,并有一些奇怪的麻烦在里面 这是我的代码… func drawJump(jump: Jump){ let halfDistance = jump.distance.floatValue/2 as Float let tup = CalcParabolaValues(0.0, y1: 0.0, x2: halfDistance, y2: jump.height.floatValue, x3: jump.distance.floatValue, y3: 0) println("tuple \tup") var currentX = 0 as Float var increment = jump.distance.floatValue / Float(50) while currentX < jump.distance.floatValue – increment { let x1 = Float(currentX) let x2 = Float((currentX+increment)) […]

如何将Wavefront OBJ文件转换为具有模型I / O的SCNNode

我已经从URL导入了一个Wavefront OBJ文件,现在我想将其插入我的iOS 9应用程序(在Swift中)的场景(SceneKit)中。 我到目前为止所做的是: let asset = MDLAsset(URL: localFileUrl) print("count = \(asset.count)") // 1 任何帮助转换这个SCNNode将不胜感激。 根据苹果的文档: 模型I / O可以与MetalKit,GLKit和SceneKit框架共享数据缓冲区,以帮助您有效地加载,处理和渲染3D资源。 但我不知道如何从MDLAsset缓冲区到SCNNode。

我如何对这个OpenGL ES纹理应用正确的视angular?

我想描述我的目标,并得到一些build议解决scheme的反馈。 我对OpenGL ES(或者OpenGL ES)相当陌生,所以请温和。 我也想提一下,这个平台是iPad(iOS),它是属于它的限制。 目标:让用户以正确的视angular(或至less可调整的透视图)正确地绘制纹理的顶点。 为了解释我的意思,请考虑下面的例子。 比方说,我们有一个在它前面有一个相应的草坪的房子的照片。 现在,我想铺平(用户)指定的path与瓷砖(纹理),使透视看起来是正确的。 如果视图恰好是正交的,那么这些图块将是完全正方形的,这在图像中具有某种深度时是不现实的。 现在,一种方法是在OpenGL ES上设置一个截然不同的视angular。 然后把一架飞机(如下图),并把它的图像纹理为初学者。 现在,如你所期望的,从上面的图像看,图像将被扭曲。 但是,这很好,因为如果我们将飞机向后倾斜(以便完美地适应显示器的边界),图像将呈现方形。 如果用户现在定义了要铺设的区域,我们可以将这些点放在与倾斜平面相同的angular度,然后在其中放置一个带有正方形瓷砖的纹理,并以透视的方式出现。 如果我们的倾斜angular度不正确,用户可以手动调整,那么上图中的平面的angular度angular度将会被调整,并且平面会以不同的方式倾斜以适合显示器。 然后瓷砖纹理将从不同的angular度出现。 这是一个可行的方法,还是有其他更好的方法来做到这一点? 我认为这是一个丑陋的黑客,可能与我有限的3D编程技能有关。

返回CATransform3D以将四边形映射到四边形

我试图派生一个CATransform3D,它将一个带有4个angular点的四边形映射到另外一个带有4个新angular点的四边形。 我花了一点时间研究这个问题,看起来步骤包括将原来的Quad转换为Square,然后将Square转换为新的Quad。 我的方法是这样的(从这里借用的代码): – (CATransform3D)quadFromSquare_x0:(float)x0 y0:(float)y0 x1:(float)x1 y1:(float)y1 x2:(float)x2 y2:(float)y2 x3:(float)x3 y3:(float)y3 { float dx1 = x1 – x2, dy1 = y1 – y2; float dx2 = x3 – x2, dy2 = y3 – y2; float sx = x0 – x1 + x2 – x3; float sy = y0 – y1 + y2 – y3; […]

如何将Blender混合(或obj)文件转换为Qualcom Vuforia .h文件

我正在使用Qualcomm Vuforia开发具有增强现实function的iOS应用程序,并且我很难理解如何从Blender(或其他软件)创build3D模型。 所有的例子都使用带有顶点坐标的.h文件,即一个茶壶。 我无法find对我有用的文档。 有没有工具将.blend或.obj文件转换为.h(OpenGL ES)? 谢谢