Javascript WebGL进入p5.js画布变得扭曲

Javascript WebGL进入p5.js画布变得扭曲,javascript,webgl,shader,p5.js,webgl2,Javascript,Webgl,Shader,P5.js,Webgl2,我对着色器比较陌生,在将着色器代码放入p5.js画布时遇到了问题。当我将smoke.js脚本附加到HTML画布上时,它可以正常工作,但当我尝试将其放入在p5中创建的画布时,它只显示在右上角。知道这是怎么回事吗 //smoke.js //取自https://codepen.io/PavelDoGreat/details/zdWzEL/ "严格使用",; window.addEventListener('load',函数(){ const canvas=document.getElementBy

我对着色器比较陌生,在将着色器代码放入p5.js画布时遇到了问题。当我将smoke.js脚本附加到HTML画布上时,它可以正常工作,但当我尝试将其放入在p5中创建的画布时,它只显示在右上角。知道这是怎么回事吗

//smoke.js
//取自https://codepen.io/PavelDoGreat/details/zdWzEL/
"严格使用",;
window.addEventListener('load',函数(){
const canvas=document.getElementById('myCanvas');
console.log(canvas);
const{gl,ext}=getWebGLContext(canvas);
让配置={
纹理下样本:1,
密度_耗散:0.98,
速度_耗散:0.99,
压力耗散:0.8,
压力:25,
卷曲:30,
SPLAT_半径:0.005
}
设指针=[];
设splatStack=[];
函数getWebGLContext(画布){
常量参数={alpha:false,depth:false,stencil:false,antialias:false};
设gl=canvas.getContext('webgl2',params);
常量isWebGL2=!!gl;
如果(!isWebGL2)
gl=canvas.getContext('webgl',params)| canvas.getContext('experimental-webgl',params);
让半浮;
让我们支持线性过滤;
if(isWebGL2){
gl.getExtension('EXT_color_buffer_float');
supportLinearFiltering=gl.getExtension('OES_texture_float_linear');
}否则{
半浮点数=gl.getExtension('OES_纹理半浮点数');
supportLinearFiltering=gl.getExtension('OES_texture_half_float_linear');
}
gl.clearColor(0.0,0.0,0.0,1.0);
const halfFloatTexType=isWebGL2?gl.HALF_FLOAT:halfFloat.HALF_FLOAT_;
让我们来看看RGBA;
让我们开始吧;
让格式化程序;
if(isWebGL2){
formatRGBA=getSupportedFormat(gl,gl.RGBA16F,gl.RGBA,HalfFloatTextType);
formatRG=getSupportedFormat(gl,gl.RG16F,gl.RG,HalfFloatTextType);
formatR=getSupportedFormat(gl、gl.R16F、gl.RED、HalfFloatTextType);
}
否则{
formatRGBA=getSupportedFormat(gl、gl.RGBA、gl.RGBA、HalfFloatTextType);
formatRG=getSupportedFormat(gl、gl.RGBA、gl.RGBA、HalfFloatTextType);
formatR=getSupportedFormat(gl、gl.RGBA、gl.RGBA、HalfFloatTextType);
}
返回{
德国劳埃德船级社,
分机:{
formatRGBA,
formatRG,
格式化程序,
半浮动文本类型,
支撑线过滤
}
};
}
函数getSupportedFormat(总账、内部格式、格式、类型){
如果(!SupportRenderTextReformat(gl,internalFormat,format,type)){
开关(内部格式){
案例gl.R16F:
返回getSupportedFormat(总账,gl.RG16F,gl.RG,类型);
案例gl.RG16F:
返回getSupportedFormat(gl,gl.RGBA16F,gl.RGBA,类型);
违约:
返回null;
}
}
返回{
内部格式,
格式
}
}
函数支持RenderTextReformFormat(gl、internalFormat、format、type){
让纹理=gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D,纹理);
gl.texParameteri(gl.TEXTURE\u 2D,gl.TEXTURE\u MIN\u过滤器,gl.NEAREST);
gl.texParameteri(gl.TEXTURE\u 2D,gl.TEXTURE\u MAG\u过滤器,gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D、gl.TEXTURE_WRAP_S、gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE\u 2D、gl.TEXTURE\u WRAP\u T、gl.CLAMP\u至边缘);
gl.texImage2D(gl.TEXTURE_2D,0,internalFormat,4,4,0,format,type,null);
设fbo=gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER,fbo);
gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,TEXTURE,0);
const status=gl.checkFramebufferStatus(gl.FRAMEBUFFER);
如果(状态!=gl.FRAMEBUFFER\u完成)
返回false;
返回true;
}
函数指针原型(){
这个.id=-1;
这个.x=0;
这个。y=0;
该值为0.dx=0;
这是0.dy=0;
this.down=false;
this.moved=false;
this.color=[30,0300];
}
push(newpointerprototype());
类GLP程序{
构造函数(vertexShader、fragmentShader){
this.uniforms={};
this.program=gl.createProgram();
gl.attachShader(this.program,vertexShader);
gl.attachShader(this.program,fragmentShader);
总账链接程序(本程序);
if(!gl.getProgramParameter(this.program,gl.LINK_STATUS))
抛出gl.getProgramInfoLog(this.program);
const uniformCount=gl.getProgramParameter(this.program,gl.ACTIVE\u);
for(设i=0;i