javascript - 三.js:internalformat/format/type组合无效和framebuffer不完整
问题描述
我正在尝试创建一个帧缓冲区对象,该对象将为我的 2**16 个对象中的每一个存储一个浮点数。我似乎遗漏了一些非常基本的东西,因为我得到了两个可能相关的错误。第一个说GL_INVALID_OPERATION : glTexImage2D: invalid internalformat/format/type combination GL_ALPHA/GL_ALPHA/GL_FLOAT
。第二个说framebuffer incomplete
。
这是我的设置:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<script src='https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js'></script>
<!-- FBO vert -->
<script type='x-shader/x-vertex' id='fbo-vertex'>
precision highp float;
uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
attribute vec2 uv; // x,y offsets of each point in texture
attribute vec3 position;
varying vec2 vUv;
void main() {
vUv = vec2(uv.x, 1.0 - uv.y);
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
</script>
<!-- FBO frag -->
<script type='x-shader/x-fragment' id='fbo-fragment'>
precision highp float;
uniform sampler2D posTex;
varying vec2 vUv;
void main() {
// read the supplied x,y,z vert positions
vec3 pos = texture2D(posTex, vUv).xyz;
// render the new positional attributes
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
</script>
<script>
var renderer = new THREE.WebGLRenderer({antialias: true, alpha: true});
renderer.autoClear = false;
/**
* FBO
**/
var config = {
w: 256,
type: THREE.FloatType,
format: THREE.AlphaFormat,
minFilter: THREE.NearestFilter,
magFilter: THREE.NearestFilter,
}
var i = 0,
data = new Float32Array(config.w**2);
for (var x=0; x<config.w; x++) {
for (var y=0; y<config.w; y++) {
data[i++] = 6.0; // initial point size
}
}
// feed those positions into a data texture
var dataTex = new THREE.DataTexture(data, config.w, config.w, config.format, config.type);
dataTex.minFilter = config.minFilter;
dataTex.magFilter = config.magFilter;
dataTex.needsUpdate = true;
// add the data texture with positions to a material for the simulation
var fboMaterial = new THREE.RawShaderMaterial({
uniforms: {
posTex: {
type: 't',
value: dataTex,
},
},
vertexShader: document.querySelector('#fbo-vertex').textContent,
fragmentShader: document.querySelector('#fbo-fragment').textContent,
});
THREE.FBO = function(w, simMat) {
this.scene = new THREE.Scene();
this.camera = new THREE.OrthographicCamera(-w/2, w/2, w/2, -w/2, -1, 1);
this.scene.add(new THREE.Mesh(new THREE.PlaneGeometry(w, w), simMat));
};
// create a scene where we'll render the positional attributes
var fbo = new THREE.FBO(config.w, fboMaterial);
// create render targets a + b to which the simulation will be rendered
var renderTargetA = new THREE.WebGLRenderTarget(config.w, config.w, {
format: config.format,
type: config.type,
minFilter: config.minFilter,
magFilter: config.magFilter,
wrapS: THREE.RepeatWrapping,
wrapT: THREE.RepeatWrapping,
stencilBuffer: false,
});
// a second render target lets us store input + output positional states
renderTargetB = renderTargetA.clone();
// render the initial data to the render targets
renderer.setRenderTarget(renderTargetA);
renderer.render(fbo.scene, fbo.camera);
renderer.setRenderTarget(null);
renderer.setRenderTarget(renderTargetB);
renderer.render(fbo.scene, fbo.camera);
renderer.setRenderTarget(null);
</script>
</body>
</html>
我想我可以根据这篇文章将 GL_ALPHA 与 GL_FLOAT 一起使用,但如果其他人知道在哪里可以找到它,我真的很想在规范中找到兼容性矩阵。
如何解决这些错误?
解决方案
推荐阅读
- android - 从 url 方案启动 Android 应用程序非常慢
- django - 是否可以从从另一个模型派生的列表列表中创建多个模型实例?
- angular - 为 @azure/msal-angular 添加导入时,Angular 应用程序变为空白
- c++ - C++ 变量数组
- amazon-web-services - API Gateway Websockets - 处理 10 分钟空闲连接超时
- ios - Swift:在串口监视器上接收来自服务器的 UDP 数据包,但不在 ios 应用程序中
- html - div不会填充父div
- excel - 按值除列
- sql - 我的程序有什么问题,我的程序中的数据有误
- c++ - 关于 linear_congruential_engine::min() 的问题