Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >THREE.js:从THREE.WebGLRenderTarget获取数据

THREE.js:从THREE.WebGLRenderTarget获取数据
EN

Stack Overflow用户
提问于 2012-11-20 14:21:23
回答 3查看 2.8K关注 0票数 4

图像可以用作材质中的贴图,并且具有名为“THREE.Texture”的属性。图像可以用作材质中的贴图,但没有名为“THREE.WebGLRenderTarget”的属性。

如何从WebGLRenderTarget中检索纹理数据?我想将它保存到一个文件中(或者,如果不可能,则保存为一个字节数组)。

EN

回答 3

Stack Overflow用户

发布于 2016-07-30 03:22:00

现在有了新的功能:

代码语言:javascript
运行
AI代码解释
复制
WebGLRenderer.readRenderTargetPixels ( renderTarget, x, y, width, height, buffer )

将像素数据从renderTarget读取到传入的缓冲区中。Buffer应该是使用新的Uint8Array( renderTargetWidth * renderTargetWidth *4)实例化的Javascript Uint8Array,以说明大小和颜色信息。这是gl.readPixels的包装器。

票数 3
EN

Stack Overflow用户

发布于 2012-11-20 15:13:14

我自己还没有尝试过,但是应该可以使用传递呈现目标的(私有) __webglTexture属性的WebGL的readPixels函数来获得一个字节数组。

票数 2
EN

Stack Overflow用户

发布于 2021-07-22 13:51:39

将THREE.WebGLRenderTarget转换为2D canvas的代码片段:

代码语言:javascript
运行
AI代码解释
复制
// allocate RGBA array

let pixels = new Uint8Array(_floor_width * _floor_height * 4);

let can = document.createElement("canvas"), ctx, ctxData, color;

// _floor_target is instance of THREE.WebGLRenderTarget of dimension _floor_width x _floor_height and _renderer is THREE.WebGLRenderer

_renderer.readRenderTargetPixels(_floor_target, 0, 0, _floor_width, _floor_height, pixels);

can.width = _floor_width;
can.height = _floor_height;

ctx = can.getContext('2d');
ctxData = ctx.getImageData(0, 0, can.width, can.height);

for (var fy = 0; fy < _floor_height; fy++) {
    for (var fx = 0; fx < _floor_width; fx++) {

        // retrieve exact rendered pixel

        color = [
            pixels[fy * _floor_width * 4 + fx * 4 + 0],
            pixels[fy * _floor_width * 4 + fx * 4 + 1],
            pixels[fy * _floor_width * 4 + fx * 4 + 2],
            pixels[fy * _floor_width * 4 + fx * 4 + 3]
        ];

        // put pixel to canvas image data (this whole thing might be done much faster)

        ctxData.data[(fy * can.width * 4) + (fx * 4) + 0] = color[0];
        ctxData.data[(fy * can.width * 4) + (fx * 4) + 1] = color[1];
        ctxData.data[(fy * can.width * 4) + (fx * 4) + 2] = color[2];
        ctxData.data[(fy * can.width * 4) + (fx * 4) + 3] = color[3];
        
    }
}

// update canvas image data

ctx.putImageData(ctxData, 0, 0);

document.body.appendChild(can);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13475209

复制
相关文章
three.js中帧缓存的使用
在网上查阅了一下three.js关于帧缓存的使用,感觉很多都是关于three.js中后处理通道的使用的。后处理通道确实使用FBO实现的,但其实我就是想获取某个时刻的渲染结果作为纹理,没必要在动态渲染中进行后处理。真正实现这个功能的是WebGLRenderTarget这个类,这是一个渲染目标的缓冲区,可以装载到WebGLRenderer中进行渲染,再从WebGLRenderTarget获取纹理对象。
charlee44
2020/06/22
4.4K0
Power BI 从 Dataverse 获取数据
数据连接器:通过各式各样的链接器,链接来自不同数据源的各式数据。这是打通与第三方世界数据的壁垒。
陈学谦
2022/10/30
4.1K0
Power BI 从 Dataverse 获取数据
php 从hbase 获取数据 原
<?php ini_set('display_errors', E_ALL); $GLOBALS['THRIFT_ROOT'] = "/home/t_qmw/project_hbase"; /*
双面人
2019/04/10
3.2K0
从 Angular Route 中提前获取数据
—\ntheme: fancy\n—\n\n### 介绍\n\n提前获取意味着在数据呈现在屏幕之前获取到数据。本文中,你将学到,在路由更改前怎么获取到数据。通过本文,你将学会使用 resolver, 在 Angular App 中应用 resolver,应用到一个公共的预加载导航。\n\n### 你为什么应该使用 Resolver\n\nResolver 在路由跟组件之间扮演着中间件服务的角色。假设你有一个表单,没有数据时,你想向用户一个空的表单,当在加载用户数据时展示一个 loader,然后当数据返回时,填充表单并隐藏 loader。\n\n通常,我们都会在组件的 ngOnInit() 钩子函数中获取数据。也就是说,组件加载完之后,我们发起数据请求。\n\n在 ngOnInit() 中操作,我们需要在每个需要的组件加载后,在其路由页面中添加 loader 展示。Resolver 可以简化 loader 的添加使用。你可以只添加一个适用于每个路由的 loader,而不是每个路由中都添加 loader。\n\n本文将结合示例来解析 resolver 的知识点。以便于你可以牢记它并在项目中使用它。\n\n### 在应用中使用 Resolver\n\n为了在应用中使用 resolver,你需要准备一些接口。你可以通过 JSONPlaceholder 来模拟,而不需要自己开发。\n\nJSONPlaceholder 是一个很棒的接口资源,你可以借助它更好学习前端的相关概念而不被接口所约束。\n\n现在,接口的问题解决了,我们可以开始 resolver 的应用了。一个 resolver 就是一个中间件服务,所以我们将创建一个服务。\n\nbash\n ng g s resolvers/demo-resolver --skipTests=true\n\n\n> –skipTests=true 跳过生成测试文件\n\nsrc/app/resolvers 文件夹中创建了一个服务。resolver 接口中有一个 resolve() 方法,它有两个参数:route(ActivatedRouteSnapshot 的实例)和 state(RouterStateSnapshot 的实例)。\n\nloader 通常是在 ngOnInit() 中编写所有的 AJAX 请求,但是逻辑将会在 resolver 中实现,替代 ngOnInit()。\n\n接着,创建一个服务来获取 JSONPlaceholder 中列表数据。然后在 resolver 中底调用,接着在路由中配置 resolve信息,(页面将会等待)直到 resolver 被处理。在 resolver 被处理之后,我们可以通过路由来获取数据然后展示在组件中。\n\n### 创建服务并编写逻辑获取列表数据\n\nbash\n ng g class models/post --skipTests=true\n\n\npost.ts\n\ntypescript\nexport class Post {\n id: number;\n title: string;\n body: string;\n userId: string;\n}\n\n\nmodel 就绪,是时候获取帖子 post 的数据了。\n\npost.service.ts\n\ntypescript\nimport { Injectable } from "@angular/core";\nimport { HttpClient } from "@angular/common/http";\nimport { Post } from "../models/post";\n\n@Injectable({\n providedIn: "root"\n})\nexport class PostsService {\n constructor(private _http: HttpClient) {}\n\n getPostList() {\n let URL = "https://jsonplaceholder.typicode.com/posts";\n return this._http.get<Post[]>(URL);\n }\n}\n\n\n现在,这个服务随时可被调用。\n\ndemo-resolver.service.ts\n\ntypescript\nimport { Injectable } from "@angular/core";\nimport {\n Resolve,\n ActivatedRouteSnapshot,\n RouterStateSnapshot\n} from "@angular/router";\nimport { PostsService } from "..
Jimmy_is_jimmy
2022/09/08
6.4K0
从损坏的手机中获取数据
有时候,犯罪分子会故意损坏手机来破坏数据。比如粉碎、射击手机或是直接扔进水里,但取证专家仍然可以找到手机里的证据。
FB客服
2020/02/23
11K0
逆向从 Instruments 中获取 GPU 数据
背景: RTMP SDK需要获取硬编硬解时候的GPU数据,第一时间想起了TraceParser, 但是TraceParser不支持GPU Driver模板. 于是想着能不能扩展TraceParser模板. 发现main.m文件只有寥寥几行代码,完全不知道做了什么, 但是google和km之后发现应该是采用了反序列化的方式来dump出数据. 缺点很明显, 需要自己实现NSCoding,还需要先将.trace文件解压出.run文件. 不知道结构无从下手.
Locker
2018/08/01
6.3K0
逆向从 Instruments 中获取 GPU 数据
从mysql获取到从redis获取 示例
1.因采集是每分钟写入一次数据库,故redis每分钟读取一次数据库最新信息,读取脚本如下:
葫芦
2019/04/13
2.6K0
从mysql获取到从redis获取 示例
CaseStudy(showcase)数据篇-从XML中获取数据
做silvelight也有一段时间了,相册、游戏,刚刚完成的showcase这个小程序算是一个阶段了。这里就以showcase这个项目来做一下CaseStudy。 数据篇-从XML中获取数据 这个项目
用户1172164
2018/01/16
4.8K0
从远程计算机获取WMI数据
您可以使用本主题中的过程和代码示例来创建完整的WMI客户端应用程序,该应用程序执行COM初始化,连接到远程计算机上的WMI,半同步获取数据,然后清理。
Ms08067安全实验室
2020/12/14
2.2K0
从记录获取
Record.FieldCount(record as record) as number
逍遥之
2020/03/23
1.3K0
【译】使用RxJava从多个数据源获取数据
试想,需要一些动态数据的时候,只要每次都请求网络就可以了。但是,更有效率的做法是,把联网得到的数据,缓存到磁盘或内存。
用户1740424
2018/07/23
2.6K0
【译】使用RxJava从多个数据源获取数据
在MySQL数据库中从表里随机获取数据
在很多应用场景下,我们需要从数据库表中随机获取一条或者多条记录。这里主要介绍对比两个方法。
Gujiu
2022/09/16
10.2K0
volley7–NetworkDispatcher从网络中获取数据[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/108121.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/20
3.1K0
python 从mysql获取变为redis获取
1.因采集是每分钟写入一次数据库,故redis每分钟读取一次数据库最新信息,读取脚本如下:
葫芦
2019/04/17
3.5K0
python 从mysql获取变为redis获取
利用channel并发从数据库获取多个数据
我们在获取用户信息的时候,经常是需要从多个数据源中获取数据,比如获取用户的余额,用户状态,用户拥有物品时,需要拉取多个数据库,如果顺序执行的话,速度不够快,这里分享一种写法。
用户7962184
2020/11/20
1.7K0
django-模型之从数据库获取数据(二)
11.逻辑查询 __gt(大于),__gte(大于等于),__lt(小于),__lte(小于等于)
西西嘛呦
2020/08/26
3.8K0
从xlnet预训练数据集中获取词向量
利用pytorch-transformers中的方法进行预训练模型加载,然后进行词向量的获取和提取。
sparkexpert
2019/08/23
1.5K0
从xlnet预训练数据集中获取词向量
通过 HttpClient 从指定服务器获取数据
第一步:在POM.xml中添加dependency <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <
week
2018/08/27
2.2K0
从Bert预训练数据集中获取词向量
在一些操作过程中,经常要获取词向量,BERT做为一个在各项评测指标中都比较出色的,且提供了许多预训练模型的,从其中获取词向量是一些任务中必备的操作。
sparkexpert
2019/08/23
4.5K0
从Bert预训练数据集中获取词向量
【译】使用RxJava从多个数据源获取数据
试想,需要一些动态数据的时候,只要每次都请求网络就可以了。但是,更有效率的做法是,把联网得到的数据,缓存到磁盘或内存。
小鄧子
2018/08/20
2.2K0
【译】使用RxJava从多个数据源获取数据

相似问题

将数组写入Three.WebGLRenderTarget

12

Three.js。从localToWorld顶点获取BufferGeometry

16

如何从three.js OBJLoader获取索引

16

THREE.js从MouseClick获取GridHelper坐标

11

Three.js获取translateZ值[three.js]

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档