菜鸟教程小白 发表于 2022-12-12 17:30:07

ios - Scenekit 中自定义几何体的纹理坐标


                                            <p><p>我正在尝试对我在 iOS9 上的 scenekit 中创建的自定义平面形状进行纹理处理。我需要纹理在整个表面上展开和拉伸(stretch)。我在 SCNprogram 上有一个顶点和片段着色器。但似乎我做错了什么并且整天摆弄这个,我得出的结论是我指定的纹理坐标不正确。</p>

<p>我的问题是,在创建几何图形时,SceneKit 会自动创建纹理坐标,所以当我为纹理的一个角指定 CGpoint(0,0) 时,它会自动将其映射到几何图形的左下角吗?还是我必须为我创建的几何图形手动指定纹理坐标/uv?</p>

<p>此问题是此处发布的更大问题的一部分:<a href="https://stackoverflow.com/questions/34104369/custom-shader-scnprogram-ios-9-scenekit/34105050#34105050" rel="noreferrer noopener nofollow">Custom Shader SCNProgram iOS 9 Scenekit</a> </p>

<p>请帮忙,我花了一整天的时间修修补补,但没有成功:(</p>

<p>编辑:根据下面的 Locks 响应,我更改了片段着色器以帮助我对其进行故障排除。它给我的东西我相信是有道理的?见下图。我的紫外线似乎确实有问题。但为什么?看不懂。</p>

<p> <a href="/image/KEbit.png" rel="noreferrer noopener nofollow"><img src="/image/KEbit.png" alt="enter image description here"/></a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>是的,在创建自定义几何体时,您还需要为每个顶点创建 UV 坐标。这对您创建自定义几何图形所做的工作并不算多,只需将以下位放入即可。</p>

<pre><code>var uvList: = []

//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: ,
    elements: )
</code></pre>

<p>然后检查你的纹理坐标是否正确,我会改变你的片段着色器来显示它们。类似于以下内容(自从我编写 OpenGL 着色器以来已经有一段时间了)。</p>

<pre><code>void main() {
    gl_FragColor = vec4(texCoord.x, texCoord.y, 0, 1);
}
</code></pre>

<p>然后,对象的红色和绿色阴影应该会告诉您模型上的纹理坐标是什么。如果检查正常,则切换回从纹理读取数据。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Scenekit 中自定义几何体的纹理坐标,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34110837/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34110837/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Scenekit 中自定义几何体的纹理坐标