提交 cee72056 编写于 作者: A alteredq

Added simple render-to-texture example.

Something is broken as OpenGL shows different result than ANGLE :(

Though this time it's ANGLE which seems correct.
......@@ -174,9 +174,9 @@ h.image[m]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MA
j(h.wrap_t));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,j(h.mag_filter));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,j(h.min_filter));b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0+d);b.bindTexture(b.TEXTURE_2D,h.__webGLTexture)}}}w=p.attributes;b.bindBuffer(b.ARRAY_BUFFER,s.__webGLVertexBuffer);b.vertexAttribPointer(w.position,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(w.position);if(w.normal>=0){b.bindBuffer(b.ARRAY_BUFFER,s.__webGLNormalBuffer);
b.vertexAttribPointer(w.normal,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(w.normal)}if(w.tangent>=0){b.bindBuffer(b.ARRAY_BUFFER,s.__webGLTangentBuffer);b.vertexAttribPointer(w.tangent,4,b.FLOAT,false,0,0);b.enableVertexAttribArray(w.tangent)}if(w.uv>=0)if(s.__webGLUVBuffer){b.bindBuffer(b.ARRAY_BUFFER,s.__webGLUVBuffer);b.vertexAttribPointer(w.uv,2,b.FLOAT,false,0,0);b.enableVertexAttribArray(w.uv)}else b.disableVertexAttribArray(w.uv);if(n.wireframe||n instanceof THREE.LineBasicMaterial){w=
n.wireframe_linewidth!==undefined?n.wireframe_linewidth:n.linewidth!==undefined?n.linewidth:1;n=n instanceof THREE.LineBasicMaterial&&v.type==THREE.LineStrip?b.LINE_STRIP:b.LINES;b.lineWidth(w);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,s.__webGLLineBuffer);b.drawElements(n,s.__webGLLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,s.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,s.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(d,h,k,n,s,v,p){var m,w,t,i,u;t=0;for(i=
n.materials.length;t<i;t++){m=n.materials[t];if(m instanceof THREE.MeshFaceMaterial){m=0;for(w=s.materials.length;m<w;m++)if((u=s.materials[m])&&u.blending==v&&u.opacity<1==p){this.setBlending(u.blending);this.renderBuffer(d,h,k,u,s,n)}}else if((u=m)&&u.blending==v&&u.opacity<1==p){this.setBlending(u.blending);this.renderBuffer(d,h,k,u,s,n)}}};this.render=function(d,h,k){var n,s,v,p,m=d.lights,w=d.fog;this.initWebGLObjects(d);if(k){if(k&&!k.__webGLFramebuffer){k.__webGLFramebuffer=b.createFramebuffer();
n.materials.length;t<i;t++){m=n.materials[t];if(m instanceof THREE.MeshFaceMaterial){m=0;for(w=s.materials.length;m<w;m++)if((u=s.materials[m])&&u.blending==v&&u.opacity<1==p){this.setBlending(u.blending);this.renderBuffer(d,h,k,u,s,n)}}else if((u=m)&&u.blending==v&&u.opacity<1==p){this.setBlending(u.blending);this.renderBuffer(d,h,k,u,s,n)}}};this.render=function(d,h,k){var n,s,v,p,m=d.lights,w=d.fog;this.initWebGLObjects(d);if(k&&!k.__webGLFramebuffer){k.__webGLFramebuffer=b.createFramebuffer();
k.__webGLRenderbuffer=b.createRenderbuffer();k.__webGLTexture=b.createTexture();b.bindRenderbuffer(b.RENDERBUFFER,k.__webGLRenderbuffer);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,k.width,k.height);b.bindTexture(b.TEXTURE_2D,k.__webGLTexture);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,j(k.wrap_s));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,j(k.wrap_t));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,j(k.mag_filter));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,j(k.min_filter));
b.texImage2D(b.TEXTURE_2D,0,j(k.format),k.width,k.height,0,j(k.format),j(k.type),null);b.bindFramebuffer(b.FRAMEBUFFER,k.__webGLFramebuffer);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,k.__webGLTexture,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,k.__webGLRenderbuffer);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null)}b.bindFramebuffer(b.FRAMEBUFFER,k?k.__webGLFramebuffer:null)}this.autoClear&&
b.texImage2D(b.TEXTURE_2D,0,j(k.format),k.width,k.height,0,j(k.format),j(k.type),null);b.bindFramebuffer(b.FRAMEBUFFER,k.__webGLFramebuffer);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,k.__webGLTexture,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,k.__webGLRenderbuffer);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null)}b.bindFramebuffer(b.FRAMEBUFFER,k?k.__webGLFramebuffer:null);this.autoClear&&
this.clear();h.autoUpdateMatrix&&h.updateMatrix();E.set(h.matrix.flatten());C.set(h.projectionMatrix.flatten());n=0;for(s=d.__webGLObjects.length;n<s;n++){v=d.__webGLObjects[n];p=v.object;v=v.buffer;if(p.visible){this.setupMatrices(p,h);this.renderPass(h,m,w,p,v,THREE.NormalBlending,false)}}n=0;for(s=d.__webGLObjects.length;n<s;n++){v=d.__webGLObjects[n];p=v.object;v=v.buffer;if(p.visible){this.setupMatrices(p,h);this.renderPass(h,m,w,p,v,THREE.AdditiveBlending,false);this.renderPass(h,m,w,p,v,THREE.SubtractiveBlending,
false);this.renderPass(h,m,w,p,v,THREE.AdditiveBlending,true);this.renderPass(h,m,w,p,v,THREE.SubtractiveBlending,true);this.renderPass(h,m,w,p,v,THREE.NormalBlending,true)}}if(k&&k.min_filter!==THREE.NearestFilter&&k.min_filter!==THREE.LinearFilter){b.bindTexture(b.TEXTURE_2D,k.__webGLTexture);b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}};this.initWebGLObjects=function(d){function h(t,i,u,I){if(t[i]==undefined){d.__webGLObjects.push({buffer:u,object:I});t[i]=1}}var k,n,s,v,p,
m,w;if(!d.__webGLObjects){d.__webGLObjects=[];d.__webGLObjectsMap={}}k=0;for(n=d.objects.length;k<n;k++){s=d.objects[k];p=s.geometry;if(d.__webGLObjectsMap[s.id]==undefined)d.__webGLObjectsMap[s.id]={};w=d.__webGLObjectsMap[s.id];if(s instanceof THREE.Mesh){for(v in p.geometryChunks){m=p.geometryChunks[v];if(!m.__webGLVertexBuffer){this.createMeshBuffers(m);this.initMeshBuffers(m,s);p.__dirtyVertices=true;p.__dirtyElements=true;p.__dirtyUvs=true;p.__dirtyNormals=true;p.__dirtyTangents=true}if(p.__dirtyVertices||
......
......@@ -175,9 +175,9 @@ h.image[n]);b.generateMipmap(b.TEXTURE_CUBE_MAP);b.bindTexture(b.TEXTURE_CUBE_MA
j(h.wrap_t));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,j(h.mag_filter));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,j(h.min_filter));b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}b.activeTexture(b.TEXTURE0+d);b.bindTexture(b.TEXTURE_2D,h.__webGLTexture)}}}w=p.attributes;b.bindBuffer(b.ARRAY_BUFFER,s.__webGLVertexBuffer);b.vertexAttribPointer(w.position,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(w.position);if(w.normal>=0){b.bindBuffer(b.ARRAY_BUFFER,s.__webGLNormalBuffer);
b.vertexAttribPointer(w.normal,3,b.FLOAT,false,0,0);b.enableVertexAttribArray(w.normal)}if(w.tangent>=0){b.bindBuffer(b.ARRAY_BUFFER,s.__webGLTangentBuffer);b.vertexAttribPointer(w.tangent,4,b.FLOAT,false,0,0);b.enableVertexAttribArray(w.tangent)}if(w.uv>=0)if(s.__webGLUVBuffer){b.bindBuffer(b.ARRAY_BUFFER,s.__webGLUVBuffer);b.vertexAttribPointer(w.uv,2,b.FLOAT,false,0,0);b.enableVertexAttribArray(w.uv)}else b.disableVertexAttribArray(w.uv);if(o.wireframe||o instanceof THREE.LineBasicMaterial){w=
o.wireframe_linewidth!==undefined?o.wireframe_linewidth:o.linewidth!==undefined?o.linewidth:1;o=o instanceof THREE.LineBasicMaterial&&v.type==THREE.LineStrip?b.LINE_STRIP:b.LINES;b.lineWidth(w);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,s.__webGLLineBuffer);b.drawElements(o,s.__webGLLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,s.__webGLFaceBuffer);b.drawElements(b.TRIANGLES,s.__webGLFaceCount,b.UNSIGNED_SHORT,0)}};this.renderPass=function(d,h,k,o,s,v,p){var n,w,t,i,u;t=0;for(i=
o.materials.length;t<i;t++){n=o.materials[t];if(n instanceof THREE.MeshFaceMaterial){n=0;for(w=s.materials.length;n<w;n++)if((u=s.materials[n])&&u.blending==v&&u.opacity<1==p){this.setBlending(u.blending);this.renderBuffer(d,h,k,u,s,o)}}else if((u=n)&&u.blending==v&&u.opacity<1==p){this.setBlending(u.blending);this.renderBuffer(d,h,k,u,s,o)}}};this.render=function(d,h,k){var o,s,v,p,n=d.lights,w=d.fog;this.initWebGLObjects(d);if(k){if(k&&!k.__webGLFramebuffer){k.__webGLFramebuffer=b.createFramebuffer();
o.materials.length;t<i;t++){n=o.materials[t];if(n instanceof THREE.MeshFaceMaterial){n=0;for(w=s.materials.length;n<w;n++)if((u=s.materials[n])&&u.blending==v&&u.opacity<1==p){this.setBlending(u.blending);this.renderBuffer(d,h,k,u,s,o)}}else if((u=n)&&u.blending==v&&u.opacity<1==p){this.setBlending(u.blending);this.renderBuffer(d,h,k,u,s,o)}}};this.render=function(d,h,k){var o,s,v,p,n=d.lights,w=d.fog;this.initWebGLObjects(d);if(k&&!k.__webGLFramebuffer){k.__webGLFramebuffer=b.createFramebuffer();
k.__webGLRenderbuffer=b.createRenderbuffer();k.__webGLTexture=b.createTexture();b.bindRenderbuffer(b.RENDERBUFFER,k.__webGLRenderbuffer);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,k.width,k.height);b.bindTexture(b.TEXTURE_2D,k.__webGLTexture);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,j(k.wrap_s));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,j(k.wrap_t));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,j(k.mag_filter));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,j(k.min_filter));
b.texImage2D(b.TEXTURE_2D,0,j(k.format),k.width,k.height,0,j(k.format),j(k.type),null);b.bindFramebuffer(b.FRAMEBUFFER,k.__webGLFramebuffer);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,k.__webGLTexture,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,k.__webGLRenderbuffer);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null)}b.bindFramebuffer(b.FRAMEBUFFER,k?k.__webGLFramebuffer:null)}this.autoClear&&
b.texImage2D(b.TEXTURE_2D,0,j(k.format),k.width,k.height,0,j(k.format),j(k.type),null);b.bindFramebuffer(b.FRAMEBUFFER,k.__webGLFramebuffer);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,k.__webGLTexture,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,k.__webGLRenderbuffer);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null)}b.bindFramebuffer(b.FRAMEBUFFER,k?k.__webGLFramebuffer:null);this.autoClear&&
this.clear();h.autoUpdateMatrix&&h.updateMatrix();E.set(h.matrix.flatten());C.set(h.projectionMatrix.flatten());o=0;for(s=d.__webGLObjects.length;o<s;o++){v=d.__webGLObjects[o];p=v.object;v=v.buffer;if(p.visible){this.setupMatrices(p,h);this.renderPass(h,n,w,p,v,THREE.NormalBlending,false)}}o=0;for(s=d.__webGLObjects.length;o<s;o++){v=d.__webGLObjects[o];p=v.object;v=v.buffer;if(p.visible){this.setupMatrices(p,h);this.renderPass(h,n,w,p,v,THREE.AdditiveBlending,false);this.renderPass(h,n,w,p,v,THREE.SubtractiveBlending,
false);this.renderPass(h,n,w,p,v,THREE.AdditiveBlending,true);this.renderPass(h,n,w,p,v,THREE.SubtractiveBlending,true);this.renderPass(h,n,w,p,v,THREE.NormalBlending,true)}}if(k&&k.min_filter!==THREE.NearestFilter&&k.min_filter!==THREE.LinearFilter){b.bindTexture(b.TEXTURE_2D,k.__webGLTexture);b.generateMipmap(b.TEXTURE_2D);b.bindTexture(b.TEXTURE_2D,null)}};this.initWebGLObjects=function(d){function h(t,i,u,I){if(t[i]==undefined){d.__webGLObjects.push({buffer:u,object:I});t[i]=1}}var k,o,s,v,p,
n,w;if(!d.__webGLObjects){d.__webGLObjects=[];d.__webGLObjectsMap={}}k=0;for(o=d.objects.length;k<o;k++){s=d.objects[k];p=s.geometry;if(d.__webGLObjectsMap[s.id]==undefined)d.__webGLObjectsMap[s.id]={};w=d.__webGLObjectsMap[s.id];if(s instanceof THREE.Mesh){for(v in p.geometryChunks){n=p.geometryChunks[v];if(!n.__webGLVertexBuffer){this.createMeshBuffers(n);this.initMeshBuffers(n,s);p.__dirtyVertices=true;p.__dirtyElements=true;p.__dirtyUvs=true;p.__dirtyNormals=true;p.__dirtyTangents=true}if(p.__dirtyVertices||
......
......@@ -174,9 +174,9 @@ k.image[p]);c.generateMipmap(c.TEXTURE_CUBE_MAP);c.bindTexture(c.TEXTURE_CUBE_MA
h(k.wrap_t));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,h(k.mag_filter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,h(k.min_filter));c.generateMipmap(c.TEXTURE_2D);c.bindTexture(c.TEXTURE_2D,null)}c.activeTexture(c.TEXTURE0+d);c.bindTexture(c.TEXTURE_2D,k.__webGLTexture)}}}C=t.attributes;c.bindBuffer(c.ARRAY_BUFFER,v.__webGLVertexBuffer);c.vertexAttribPointer(C.position,3,c.FLOAT,false,0,0);c.enableVertexAttribArray(C.position);if(C.normal>=0){c.bindBuffer(c.ARRAY_BUFFER,v.__webGLNormalBuffer);
c.vertexAttribPointer(C.normal,3,c.FLOAT,false,0,0);c.enableVertexAttribArray(C.normal)}if(C.tangent>=0){c.bindBuffer(c.ARRAY_BUFFER,v.__webGLTangentBuffer);c.vertexAttribPointer(C.tangent,4,c.FLOAT,false,0,0);c.enableVertexAttribArray(C.tangent)}if(C.uv>=0)if(v.__webGLUVBuffer){c.bindBuffer(c.ARRAY_BUFFER,v.__webGLUVBuffer);c.vertexAttribPointer(C.uv,2,c.FLOAT,false,0,0);c.enableVertexAttribArray(C.uv)}else c.disableVertexAttribArray(C.uv);if(s.wireframe||s instanceof THREE.LineBasicMaterial){C=
s.wireframe_linewidth!==undefined?s.wireframe_linewidth:s.linewidth!==undefined?s.linewidth:1;s=s instanceof THREE.LineBasicMaterial&&x.type==THREE.LineStrip?c.LINE_STRIP:c.LINES;c.lineWidth(C);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,v.__webGLLineBuffer);c.drawElements(s,v.__webGLLineCount,c.UNSIGNED_SHORT,0)}else{c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,v.__webGLFaceBuffer);c.drawElements(c.TRIANGLES,v.__webGLFaceCount,c.UNSIGNED_SHORT,0)}};this.renderPass=function(d,k,m,s,v,x,t){var p,C,z,n,B;z=0;for(n=
s.materials.length;z<n;z++){p=s.materials[z];if(p instanceof THREE.MeshFaceMaterial){p=0;for(C=v.materials.length;p<C;p++)if((B=v.materials[p])&&B.blending==x&&B.opacity<1==t){this.setBlending(B.blending);this.renderBuffer(d,k,m,B,v,s)}}else if((B=p)&&B.blending==x&&B.opacity<1==t){this.setBlending(B.blending);this.renderBuffer(d,k,m,B,v,s)}}};this.render=function(d,k,m){var s,v,x,t,p=d.lights,C=d.fog;this.initWebGLObjects(d);if(m){if(m&&!m.__webGLFramebuffer){m.__webGLFramebuffer=c.createFramebuffer();
s.materials.length;z<n;z++){p=s.materials[z];if(p instanceof THREE.MeshFaceMaterial){p=0;for(C=v.materials.length;p<C;p++)if((B=v.materials[p])&&B.blending==x&&B.opacity<1==t){this.setBlending(B.blending);this.renderBuffer(d,k,m,B,v,s)}}else if((B=p)&&B.blending==x&&B.opacity<1==t){this.setBlending(B.blending);this.renderBuffer(d,k,m,B,v,s)}}};this.render=function(d,k,m){var s,v,x,t,p=d.lights,C=d.fog;this.initWebGLObjects(d);if(m&&!m.__webGLFramebuffer){m.__webGLFramebuffer=c.createFramebuffer();
m.__webGLRenderbuffer=c.createRenderbuffer();m.__webGLTexture=c.createTexture();c.bindRenderbuffer(c.RENDERBUFFER,m.__webGLRenderbuffer);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,m.width,m.height);c.bindTexture(c.TEXTURE_2D,m.__webGLTexture);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,h(m.wrap_s));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,h(m.wrap_t));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,h(m.mag_filter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,h(m.min_filter));
c.texImage2D(c.TEXTURE_2D,0,h(m.format),m.width,m.height,0,h(m.format),h(m.type),null);c.bindFramebuffer(c.FRAMEBUFFER,m.__webGLFramebuffer);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,m.__webGLTexture,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,m.__webGLRenderbuffer);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null)}c.bindFramebuffer(c.FRAMEBUFFER,m?m.__webGLFramebuffer:null)}this.autoClear&&
c.texImage2D(c.TEXTURE_2D,0,h(m.format),m.width,m.height,0,h(m.format),h(m.type),null);c.bindFramebuffer(c.FRAMEBUFFER,m.__webGLFramebuffer);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,m.__webGLTexture,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,m.__webGLRenderbuffer);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null)}c.bindFramebuffer(c.FRAMEBUFFER,m?m.__webGLFramebuffer:null);this.autoClear&&
this.clear();k.autoUpdateMatrix&&k.updateMatrix();D.set(k.matrix.flatten());w.set(k.projectionMatrix.flatten());s=0;for(v=d.__webGLObjects.length;s<v;s++){x=d.__webGLObjects[s];t=x.object;x=x.buffer;if(t.visible){this.setupMatrices(t,k);this.renderPass(k,p,C,t,x,THREE.NormalBlending,false)}}s=0;for(v=d.__webGLObjects.length;s<v;s++){x=d.__webGLObjects[s];t=x.object;x=x.buffer;if(t.visible){this.setupMatrices(t,k);this.renderPass(k,p,C,t,x,THREE.AdditiveBlending,false);this.renderPass(k,p,C,t,x,THREE.SubtractiveBlending,
false);this.renderPass(k,p,C,t,x,THREE.AdditiveBlending,true);this.renderPass(k,p,C,t,x,THREE.SubtractiveBlending,true);this.renderPass(k,p,C,t,x,THREE.NormalBlending,true)}}if(m&&m.min_filter!==THREE.NearestFilter&&m.min_filter!==THREE.LinearFilter){c.bindTexture(c.TEXTURE_2D,m.__webGLTexture);c.generateMipmap(c.TEXTURE_2D);c.bindTexture(c.TEXTURE_2D,null)}};this.initWebGLObjects=function(d){function k(z,n,B,P){if(z[n]==undefined){d.__webGLObjects.push({buffer:B,object:P});z[n]=1}}var m,s,v,x,t,
p,C;if(!d.__webGLObjects){d.__webGLObjects=[];d.__webGLObjectsMap={}}m=0;for(s=d.objects.length;m<s;m++){v=d.objects[m];t=v.geometry;if(d.__webGLObjectsMap[v.id]==undefined)d.__webGLObjectsMap[v.id]={};C=d.__webGLObjectsMap[v.id];if(v instanceof THREE.Mesh){for(x in t.geometryChunks){p=t.geometryChunks[x];if(!p.__webGLVertexBuffer){this.createMeshBuffers(p);this.initMeshBuffers(p,v);t.__dirtyVertices=true;t.__dirtyElements=true;t.__dirtyUvs=true;t.__dirtyNormals=true;t.__dirtyTangents=true}if(t.__dirtyVertices||
......
<!DOCTYPE HTML>
<html lang="en">
<head>
<title>three.js - render-to-texture - webgl</title>
<meta charset="utf-8">
<style type="text/css">
body {
color: #ffffff;
font-family:Monospace;
font-size:13px;
text-align:center;
font-weight: bold;
background-color: #000000;
margin: 0px;
overflow: hidden;
}
#info {
position: absolute;
top: 0px; width: 100%;
padding: 5px;
}
a {
color: #ffffff;
}
</style>
</head>
<body>
<div id="container"></div>
<div id="info"><a href="http://github.com/mrdoob/three.js" target="_blank">three.js</a> render-to-texture webgl example</div>
<script type="text/javascript" src="js/Stats.js"></script>
<script type="text/javascript" src="../build/ThreeExtras.js"></script>
<script id="vertex_shader" type="x-shader/x-vertex">
varying vec2 vUv;
void main()
{
vUv = uv;
gl_Position = vec4( position, 1.0 );
}
</script>
<script id="fragment_shader_pass_1" type="x-shader/x-fragment">
varying vec2 vUv;
uniform float time;
void main(void)
{
gl_FragColor = vec4( time, vUv.x, vUv.y, 1.0 );
}
</script>
<script type="text/javascript">
var container, stats;
var cameraRTT, camera, sceneRTT, scene, renderer;
var mouseX = 0, mouseY = 0;
var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;
var rtTexture, material, quad;
init();
setInterval( loop, 1000 / 60 );
function init() {
container = document.getElementById( 'container' );
cameraRTT = new THREE.Camera();
cameraRTT.position.z = 100;
camera = new THREE.Camera( 30, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.z = 100;
camera.updateMatrix();
sceneRTT = new THREE.Scene();
scene = new THREE.Scene();
var light = new THREE.DirectionalLight( 0xffffff );
light.position.x = 0;
light.position.y = 0;
light.position.z = 1;
light.position.normalize();
scene.addLight( light );
rtTexture = new THREE.RenderTarget( 256, 256 );
material = new THREE.MeshShaderMaterial( {
uniforms: { time: { type: "f", value: 0.0 } },
vertex_shader: document.getElementById( 'vertex_shader' ).textContent,
fragment_shader: document.getElementById( 'fragment_shader_pass_1' ).textContent
} );
quad = new THREE.Mesh( new Plane( 2, 2 ), material );
sceneRTT.addObject( quad );
var n = 5,
geometry = new Sphere( 10, 64, 32 ),
material2 = new THREE.MeshLambertMaterial( { color:0xffffff, map: rtTexture } );
//material2 = new THREE.MeshBasicMaterial( { color:0xffffff, map: rtTexture } );
for( var j = 0; j < n; j++ ) {
for( var i = 0; i < n; i++ ) {
mesh = new THREE.Mesh( geometry, material2 );
mesh.position.x = ( i - (n-1)/2 ) * 20;
mesh.position.y = ( j - (n-1)/2 ) * 20;
scene.addObject( mesh );
}
}
renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement );
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '0px';
container.appendChild( stats.domElement );
document.addEventListener( 'mousemove', onDocumentMouseMove, false );
}
function onDocumentMouseMove( event ) {
mouseX = ( event.clientX - windowHalfX );
mouseY = ( event.clientY - windowHalfY );
}
var delta = 0.01;
function loop() {
camera.position.x += ( mouseX - camera.position.x ) * .05;
camera.position.y += ( - mouseY - camera.position.y ) * .05;
// Render to texture
if ( material.uniforms.time.value > 1 || material.uniforms.time.value < 0 ) {
delta *= -1;
}
material.uniforms.time.value += delta;
renderer.render( sceneRTT, cameraRTT, rtTexture );
//renderer.render( sceneRTT, cameraRTT );
// Render to screen
renderer.render( scene, camera );
stats.update();
}
</script>
</body>
</html>
......@@ -908,11 +908,7 @@ THREE.WebGLRenderer = function ( parameters ) {
this.initWebGLObjects( scene );
if ( renderTarget ) {
setRenderTarget( renderTarget );
}
setRenderTarget( renderTarget );
if ( this.autoClear ) {
......@@ -1454,8 +1450,6 @@ THREE.WebGLRenderer = function ( parameters ) {
function setRenderTarget( renderTexture ) {
var framebuffer;
if ( renderTexture && !renderTexture.__webGLFramebuffer ) {
renderTexture.__webGLFramebuffer = _gl.createFramebuffer();
......@@ -1490,7 +1484,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}
framebuffer = renderTexture ? renderTexture.__webGLFramebuffer : null;
var framebuffer = renderTexture ? renderTexture.__webGLFramebuffer : null;
_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册