11package com .github .squi2rel .vp .video ;
22
33import com .github .squi2rel .vp .ClientVideoScreen ;
4- import com .github .squi2rel .vp .VideoRenderer ;
4+ import com .github .squi2rel .vp .ScreenRenderer ;
5+ import com .github .squi2rel .vp .vivecraft .Vivecraft ;
56import com .mojang .blaze3d .systems .RenderSystem ;
67import net .minecraft .client .gl .GlUsage ;
78import net .minecraft .client .gl .VertexBuffer ;
89import net .minecraft .client .render .*;
910import net .minecraft .client .util .math .MatrixStack ;
11+ import net .minecraft .util .math .MathHelper ;
12+ import org .joml .Quaternionf ;
1013import org .joml .Vector3f ;
1114
1215import static com .github .squi2rel .vp .VideoPlayerClient .config ;
1316
1417public class Degree360Player extends VideoPlayer implements MetaListener {
18+ private static final Quaternionf tmp = new Quaternionf ();
1519 protected float [] vertices ;
1620 protected int vertexCount ;
1721 protected VertexBuffer buffer ;
1822 protected boolean dirty = true ;
1923 protected int old ;
2024 protected float x , y , z ;
25+ protected int rot ;
2126 protected boolean skybox = false ;
2227
2328 public Degree360Player (ClientVideoScreen screen , Vector3f p1 , Vector3f p2 , Vector3f p3 , Vector3f p4 ) {
@@ -33,14 +38,15 @@ public synchronized void init() {
3338 @ Override
3439 public void draw (MatrixStack matrices , VertexConsumerProvider .Immediate immediate , ClientVideoScreen s ) {
3540 super .draw (matrices , immediate , s );
41+ if (vertices == null ) return ;
3642 matrices .push ();
37- VideoRenderer .rotateMatrix (matrices );
43+ ScreenRenderer .rotateMatrix (matrices );
3844 if (skybox ) {
39- VideoRenderer .skybox = true ;
45+ ScreenRenderer .skybox = true ;
4046 } else {
41- matrices .translate (x - VideoRenderer .cameraX , y - VideoRenderer .cameraY , z - VideoRenderer .cameraZ );
47+ matrices .translate (x - ScreenRenderer .cameraX , y - ScreenRenderer .cameraY , z - ScreenRenderer .cameraZ );
4248 }
43- if (vertices == null ) return ;
49+ if (rot != 0 ) matrices . multiply ( tmp . rotationY (( float ) Math . toRadians ( rot ))) ;
4450 int gray = (int ) (config .brightness / 100.0 * 255 );
4551 if (old != gray ) {
4652 dirty = true ;
@@ -57,21 +63,27 @@ public void draw(MatrixStack matrices, VertexConsumerProvider.Immediate immediat
5763 buffer .upload (bufferBuilder .end ());
5864 dirty = false ;
5965 }
60- VideoRenderer .drawTriangles (getTextureId (), () -> buffer .draw (matrices .peek ().getPositionMatrix (), RenderSystem .getProjectionMatrix (), RenderSystem .getShader ()));
66+ if (is3d && Vivecraft .loaded && Vivecraft .isVRActive () && Vivecraft .isRightEye ()) {
67+ matrices .multiply (tmp .rotationY (MathHelper .PI ));
68+ }
69+ ScreenRenderer .drawTriangles (getTextureId (), () -> buffer .draw (matrices .peek ().getPositionMatrix (), RenderSystem .getProjectionMatrix (), RenderSystem .getShader ()));
6170 matrices .pop ();
6271 }
6372
6473 @ Override
6574 public void onMetaChanged () {
75+ super .onMetaChanged ();
6676 x = p1 .x + Float .intBitsToFloat (screen .meta .getOrDefault ("x" , 0 ));
6777 y = p1 .y + Float .intBitsToFloat (screen .meta .getOrDefault ("y" , 0 ));
6878 z = p1 .z + Float .intBitsToFloat (screen .meta .getOrDefault ("z" , 0 ));
6979 vertices = genVertices (
7080 screen .meta .getOrDefault ("radius" , 10 ),
7181 screen .meta .getOrDefault ("lat" , 32 ),
72- screen .meta .getOrDefault ("lon" , 32 )
82+ screen .meta .getOrDefault ("lon" , 32 ),
83+ screen .u1 , screen .u2 , screen .v1 , screen .v2
7384 );
7485 skybox = screen .meta .getOrDefault ("skybox" , 0 ) != 0 ;
86+ rot = screen .meta .getOrDefault ("rot" , 0 );
7587 vertexCount = vertices .length / 5 ;
7688 dirty = true ;
7789 }
@@ -82,7 +94,7 @@ public synchronized void cleanup() {
8294 buffer .close ();
8395 }
8496
85- protected static float [] genVertices (float radius , int latSegments , int lonSegments ) {
97+ protected static float [] genVertices (float radius , int latSegments , int lonSegments , float us , float ue , float vs , float ve ) {
8698 int vertexCount = latSegments * (lonSegments + 1 ) * 2 ;
8799 float [] data = new float [vertexCount * 5 ];
88100
@@ -100,9 +112,9 @@ protected static float[] genVertices(float radius, int latSegments, int lonSegme
100112 float x2 = (float ) (r2 * Math .cos (phi ));
101113 float z1 = (float ) (r1 * Math .sin (phi ));
102114 float z2 = (float ) (r2 * Math .sin (phi ));
103- float u = ( float ) lon / lonSegments ;
104- float v1 = ( float ) lat / latSegments ;
105- float v2 = ( float ) (lat + 1 ) / latSegments ;
115+ float u = MathHelper . lerp (( float ) lon / lonSegments , us , ue ) ;
116+ float v1 = MathHelper . lerp (( float ) lat / latSegments , vs , ve ) ;
117+ float v2 = MathHelper . lerp (( float ) (lat + 1 ) / latSegments , vs , ve ) ;
106118 data [idx ++] = x1 ;
107119 data [idx ++] = y1 ;
108120 data [idx ++] = z1 ;
0 commit comments