1

我正在使用 Apple 的 SceneKit 库制作一个简单的赛车游戏。我已经模拟了赛道的左转部分。我能够成功地将模型加载到我可以渲染的 SCNGeometry 中。但是,我希望能够将此模型用于左转和右转段。为此,我需要在 yz 平面上镜像 SCNGeometry,尽管我一生都无法弄清楚如何。

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

4

3 回答 3

2

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

于 2014-06-14T16:54:22.363 回答
1

如果您不想更改几何形状,而只是更改纹理,则可以执行以下操作:

let flip = SCNMatrix4Translate(
        SCNMatrix4Scale(material.diffuse.contentsTransform, 1.0, -1.0, 1.0),
        0, 1, 0
    )
material.diffuse.contentsTransform = flip

或直接,

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
)))

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

v_texcoord0 = (u_diffuseTextureMatrix * vec4(_geometry.texcoords[0], 0., 1.)).xy;

见这里

于 2016-09-02T19:03:09.953 回答
0

当您将几何体缩放到任何“-”负值时,它会翻转法线面。法线面的默认值为“单面” 将“材料”属性设置为“双面”

迅速它可能看起来像这样

yourNode.geometry?.firstMaterial?.doubleSided = true
于 2016-01-25T13:54:43.527 回答