1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="UTF-8 ">
5+ < meta name ="viewport "
6+ content ="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0 ">
7+ < title > Hilo3d Uniform Buffer Object</ title >
8+ < link rel ="stylesheet " type ="text/css " href ="./example.css ">
9+ </ head >
10+ < body >
11+ < div id ="container "> </ div >
12+ < script src ="../build/Hilo3d.js "> </ script >
13+ < script src ="./js/stats.js "> </ script >
14+ < script src ="./js/OrbitControls.js "> </ script >
15+ < script src ="./js/init.js "> </ script >
16+ < script >
17+ renderer . clearColor = new Hilo3d . Color ( 0 , 0 , 0 , 1 ) ;
18+ renderer . preferWebGL2 = true ;
19+ var container = new Hilo3d . Node ( ) ;
20+ var geometry = new Hilo3d . SphereGeometry ( {
21+ radius : 1 ,
22+ heightSegments : 32 ,
23+ widthSegments : 64 ,
24+ } )
25+ var modelUniformBuffer = new Hilo3d . UniformBuffer ( new Float32Array ( 16 ) ) ;
26+ var materialUniformBuffer = new Hilo3d . UniformBuffer ( new Float32Array ( 8 ) ) ;
27+
28+ var mesh = new Hilo3d . Mesh ( {
29+ rotationX :90 ,
30+ time :0 ,
31+ geometry : geometry ,
32+ material : new Hilo3d . ShaderMaterial ( {
33+ shaderCacheId : "UVAnimation" ,
34+ getCustomRenderOption ( option ) {
35+ option . CUSTOM_OPTION = 1 ;
36+ return option ;
37+ } ,
38+ needBasicUnifroms : false ,
39+ needBasicAttributes : false ,
40+ diffuse : new Hilo3d . LazyTexture ( {
41+ src : '//gw.alicdn.com/tfs/TB1Q8dQSVXXXXciXVXXXXXXXXXX-512-512.jpg'
42+ } ) ,
43+ mixTexture :new Hilo3d . LazyTexture ( {
44+ src : '//gw.alicdn.com/tfs/TB1T1wEizTpK1RjSZKPXXa3UpXa-512-512.png'
45+ } ) ,
46+ uniforms :{
47+ u_diffuse :'DIFFUSE' ,
48+ u_mixTexture :{
49+ get ( mesh , material , programInfo ) {
50+ return Hilo3d . semantic . handlerTexture ( material . mixTexture , programInfo . textureIndex ) ;
51+ }
52+ } ,
53+ } ,
54+ uniformBlocks : {
55+ MaterialBlock : materialUniformBuffer ,
56+ ModelBlock : modelUniformBuffer ,
57+ } ,
58+ attributes :{
59+ a_position : 'POSITION' ,
60+ a_texcoord0 :'TEXCOORD_0'
61+ } ,
62+ fs :`
63+ precision HILO_MAX_FRAGMENT_PRECISION float;
64+
65+ varying vec2 v_texcoord0;
66+
67+ uniform sampler2D u_diffuse;
68+ uniform sampler2D u_mixTexture;
69+
70+ layout(std140) uniform MaterialBlock {
71+ vec4 color;
72+ float u_time;
73+ };
74+
75+ void main(void) {
76+ float uOffset = sin(u_time * 0.0005);
77+ float vOffset = cos(u_time * 0.0003);
78+ vec4 diffuse = texture2D(u_diffuse, vec2(v_texcoord0.x + uOffset, v_texcoord0.y + vOffset));
79+ vec4 mixTexture = texture2D(u_mixTexture, v_texcoord0);
80+ gl_FragColor = mix(vec4(diffuse.r, diffuse.g, color.b, 1), mixTexture, 0.05);
81+ }
82+ ` ,
83+ vs :`
84+ precision HILO_MAX_VERTEX_PRECISION float;
85+
86+ attribute vec3 a_position;
87+ attribute vec2 a_texcoord0;
88+
89+ layout(std140) uniform ModelBlock {
90+ uniform mat4 u_modelViewProjectionMatrix;
91+ };
92+
93+ varying vec2 v_texcoord0;
94+
95+ void main(void) {
96+ vec4 pos = vec4(a_position, 1.0);
97+ gl_Position = u_modelViewProjectionMatrix * pos;
98+ v_texcoord0 = a_texcoord0;
99+ }
100+ `
101+ } ) ,
102+ onUpdate ( dt ) {
103+ this . time += dt ;
104+ Hilo3d . semantic . init ( renderer , { } , stage . camera , renderer . lightManager , renderer . fog ) ;
105+
106+ materialUniformBuffer . data . set ( [ 1 , 0 , Math . sin ( this . time * 0.001 ) * 0.5 + 0.5 , 1 ] , 0 ) ;
107+ materialUniformBuffer . data [ 4 ] = this . time ;
108+ materialUniformBuffer . isDirty = true ;
109+
110+ modelUniformBuffer . data . set ( Hilo3d . semantic . MODELVIEWPROJECTION . get ( this ) , 0 ) ;
111+ modelUniformBuffer . isDirty = true ;
112+ }
113+ } ) ;
114+
115+ container . addChild ( mesh ) ;
116+ stage . addChild ( container ) ;
117+
118+ // stage.renderer.initContext();
119+ // var material = mesh.material;
120+
121+ // // 编译
122+ // var shader = Hilo3d.Shader.getCustomShader(material.vs, material.fs, '', material.shaderCacheId);
123+ // shader.alwaysUse = true;
124+ // var program = Hilo3d.Program.getProgram(, Hilo3d.Shader.renderer.state);
125+ // program.alwaysUse = true;
126+
127+ // // 删除
128+ // var shader = Hilo3d.Shader.cache.get(material.shaderCacheId);
129+ // var program = Hilo3d.Program.cache.get(shader.id);
130+ // shader.destroy();
131+ // program.destroy();
132+ </ script >
133+ </ body >
134+ </ html >
0 commit comments