我正在使用Apple的SceneKit库制作简单的赛车游戏。我已经模拟了赛道的左转弯部分。我能够成功地将模型加载到我可以渲染的SCNGeometry中。但是,我希望能够将此模型用于左右转弯段。要做到这一点,我需要在y-z平面上镜像SCNGeometry,虽然我不能为我的生活弄清楚如何。
在SpriteKit中,可以通过将相应的SKNode的比例设置为-1来镜像精灵。但是,如果我将SCNGeometry的SCNNode的x标度设置为-1,则SCNGeometry根本不会渲染。虽然我可以在我的建模软件中镜像模型,但我宁愿不要有两个基本相同的模型。任何建议将不胜感激。
答案 0 :(得分:2)
好吧,事实上,将SCNNode< sx比例设置为-1确实反映了SCNGeometry。问题是,当SCNGeometry以这种方式镜像时,所有的面都指向内而不是向外,所以没有渲染。如果更改了对象的材质,以便剔除正面而不是背面,则SCNGeometry将按预期进行镜像。
答案 1 :(得分: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;
(see here)
答案 2 :(得分:0)
将几何体缩放到任何" - "否定它翻转法线面。普通人脸的默认值是"单面" 设置"材料"属于"双面"
使用swift它可能看起来像这样
yourNode.geometry?.firstMaterial?.doubleSided = true