在cocos3d中绘制纹理上的简单线条

时间:2013-12-08 21:12:20

标签: ios opengl-es paint cocos3d

我想用手指在iOS设备上绘制cocos3d中的纹理。触摸3D场景后,我有世界坐标,现在我想绘制纹理像素。

1 个答案:

答案 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:方法为颜色分配颜色用手指“画”的顶点。这样,相同的纹理将显示出来,但会在触摸的顶点上着色为不同的颜色。