xxxxxxxxxx
// VTFできましたね
// なんだ~
// float textureってこれでいいんですね~
// まああんま使い道ないだろうけどな
let fbo;
let sh;
let mainSh;
let buf1;
const vert =
`#version 300 es
in vec4 aData;
out vec4 vData;
void main(){
vData = aData;
gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
gl_PointSize = 1.0;
}
`;
const frag =
`#version 300 es
precision highp float;
in vec4 vData;
out vec4 color;
void main(){
color = vData;
}
`;
function setup() {
createCanvas(600, 600, WEBGL);
const _gl = this._renderer;
const gl = _gl.GL;
buf1 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf1);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1,1,2,-2]), gl.STATIC_DRAW);
gl.bindBuffer(gl.ARRAY_BUFFER, null);
sh = createShader(vert, frag);
fbo = createFramebuffer({
width:1, height:1, format:FLOAT, textureFiltering:NEAREST
});
fbo.begin();
shader(sh);
_gl._setPointUniforms(sh);
gl.bindBuffer(gl.ARRAY_BUFFER, buf1);
sh.enableAttrib(sh.attributes.aData, 4);
gl.drawArrays(gl.POINTS, 0, 1);
sh.unbindShader();
fbo.end();
mainSh = baseMaterialShader().modify({
'vertexDeclarations':`
uniform sampler2D uData;
`,
'vec3 getLocalPosition':`(vec3 p){
vec4 v = texture(uData, vec2(0.5, 0.5));
p.x += v.x; // x座標を-1
p.y += v.z; // y座標を+2
return p;
}
`
});
}
function draw() {
background(220);
orbitControl();
shader(mainSh);
mainSh.setUniform("uData", fbo.color);
noStroke();
lights();
fill(0,128,255);
box(100);
}