如何在Swift 2.1中通过滑动/点击为动态3D对象着色

洛伦佐·安德拉格蒂(Lorenzo Andraghetti)

我必须构建一个Swift应用程序,该应用程序可以使用各种手势为3D对象着色。我有一个Collada文件,我已将其导入为SceneKit对象。我找不到用水龙头上色的方法。我试图从WWDC示例中转换Obj-C,但对我来说不起作用。

我试图将SpriteKit作为纹理应用于3D对象,但这就是结果:

当用户点击屏幕时,应用程序应获取3D对象纹理的坐标,然后在该点添加一个SpriteKit节点。

前:

前

后:

运行后对象

我不知道为什么纹理会以这种方式爆炸。

谢谢!

rick

The SpriteKit scene coordinate system doesn't map to texture coordinates in the same way an image does. Pixel coordinates in an image have the y-axis increasing downward; in a SpriteKit scene, the y-axis goes up.

This is a lot more apparent if you just map that SpriteKit scene onto an SCNPlane that's the only thing in a SceneKit scene — you'll see that the image is flipped.

Left: Image as loaded from bundle, Right: Image filling an SKScene mapped to a plane (with annotations)

基本图片 SCNMaterial上的SKScene中的图像

To fix this, you'll need a two-step coordinate transformation:

  1. Translate the origin y-coordinate up by the height of the SKScene
  2. Scale y-coordinates by -1 so that increasing coordinates go down, not up

坐标变换

您可以内做这一点SKScene,或者在SCNMaterialProperty该SpriteKit内容到SceneKit对象纹理映射。我赞成这种SCNMaterialProperty方法-为其contentsTransform属性设置适当的矩阵

let translate = SCNMatrix4MakeTranslation(0, 1, 0)
let yFlippedTranslate = SCNMatrix4Scale(translate, 1, -1, 1)
material.diffuse.contentsTransform = yFlippedTranslate

请注意,如果您还尝试使用材质的纹理坐标(通过SCNHitTestResult)将触摸/单击事件映射到SpriteKit场景中,则需要在此处执行类似的转换:

let texcoord = result.textureCoordinatesWithMappingChannel(0)
sprite.position.x = texcoord.x * skScene.size.width
sprite.position.y = (1 - texcoord.y) * skScene.size.height

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift:如何在Swift中声明2D数组(网格或矩阵)以允许随机插入

来自分类Dev

如何在Swift 2 [MapKit]中从地图中删除注释

来自分类Dev

如何在Swift 2中播放声音文件

来自分类Dev

如何在Swift中过滤2D数组?

来自分类Dev

如何在Swift 2中模糊场景

来自分类Dev

如何在iOS Swift 2中为uisearchbar过滤大型数组

来自分类Dev

如何在Swift 2和3中使用通用加密和/或计算sha256

来自分类Dev

如何在Swift 2的TableView中显示特定图像

来自分类Dev

如何在3D散点图中(在R中)将2D图像投影为表面?

来自分类Dev

如何在Swift 2中获得SKSpriteNode的真实中心?

来自分类Dev

如何在Swift 2中存储函数引用?

来自分类Dev

如何在matplotlib中的3D散点图上为数据点着色

来自分类Dev

如何在Swift中的multipartFormData中添加超过2个文件参数

来自分类Dev

如何在Groovy中将2d数组动态转换为3d数组

来自分类Dev

如何在Swift中迭代Zip2产生的值

来自分类Dev

如何在Swift 2中解析JSON?

来自分类Dev

如何在Swift 2中检测所有触摸

来自分类Dev

Swift:如何在1个tableView中具有2个不同的单元格

来自分类Dev

如何在Swift 2中从核心数据中删除值

来自分类Dev

如何在Swift 2中为随机颜色设置计时器?

来自分类Dev

如何在Python中为3D球体的各个部分着色

来自分类Dev

如何在swift2中从json读取数据

来自分类Dev

如何在Sprite Kit Swift 2中添加iAd?

来自分类Dev

如何在3D散点图中(在R中)将2D图像投影为表面?

来自分类Dev

如何在Swift 2中获得SKSpriteNode的真实中心?

来自分类Dev

如何在Swift 2中舍入小数位

来自分类Dev

如何在matplotlib中的3D散点图上为数据点着色

来自分类Dev

iOS Swift如何在View 1到View 2上获取SearchBar Text值

来自分类Dev

如何在swift3中写(i = 2; i <= num / 2; i ++){}

Related 相关文章

  1. 1

    Swift:如何在Swift中声明2D数组(网格或矩阵)以允许随机插入

  2. 2

    如何在Swift 2 [MapKit]中从地图中删除注释

  3. 3

    如何在Swift 2中播放声音文件

  4. 4

    如何在Swift中过滤2D数组?

  5. 5

    如何在Swift 2中模糊场景

  6. 6

    如何在iOS Swift 2中为uisearchbar过滤大型数组

  7. 7

    如何在Swift 2和3中使用通用加密和/或计算sha256

  8. 8

    如何在Swift 2的TableView中显示特定图像

  9. 9

    如何在3D散点图中(在R中)将2D图像投影为表面?

  10. 10

    如何在Swift 2中获得SKSpriteNode的真实中心?

  11. 11

    如何在Swift 2中存储函数引用?

  12. 12

    如何在matplotlib中的3D散点图上为数据点着色

  13. 13

    如何在Swift中的multipartFormData中添加超过2个文件参数

  14. 14

    如何在Groovy中将2d数组动态转换为3d数组

  15. 15

    如何在Swift中迭代Zip2产生的值

  16. 16

    如何在Swift 2中解析JSON?

  17. 17

    如何在Swift 2中检测所有触摸

  18. 18

    Swift:如何在1个tableView中具有2个不同的单元格

  19. 19

    如何在Swift 2中从核心数据中删除值

  20. 20

    如何在Swift 2中为随机颜色设置计时器?

  21. 21

    如何在Python中为3D球体的各个部分着色

  22. 22

    如何在swift2中从json读取数据

  23. 23

    如何在Sprite Kit Swift 2中添加iAd?

  24. 24

    如何在3D散点图中(在R中)将2D图像投影为表面?

  25. 25

    如何在Swift 2中获得SKSpriteNode的真实中心?

  26. 26

    如何在Swift 2中舍入小数位

  27. 27

    如何在matplotlib中的3D散点图上为数据点着色

  28. 28

    iOS Swift如何在View 1到View 2上获取SearchBar Text值

  29. 29

    如何在swift3中写(i = 2; i <= num / 2; i ++){}

热门标签

归档