我正在使用苹果的SceneKit库制作一款简单的赛车游戏。我已经对赛道的左转部分进行了建模。我能够成功地将模型加载到SCNGeometry中,然后我就可以呈现它。但是,我希望能够将此模型用于左转弯和右转弯。要做到这一点,我需要将SCNGeometry镜像到y-z平面上,尽管我终生无法弄清楚如何做到这一点。
在SpriteKit中,可以通过将对应的SKNode的比例设置为-1来镜像精灵。但是,如果我将SCNGeometry的SCNNode的x比例设置为-1,SCNGeometry将根本不会呈现。虽然我可以在我的建模软件中镜像模型,但我不希望有两个基本相同的模型。如有任何建议,我们将不胜感激。
发布于 2014-06-15 00:54:22
好吧,事实证明,将SCNNode的x比例设置为-1确实反映了SCNGeometry.The的问题,即当以这种方式镜像SCNGeometry时,所有的面都指向内部,而不是向外,因此没有任何面被渲染。如果更改对象的材质,以便消隐正面而不是背面,则SCNGeometry将按预期进行镜像。
发布于 2016-09-03 03:03:10
如果您不想更改几何体,但只想更改纹理,则可以执行以下操作:
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
)))这将使用1-x替换纹理x坐标,从而将其翻转。我使用过着色器,我相信显示SceneKit如何使用内容转换的相关着色器代码是
v_texcoord0 = (u_diffuseTextureMatrix * vec4(_geometry.texcoords[0], 0., 1.)).xy;(see here)
发布于 2016-01-25 21:54:44
当您将几何体缩放到任何"-“负数时,它会翻转法线面。法线面默认值为“单面”将"Material“属性设置为"Double sided”
使用swift,它可能看起来像这样
yourNode.geometry?.firstMaterial?.doubleSided = truehttps://stackoverflow.com/questions/24217412
复制相似问题