@@ -7,8 +7,6 @@ var grobjects = grobjects || []
77var Trunk = undefined
88var m4 = m4 || twgl . m4
99var v3 = v3 || twgl . v3
10- //var SpinningCube = undefined;
11-
1210
1311// Helper functions
1412
@@ -110,16 +108,11 @@ function printNormal(num, numCir, normals){
110108( function ( ) {
111109 "use strict"
112110
113- var shaderProgram = undefined
114- var buffers = undefined
115- var triangles = [ ]
116- var vertexPosRaw = [ ]
117- var vertexColorsRaw = [ ]
118- var vertexNormalRaw = [ ]
119-
120111 // constructor for Trunk
121112 Trunk = function Trunk ( name , position , size , color , radius , numCircle ,
122113 height ) {
114+ this . shaderProgram = undefined
115+ this . buffer = undefined
123116 this . name = name
124117 this . position = position || [ 0 , 0 , 0 ]
125118 this . size = size || 1.0
@@ -131,33 +124,35 @@ function printNormal(num, numCir, normals){
131124
132125 // One of the object necessary function
133126 Trunk . prototype . init = function ( drawingState ) {
127+ var triangles = [ ]
128+ var vertexPosRaw = [ ]
129+ var vertexColorsRaw = [ ]
130+ var vertexNormalRaw = [ ]
131+ this . buffer = null
132+
134133 // Get the gl content
135134 var gl = drawingState . gl
136135
137136 // Share the shader with all trunks
138- if ( ! shaderProgram ) {
139- shaderProgram = twgl . createProgramInfo ( gl , [ "trunk-vs" , "trunk-fs" ] ) ;
137+ this . shaderProgram = twgl . createProgramInfo ( gl , [ "trunk-vs" , "trunk-fs" ] ) ;
138+
139+ // Add triangles
140+ addCylinder ( this . position , this . radius , this . numCircle ,
141+ this . color , this . height , triangles )
142+
143+ // Convert triangles to webgl array info
144+ var results = triangleToVertex ( triangles )
145+ vertexPosRaw . push ( ...results [ 0 ] )
146+ vertexColorsRaw . push ( ...results [ 1 ] )
147+ vertexNormalRaw . push ( ...results [ 2 ] )
148+
149+ var arrays = {
150+ vpos : { numComponents :3 , data : new Float32Array ( vertexPosRaw ) } ,
151+ vnormal : { numComponents :3 , data : new Float32Array ( vertexNormalRaw ) } ,
152+ vcolor : { numComponents :3 , data : new Float32Array ( vertexColorsRaw ) }
140153 }
141- if ( ! buffers ) {
142-
143- // Add triangles
144- addCylinder ( this . position , this . radius , this . numCircle ,
145- this . color , this . height , triangles )
146154
147- // Convert triangles to webgl array info
148- var results = triangleToVertex ( triangles )
149- vertexPosRaw . push ( ...results [ 0 ] )
150- vertexColorsRaw . push ( ...results [ 1 ] )
151- vertexNormalRaw . push ( ...results [ 2 ] )
152-
153- var arrays = {
154- vpos : { numComponents : 3 , data : new Float32Array ( vertexPosRaw ) } ,
155- vnormal : { numComponents :3 , data : new Float32Array ( vertexNormalRaw ) } ,
156- vcolor : { numComponents : 3 , data : new Float32Array ( vertexColorsRaw ) }
157- }
158-
159- buffers = twgl . createBufferInfoFromArrays ( drawingState . gl , arrays )
160- }
155+ this . buffer = twgl . createBufferInfoFromArrays ( drawingState . gl , arrays )
161156 }
162157
163158 Trunk . prototype . draw = function ( drawingState ) {
@@ -166,16 +161,15 @@ function printNormal(num, numCir, normals){
166161 twgl . m4 . setTranslation ( modelM , this . position , modelM )
167162
168163 var gl = drawingState . gl
169- gl . useProgram ( shaderProgram . program )
170- twgl . setBuffersAndAttributes ( gl , shaderProgram , buffers )
171- twgl . setUniforms ( shaderProgram , {
164+ gl . useProgram ( this . shaderProgram . program )
165+ twgl . setBuffersAndAttributes ( gl , this . shaderProgram , this . buffer )
166+ twgl . setUniforms ( this . shaderProgram , {
172167 view :drawingState . view ,
173168 proj :drawingState . proj ,
174169 lightdir :drawingState . sunDirection ,
175- //lightdir: [0,1,0],
176170 cubecolor :this . color ,
177171 model : modelM } )
178- twgl . drawBufferInfo ( gl , gl . TRIANGLES , buffers )
172+ twgl . drawBufferInfo ( gl , gl . TRIANGLES , this . buffer )
179173 }
180174 Trunk . prototype . center = function ( drawingState ) {
181175 return this . position
0 commit comments