Browse Source

fixed spelling errors in kernel

IverMartinson 7 months ago
parent
commit
cef850d108
1 changed files with 33 additions and 0 deletions
  1. 33 0
      src/RasterIver/kernels/master_kernel.h

+ 33 - 0
src/RasterIver/kernels/master_kernel.h

@@ -75,6 +75,9 @@ __kernel void raster_kernel(__global float* objects, __global float* verticies,
     int id_x = get_global_id(0) - width / 2; \
     int id_x = get_global_id(0) - width / 2; \
     int id_y = get_global_id(1) - height / 2; \
     int id_y = get_global_id(1) - height / 2; \
     \
     \
+    float vertical_fov_factor = height / tan(0.5 * fov);\
+    float horizontal_fov_factor = width / tan(0.5 * fov);\
+    \
     float z_pixel = INFINITY; \
     float z_pixel = INFINITY; \
     uint frame_pixel = 0x22222222; \
     uint frame_pixel = 0x22222222; \
     \
     \
@@ -137,6 +140,26 @@ __kernel void raster_kernel(__global float* objects, __global float* verticies,
             float x2 = verticies[i2 + 0];\
             float x2 = verticies[i2 + 0];\
             float y2 = verticies[i2 + 1];\
             float y2 = verticies[i2 + 1];\
             \
             \
+            if (object_r_w <= -9999999){\
+                rotate_euler(&x0, &y0, &z0, object_r_x, object_r_y, object_r_z);\
+                rotate_euler(&x1, &y1, &z1, object_r_x, object_r_y, object_r_z);\
+                rotate_euler(&x2, &y2, &z2, object_r_x, object_r_y, object_r_z);\
+            }\
+            else{\
+                rotate_euler(&x0, &y0, &z0, object_r_x, object_r_y, object_r_z);\
+                rotate_euler(&x1, &y1, &z1, object_r_x, object_r_y, object_r_z);\
+                rotate_euler(&x2, &y2, &z2, object_r_x, object_r_y, object_r_z);\
+            }\
+            \
+            z0 = (z0 * object_s_z + object_z);\
+            x0 = (x0 * object_s_x + object_x) / z0 * horizontal_fov_factor;\
+            y0 = (y0 * object_s_y + object_y) / z0 * vertical_fov_factor;\
+            z1 = (z1 * object_s_z + object_z);\
+            x1 = (x1 * object_s_x + object_x) / z1 * horizontal_fov_factor;\
+            y1 = (y1 * object_s_y + object_y) / z1 * vertical_fov_factor;\
+            z2 = (z2 * object_s_z + object_z);\
+            y2 = (y2 * object_s_y + object_y) / z2 * horizontal_fov_factor;\
+            x2 = (x2 * object_s_x + object_x) / z2 * vertical_fov_factor;\
             \
             \
             if (i3 < 0 || i4 < 0 || i5 < 0){\
             if (i3 < 0 || i4 < 0 || i5 < 0){\
                 has_normals = 0;\
                 has_normals = 0;\
@@ -225,6 +248,16 @@ __kernel void raster_kernel(__global float* objects, __global float* verticies,
                     float u_y2 = uvs[i8 + 1];\
                     float u_y2 = uvs[i8 + 1];\
                     float u_z2 = uvs[i8 + 2];\
                     float u_z2 = uvs[i8 + 2];\
                     \
                     \
+                    if (object_r_w <= -9999999){\
+                        rotate_euler(&n_x0, &n_y0, &n_z0, object_r_x, object_r_y, object_r_z);\
+                        rotate_euler(&n_x1, &n_y1, &n_z1, object_r_x, object_r_y, object_r_z);\
+                        rotate_euler(&n_x2, &n_y2, &n_z2, object_r_x, object_r_y, object_r_z);\
+                    }\
+                    else{\
+                        rotate_euler(&n_x0, &n_y0, &n_z0, object_r_x, object_r_y, object_r_z);\
+                        rotate_euler(&n_x1, &n_y1, &n_z1, object_r_x, object_r_y, object_r_z);\
+                        rotate_euler(&n_x2, &n_y2, &n_z2, object_r_x, object_r_y, object_r_z);\
+                    }\
                     \
                     \
                     switch (show_buffer){\
                     switch (show_buffer){\
                         case 0:{\
                         case 0:{\