我正在尝试对我在 iOS9 上的 scenekit 中创建的自定义平面形状进行纹理处理。我需要纹理在整个表面上展开和拉伸(stretch)。我在 SCNprogram 上有一个顶点和片段着色器。但似乎我做错了什么并且整天摆弄这个,我得出的结论是我指定的纹理坐标不正确。
我的问题是,在创建几何图形时,SceneKit 会自动创建纹理坐标,所以当我为纹理的一个角指定 CGpoint(0,0) 时,它会自动将其映射到几何图形的左下角吗?还是我必须为我创建的几何图形手动指定纹理坐标/uv?
此问题是此处发布的更大问题的一部分:Custom Shader SCNProgram iOS 9 Scenekit
请帮忙,我花了一整天的时间修修补补,但没有成功
编辑:根据下面的 Locks 响应,我更改了片段着色器以帮助我对其进行故障排除。它给我的东西我相信是有道理的?见下图。我的紫外线似乎确实有问题。但为什么?看不懂。
是的,在创建自定义几何体时,您还需要为每个顶点创建 UV 坐标。这对您创建自定义几何图形所做的工作并不算多,只需将以下位放入即可。
var uvList:[vector_float2] = []
//fill UV list with texture coords
let uvData = NSData(bytes: uvList, length: uvList.count * sizeof(vector_float2))
let uvSource = SCNGeometrySource(data: uvData,
semantic: SCNGeometrySourceSemanticTexcoord,
vectorCount: uvList.count,
floatComponents: true,
componentsPerVector: 2,
bytesPerComponent: sizeof(Float),
dataOffset: 0,
dataStride: sizeof(vector_float2))
let geo = SCNGeometry(
sources: [vertexSource, normalSource, colourSource, uvSource],
elements: [indexElement])
然后检查你的纹理坐标是否正确,我会改变你的片段着色器来显示它们。类似于以下内容(自从我编写 OpenGL 着色器以来已经有一段时间了)。
void main() {
gl_FragColor = vec4(texCoord.x, texCoord.y, 0, 1);
}
然后,对象的红色和绿色阴影应该会告诉您模型上的纹理坐标是什么。如果检查正常,则切换回从纹理读取数据。
关于ios - Scenekit 中自定义几何体的纹理坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34110837/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |