首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SceneKit中镜像SCNGeometry

在SceneKit中镜像SCNGeometry
EN

Stack Overflow用户
提问于 2014-06-14 14:51:20
回答 3查看 1.5K关注 0票数 1

我正在使用苹果的SceneKit库制作一款简单的赛车游戏。我已经对赛道的左转部分进行了建模。我能够成功地将模型加载到SCNGeometry中,然后我就可以呈现它。但是,我希望能够将此模型用于左转弯和右转弯。要做到这一点,我需要将SCNGeometry镜像到y-z平面上,尽管我终生无法弄清楚如何做到这一点。

在SpriteKit中,可以通过将对应的SKNode的比例设置为-1来镜像精灵。但是,如果我将SCNGeometry的SCNNode的x比例设置为-1,SCNGeometry将根本不会呈现。虽然我可以在我的建模软件中镜像模型,但我不希望有两个基本相同的模型。如有任何建议,我们将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2014-06-15 00:54:22

好吧,事实证明,将SCNNode的x比例设置为-1确实反映了SCNGeometry.The的问题,即当以这种方式镜像SCNGeometry时,所有的面都指向内部,而不是向外,因此没有任何面被渲染。如果更改对象的材质,以便消隐正面而不是背面,则SCNGeometry将按预期进行镜像。

票数 2
EN

Stack Overflow用户

发布于 2016-09-03 03:03:10

如果您不想更改几何体,但只想更改纹理,则可以执行以下操作:

代码语言:javascript
复制
let flip = SCNMatrix4Translate(
        SCNMatrix4Scale(material.diffuse.contentsTransform, 1.0, -1.0, 1.0),
        0, 1, 0
    )
material.diffuse.contentsTransform = flip

或者直接,

代码语言:javascript
复制
material.diffuse.contentsTransform = SCNMatrix4FromGLKMatrix4(GLKMatrix4(m: (
  -1.0, 0.0, 0.0, 0.0,
  0.0, 1.0, 0.0, 0.0,
  0.0, 0.0, 1.0, 0.0,
  -1.0, 0.0, 0.0, 1.0
)))

这将使用1-x替换纹理x坐标,从而将其翻转。我使用过着色器,我相信显示SceneKit如何使用内容转换的相关着色器代码是

代码语言:javascript
复制
v_texcoord0 = (u_diffuseTextureMatrix * vec4(_geometry.texcoords[0], 0., 1.)).xy;

(see here)

票数 1
EN

Stack Overflow用户

发布于 2016-01-25 21:54:44

当您将几何体缩放到任何"-“负数时,它会翻转法线面。法线面默认值为“单面”将"Material“属性设置为"Double sided”

使用swift,它可能看起来像这样

代码语言:javascript
复制
yourNode.geometry?.firstMaterial?.doubleSided = true
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24217412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档