@@ -45,7 +45,7 @@ class ChunkMesher {
4545 let xd , toxX , toxY
4646 if (
4747 this . blocksTex [ block . name ] !== undefined ||
48- this . blocksTex [ String ( block . stateId ) ] !== undefined
48+ this . blocksTex [ String ( block . stateId ) ] !== undefined
4949 ) {
5050 if ( this . blocksTex [ String ( block . stateId ) ] !== undefined ) {
5151 xd = this . blocksTex [ String ( block . stateId ) ]
@@ -56,10 +56,7 @@ class ChunkMesher {
5656 toxX = this . blocksMapping [ xd . all ] . x
5757 toxY = this . blocksMapping [ xd . all ] . y
5858 } else if ( xd . side !== undefined ) {
59- const mapka = {
60- py : 'top' ,
61- ny : 'bottom'
62- }
59+ const mapka = { py : 'top' , ny : 'bottom' }
6360 if ( mapka [ type ] !== undefined ) {
6461 toxX = this . blocksMapping [ xd [ mapka [ type ] ] ] . x
6562 toxY = this . blocksMapping [ xd [ mapka [ type ] ] ] . y
@@ -92,107 +89,40 @@ class ChunkMesher {
9289 const y1 = 1 - q * toxY - q + b
9390 const x2 = x1 + q - 2 * b
9491 const y2 = y1 + q - 2 * b
95- return [
96- [ x1 , y1 ] ,
97- [ x1 , y2 ] ,
98- [ x2 , y1 ] ,
99- [ x2 , y2 ]
100- ]
92+ return [ x1 , y1 , x2 , y1 , x1 , y2 , x1 , y2 , x2 , y1 , x2 , y2 ]
10193 }
10294
10395 genBlockFace ( type , block , pos ) {
104- let uv = this . getUvForFace ( block , type )
105- uv = [
106- ...uv [ 0 ] ,
107- ...uv [ 2 ] ,
108- ...uv [ 1 ] ,
109- ...uv [ 1 ] ,
110- ...uv [ 2 ] ,
111- ...uv [ 3 ]
112- ]
96+ const uv = this . getUvForFace ( block , type )
11397 const norm = [ ]
11498 for ( let i = 0 ; i < 6 ; i ++ ) {
11599 norm . push ( ...this . neighbours [ type ] )
116100 }
117- switch ( type ) {
118- case 'pz' :
119- return {
120- pos : [
121- - 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
122- 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
123- - 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
124- - 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
125- 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
126- 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ]
127- ] ,
128- norm,
129- uv
130- }
131- case 'nx' :
132- return {
133- pos : [
134- 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
135- 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
136- 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
137- 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
138- 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
139- 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ]
140- ] ,
141- norm,
142- uv
143- }
144- case 'nz' :
145- return {
146- pos : [
147- 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
148- - 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
149- 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
150- 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
151- - 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
152- - 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ]
153- ] ,
154- norm,
155- uv
156- }
157- case 'px' :
158- return {
159- pos : [
160- - 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
161- - 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
162- - 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
163- - 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
164- - 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
165- - 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ]
166- ] ,
167- norm,
168- uv
169- }
170- case 'py' :
171- return {
172- pos : [
173- 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
174- - 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
175- 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
176- 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
177- - 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
178- - 0.5 + pos [ 0 ] , 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ]
179- ] ,
180- norm,
181- uv
182- }
183- case 'ny' :
184- return {
185- pos : [
186- 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
187- - 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
188- 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
189- 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ] ,
190- - 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , 0.5 + pos [ 2 ] ,
191- - 0.5 + pos [ 0 ] , - 0.5 + pos [ 1 ] , - 0.5 + pos [ 2 ]
192- ] ,
193- norm,
194- uv
195- }
101+ const ps = ( num ) => {
102+ const pt = [
103+ [ - 0.5 , - 0.5 , 0.5 ] ,
104+ [ 0.5 , - 0.5 , 0.5 ] ,
105+ [ - 0.5 , 0.5 , 0.5 ] ,
106+ [ 0.5 , 0.5 , 0.5 ] ,
107+ [ 0.5 , - 0.5 , - 0.5 ] ,
108+ [ 0.5 , 0.5 , - 0.5 ] ,
109+ [ - 0.5 , - 0.5 , - 0.5 ] ,
110+ [ - 0.5 , 0.5 , - 0.5 ]
111+ ]
112+ return [ pt [ num ] [ 0 ] + pos [ 0 ] , pt [ num ] [ 1 ] + pos [ 1 ] , pt [ num ] [ 2 ] + pos [ 2 ] ]
113+ }
114+ const px = ( {
115+ pz : [ 0 , 1 , 2 , 3 ] ,
116+ nx : [ 1 , 4 , 3 , 5 ] ,
117+ nz : [ 4 , 6 , 5 , 7 ] ,
118+ px : [ 6 , 0 , 7 , 2 ] ,
119+ py : [ 5 , 7 , 3 , 2 ] ,
120+ ny : [ 1 , 0 , 4 , 6 ]
121+ } ) [ type ]
122+ return {
123+ pos : [ ...ps ( px [ 0 ] ) , ...ps ( px [ 1 ] ) , ...ps ( px [ 2 ] ) , ...ps ( px [ 2 ] ) , ...ps ( px [ 1 ] ) , ...ps ( px [ 3 ] ) ] ,
124+ norm,
125+ uv
196126 }
197127 }
198128
@@ -224,131 +154,64 @@ class ChunkMesher {
224154 }
225155 }
226156 }
227- let col1 = this . aoColor ( 0 )
228- let col2 = this . aoColor ( 0 )
229- let col3 = this . aoColor ( 0 )
230- let col4 = this . aoColor ( 0 )
231- if ( type === 'py' ) {
232- col1 = this . aoColor (
233- loaded [ '1:1:-1' ] + loaded [ '0:1:-1' ] + loaded [ '1:1:0' ]
234- )
235- col2 = this . aoColor (
236- loaded [ '1:1:1' ] + loaded [ '0:1:1' ] + loaded [ '1:1:0' ]
237- )
238- col3 = this . aoColor (
239- loaded [ '-1:1:-1' ] + loaded [ '0:1:-1' ] + loaded [ '-1:1:0' ]
240- )
241- col4 = this . aoColor (
242- loaded [ '-1:1:1' ] + loaded [ '0:1:1' ] + loaded [ '-1:1:0' ]
243- )
244- }
245- if ( type === 'ny' ) {
246- col2 = this . aoColor (
247- loaded [ '1:-1:-1' ] + loaded [ '0:-1:-1' ] + loaded [ '1:-1:0' ]
248- )
249- col1 = this . aoColor (
250- loaded [ '1:-1:1' ] + loaded [ '0:-1:1' ] + loaded [ '1:-1:0' ]
251- )
252- col4 = this . aoColor (
253- loaded [ '-1:-1:-1' ] + loaded [ '0:-1:-1' ] + loaded [ '-1:-1:0' ]
254- )
255- col3 = this . aoColor (
256- loaded [ '-1:-1:1' ] + loaded [ '0:-1:1' ] + loaded [ '-1:-1:0' ]
257- )
258- }
259- if ( type === 'px' ) {
260- col1 = this . aoColor (
261- loaded [ '-1:-1:0' ] + loaded [ '-1:-1:-1' ] + loaded [ '-1:0:-1' ]
262- )
263- col2 = this . aoColor (
264- loaded [ '-1:1:0' ] + loaded [ '-1:1:-1' ] + loaded [ '-1:0:-1' ]
265- )
266- col3 = this . aoColor (
267- loaded [ '-1:-1:0' ] + loaded [ '-1:-1:1' ] + loaded [ '-1:0:1' ]
268- )
269- col4 = this . aoColor (
270- loaded [ '-1:1:0' ] + loaded [ '-1:1:1' ] + loaded [ '-1:0:1' ]
271- )
272- }
273- if ( type === 'nx' ) {
274- col3 = this . aoColor (
275- loaded [ '1:-1:0' ] + loaded [ '1:-1:-1' ] + loaded [ '1:0:-1' ]
276- )
277- col4 = this . aoColor (
278- loaded [ '1:1:0' ] + loaded [ '1:1:-1' ] + loaded [ '1:0:-1' ]
279- )
280- col1 = this . aoColor (
281- loaded [ '1:-1:0' ] + loaded [ '1:-1:1' ] + loaded [ '1:0:1' ]
282- )
283- col2 = this . aoColor (
284- loaded [ '1:1:0' ] + loaded [ '1:1:1' ] + loaded [ '1:0:1' ]
285- )
286- }
287- if ( type === 'pz' ) {
288- col1 = this . aoColor (
289- loaded [ '0:-1:1' ] + loaded [ '-1:-1:1' ] + loaded [ '-1:0:1' ]
290- )
291- col2 = this . aoColor (
292- loaded [ '0:1:1' ] + loaded [ '-1:1:1' ] + loaded [ '-1:0:1' ]
293- )
294- col3 = this . aoColor (
295- loaded [ '0:-1:1' ] + loaded [ '1:-1:1' ] + loaded [ '1:0:1' ]
296- )
297- col4 = this . aoColor (
298- loaded [ '0:1:1' ] + loaded [ '1:1:1' ] + loaded [ '1:0:1' ]
299- )
300- }
301- if ( type === 'nz' ) {
302- col3 = this . aoColor (
303- loaded [ '0:-1:-1' ] + loaded [ '-1:-1:-1' ] + loaded [ '-1:0:-1' ]
304- )
305- col4 = this . aoColor (
306- loaded [ '0:1:-1' ] + loaded [ '-1:1:-1' ] + loaded [ '-1:0:-1' ]
307- )
308- col1 = this . aoColor (
309- loaded [ '0:-1:-1' ] + loaded [ '1:-1:-1' ] + loaded [ '1:0:-1' ]
310- )
311- col2 = this . aoColor (
312- loaded [ '0:1:-1' ] + loaded [ '1:1:-1' ] + loaded [ '1:0:-1' ]
313- )
314- }
157+ const col = ( {
158+ py : [
159+ this . aoColor ( loaded [ '1:1:-1' ] + loaded [ '0:1:-1' ] + loaded [ '1:1:0' ] ) ,
160+ this . aoColor ( loaded [ '1:1:1' ] + loaded [ '0:1:1' ] + loaded [ '1:1:0' ] ) ,
161+ this . aoColor ( loaded [ '-1:1:-1' ] + loaded [ '0:1:-1' ] + loaded [ '-1:1:0' ] ) ,
162+ this . aoColor ( loaded [ '-1:1:1' ] + loaded [ '0:1:1' ] + loaded [ '-1:1:0' ] )
163+ ] ,
164+ ny : [
165+ this . aoColor ( loaded [ '1:-1:-1' ] + loaded [ '0:-1:-1' ] + loaded [ '1:-1:0' ] ) ,
166+ this . aoColor ( loaded [ '1:-1:1' ] + loaded [ '0:-1:1' ] + loaded [ '1:-1:0' ] ) ,
167+ this . aoColor ( loaded [ '-1:-1:1' ] + loaded [ '0:-1:1' ] + loaded [ '-1:-1:0' ] ) ,
168+ this . aoColor ( loaded [ '-1:-1:-1' ] + loaded [ '0:-1:-1' ] + loaded [ '-1:-1:0' ] )
169+ ] ,
170+ px : [
171+ this . aoColor ( loaded [ '-1:-1:0' ] + loaded [ '-1:-1:-1' ] + loaded [ '-1:0:-1' ] ) ,
172+ this . aoColor ( loaded [ '-1:1:0' ] + loaded [ '-1:1:-1' ] + loaded [ '-1:0:-1' ] ) ,
173+ this . aoColor ( loaded [ '-1:-1:0' ] + loaded [ '-1:-1:1' ] + loaded [ '-1:0:1' ] ) ,
174+ this . aoColor ( loaded [ '-1:1:0' ] + loaded [ '-1:1:1' ] + loaded [ '-1:0:1' ] )
175+ ] ,
176+ nx : [
177+ this . aoColor ( loaded [ '1:-1:0' ] + loaded [ '1:-1:1' ] + loaded [ '1:0:1' ] ) ,
178+ this . aoColor ( loaded [ '1:1:0' ] + loaded [ '1:1:1' ] + loaded [ '1:0:1' ] ) ,
179+ this . aoColor ( loaded [ '1:-1:0' ] + loaded [ '1:-1:-1' ] + loaded [ '1:0:-1' ] ) ,
180+ this . aoColor ( loaded [ '1:1:0' ] + loaded [ '1:1:-1' ] + loaded [ '1:0:-1' ] )
181+ ] ,
182+ pz : [
183+ this . aoColor ( loaded [ '0:-1:1' ] + loaded [ '-1:-1:1' ] + loaded [ '-1:0:1' ] ) ,
184+ this . aoColor ( loaded [ '0:1:1' ] + loaded [ '-1:1:1' ] + loaded [ '-1:0:1' ] ) ,
185+ this . aoColor ( loaded [ '0:-1:1' ] + loaded [ '1:-1:1' ] + loaded [ '1:0:1' ] ) ,
186+ this . aoColor ( loaded [ '0:1:1' ] + loaded [ '1:1:1' ] + loaded [ '1:0:1' ] )
187+ ] ,
188+ nz : [
189+ this . aoColor ( loaded [ '0:-1:-1' ] + loaded [ '1:-1:-1' ] + loaded [ '1:0:-1' ] ) ,
190+ this . aoColor ( loaded [ '0:1:-1' ] + loaded [ '1:1:-1' ] + loaded [ '1:0:-1' ] ) ,
191+ this . aoColor ( loaded [ '0:-1:-1' ] + loaded [ '-1:-1:-1' ] + loaded [ '-1:0:-1' ] ) ,
192+ this . aoColor ( loaded [ '0:1:-1' ] + loaded [ '-1:1:-1' ] + loaded [ '-1:0:-1' ] )
193+ ]
194+ } ) [ type ]
315195 const ile = 4
316196 if ( block . name === 'water' ) {
317- col1 [ 0 ] /= ile
318- col1 [ 1 ] /= ile
319- col2 [ 0 ] /= ile
320- col2 [ 1 ] /= ile
321- col3 [ 0 ] /= ile
322- col3 [ 1 ] /= ile
323- col4 [ 0 ] /= ile
324- col4 [ 1 ] /= ile
325- } else if ( block . name === 'grass_block' && type === 'py' ) {
326- col1 [ 0 ] /= ile
327- col1 [ 2 ] /= ile
328- col2 [ 0 ] /= ile
329- col2 [ 2 ] /= ile
330- col3 [ 0 ] /= ile
331- col3 [ 2 ] /= ile
332- col4 [ 0 ] /= ile
333- col4 [ 2 ] /= ile
334- } else if ( block . name . includes ( 'leaves' ) ) {
335- col1 [ 0 ] /= ile
336- col1 [ 2 ] /= ile
337- col2 [ 0 ] /= ile
338- col2 [ 2 ] /= ile
339- col3 [ 0 ] /= ile
340- col3 [ 2 ] /= ile
341- col4 [ 0 ] /= ile
342- col4 [ 2 ] /= ile
197+ for ( let i = 0 ; i < 4 ; i ++ ) {
198+ col [ i ] [ 0 ] /= ile
199+ col [ i ] [ 1 ] /= ile
200+ }
201+ } else if ( ( block . name === 'grass_block' && type === 'py' ) || block . name . includes ( 'leaves' ) ) {
202+ for ( let i = 0 ; i < 4 ; i ++ ) {
203+ col [ i ] [ 0 ] /= ile
204+ col [ i ] [ 2 ] /= ile
205+ }
343206 }
344207
345208 faceVertex . color = [
346- ...col1 ,
347- ...col3 ,
348- ...col2 ,
349- ...col2 ,
350- ...col3 ,
351- ...col4
209+ ...col [ 0 ] ,
210+ ...col [ 2 ] ,
211+ ...col [ 1 ] ,
212+ ...col [ 1 ] ,
213+ ...col [ 2 ] ,
214+ ...col [ 3 ]
352215 ]
353216 }
354217
@@ -407,16 +270,9 @@ class ChunkMesher {
407270 if ( mainBlock . boundingBox === 'block' ) {
408271 for ( const side in neighbours ) {
409272 const nBlock = neighbours [ side ]
410- if ( mainBlock . transparent ) {
411- if ( nBlock . boundingBox !== 'block' ) {
412- this . addFace ( tVertexBuffer , VertexBuffer , side , pos )
413- }
414- } else {
415- if (
416- nBlock . boundingBox !== 'block' || nBlock . transparent
417- ) {
418- this . addFace ( tVertexBuffer , VertexBuffer , side , pos )
419- }
273+ if ( ( mainBlock . transparent && nBlock . boundingBox !== 'block' ) ||
274+ ( nBlock . boundingBox !== 'block' || nBlock . transparent ) ) {
275+ this . addFace ( tVertexBuffer , VertexBuffer , side , pos )
420276 }
421277 }
422278 } else if ( this . customRender [ mainBlock . name ] ) {
0 commit comments