javascript - 如何将纹理像素应用于点云?
问题描述
我正在尝试将纹理上图像的像素移动到一组顶点上,这样我就可以在 WebGL 中将它们用作点云。
一种方法是将纹理渲染到帧缓冲区,然后用于gl.readPixels()
移动到 JavaScript 数组,然后使用gl.bufferData()
.
将数据视为顶点,可以gl.drawArrays()
使用gl.POINTS
图元渲染点云。
但这需要数据从 GPU 移动到 CPU 再返回,这可能会变得昂贵,尤其是对于视频而言。
有没有办法在不离开 GPU 的情况下将数据直接从纹理移动到顶点列表?
非常感谢任何参考、建议或代码示例!
解决方案
感谢 Blindman67 指出您可以在顶点着色器中访问纹理,我不知道这一点。您可以简单地使用 texture2D(),工作示例是https://www.khronos.org/registry/webgl/conformance-suites/2.0.0/conformance/rendering/vertex-texture-fetch.html用于 WebGL,以及http: //webglsamples.org/WebGL2Samples/#texture_vertex用于 WebGL2。一个很好的搜索词是“WebGL 顶点纹理提取”。不要浪费时间(就像我所做的那样)关注旧链接,并尝试让诸如 texture2DLodEXT() 之类的调用正常工作。
推荐阅读
- python - 向包含标签 Django 发送消息
- python - Python 更新 YAML 而不更改格式
- amazon-web-services - 某些客户端无法访问最快的 cloudpoint 服务器
- java - Spring Security - 更改 LoginUrlAuthenticationEntryPoint 重定向策略
- python - 找不到python安装
- reactjs - 组件在父逻辑完成之前渲染 props.children
- react-native - (在 '(0,r(d[9]).useState)(null)' 中,'(0,r(d[9]).useState)' 未定义)React Native
- pandas - 带有 isin 的 Pandas groupby 连续组
- angular - Angular - 错误 TS1146:Material Stepper 中预期的声明
- ssl - HiveMQ-Cloud 获取 MQTT 的 ssl 指纹/证书