我想用手指在iOS设备上绘制cocos3d中的纹理。触摸3D场景后,我有世界坐标,现在我想绘制纹理像素。
答案 0 :(得分:0)
您应该可以按照以下方式执行此操作:
触摸CC3MeshNode
后,在nodeSelected:byTouchEvent:at:
的实施中,您可以从触摸点创建光线:
CC3Ray touchRay = [self.activeCamera unprojectPoint: touchPoint];
然后,将光线转换为网格节点的本地坐标:
CC3Ray localRay = [aNode.globalTransformMatrixInverted transformRay: touchRay];
然后,您可以使用节点的findFirst:intersections:ofLocalRay:acceptBackFaces:acceptBehindRay:
方法准确找到光线与网格相交的位置。或者,如果您不需要本地坐标中的交叉点位置,则可以使用findFirst:globalIntersections:ofGlobalRay:acceptBackFaces:acceptBehindRay:
方法,并跳过上面的步骤,将光线转换为本地坐标(上面的行使用transformRay :)。
无论哪种方式,返回的CC3MeshIntersection
结构都提供了大量关于网格交叉的信息,包括相交的网格面的索引,以及交叉点面内的位置。
使用面部索引,您可以使用网格节点的faceIndicesAt:
方法检索构成面部的3个顶点中每个顶点的索引。
如果你有你感兴趣的顶点的索引,你可以使用vertexTexCoord2FAt:
来检索纹理坐标,如果需要,可以使用setVertexTexCoord2F:at:
来修改它们。
或者,您可以添加颜色顶点属性(即每个顶点的颜色属性,以及纹理坐标,法线和位置),然后使用setVertexColor4F:at:
方法为颜色分配颜色用手指“画”的顶点。这样,相同的纹理将显示出来,但会在触摸的顶点上着色为不同的颜色。