Browse Source

added culling for triangles off the screen in transformer

iver 7 months ago
parent
commit
19901835b1

BIN
builds/final binaries/librasteriver.so


BIN
builds/final binaries/main.bin


+ 4 - 1
src/RasterIver/kernels/master_kernel.h

@@ -184,8 +184,11 @@ __kernel void raster_kernel(__global Object* objects, __global float* verticies,
             int i7 = (uv_index + triangles[triangle_base + 7]) * 3;\
             int i8 = (uv_index + triangles[triangle_base + 8]) * 3;\
             \
-            float z0 = verticies[i0 + 2];\
             float x0 = verticies[i0 + 0];\
+            \
+            if (x0 == 999999999)continue;\
+            \
+            float z0 = verticies[i0 + 2];\
             float y0 = verticies[i0 + 1];\
             \
             \

+ 24 - 19
src/RasterIver/kernels/transformer.h

@@ -183,25 +183,30 @@ __kernel void transformer_kernel(__global Object* objects, __global float* verti
         y2 = (y2 * object_s_y + object_y) / z2 * horizontal_fov_factor;\
         x2 = (x2 * object_s_x + object_x) / z2 * vertical_fov_factor;\
         \
-        transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + 0] = x0;\
-        transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + 1] = y0;\
-        transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + 2] = z0;\
-        transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + 0] = x1;\
-        transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + 1] = y1;\
-        transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + 2] = z1;\
-        transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + 0] = x2;\
-        transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + 1] = y2;\
-        transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + 2] = z2;\
-        \
-        transformed_normals[(triangles[triangle_base + 0] + transformed_normal_index) * 3 + 0] = n_x0;\
-        transformed_normals[(triangles[triangle_base + 0] + transformed_normal_index) * 3 + 1] = n_y0;\
-        transformed_normals[(triangles[triangle_base + 0] + transformed_normal_index) * 3 + 2] = n_z0;\
-        transformed_normals[(triangles[triangle_base + 1] + transformed_normal_index) * 3 + 0] = n_x1;\
-        transformed_normals[(triangles[triangle_base + 1] + transformed_normal_index) * 3 + 1] = n_y1;\
-        transformed_normals[(triangles[triangle_base + 1] + transformed_normal_index) * 3 + 2] = n_z1;\
-        transformed_normals[(triangles[triangle_base + 2] + transformed_normal_index) * 3 + 0] = n_x2;\
-        transformed_normals[(triangles[triangle_base + 2] + transformed_normal_index) * 3 + 1] = n_y2;\
-        transformed_normals[(triangles[triangle_base + 2] + transformed_normal_index) * 3 + 2] = n_z2;\
+        if ((x0 < 0 && x1 < 0 && x2 < 0) || (y0 < 0 && y1 < 0 && y2 < 0) || (x0 >= width && x1 >= width && x2 >= width) || (y0 >= height && y1 >= height && y2 >= height)){\
+            transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + 0] = 999999999;\
+        }\
+        else{\
+            transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + 0] = x0;\
+            transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + 1] = y0;\
+            transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + 2] = z0;\
+            transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + 0] = x1;\
+            transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + 1] = y1;\
+            transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + 2] = z1;\
+            transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + 0] = x2;\
+            transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + 1] = y2;\
+            transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + 2] = z2;\
+            \
+            transformed_normals[(triangles[triangle_base + 0] + transformed_normal_index) * 3 + 0] = n_x0;\
+            transformed_normals[(triangles[triangle_base + 0] + transformed_normal_index) * 3 + 1] = n_y0;\
+            transformed_normals[(triangles[triangle_base + 0] + transformed_normal_index) * 3 + 2] = n_z0;\
+            transformed_normals[(triangles[triangle_base + 1] + transformed_normal_index) * 3 + 0] = n_x1;\
+            transformed_normals[(triangles[triangle_base + 1] + transformed_normal_index) * 3 + 1] = n_y1;\
+            transformed_normals[(triangles[triangle_base + 1] + transformed_normal_index) * 3 + 2] = n_z1;\
+            transformed_normals[(triangles[triangle_base + 2] + transformed_normal_index) * 3 + 0] = n_x2;\
+            transformed_normals[(triangles[triangle_base + 2] + transformed_normal_index) * 3 + 1] = n_y2;\
+            transformed_normals[(triangles[triangle_base + 2] + transformed_normal_index) * 3 + 2] = n_z2;\
+        }\
     }\
 }\n";
 

+ 4 - 10
src/RasterIver/source code/rasteriver.c

@@ -1237,16 +1237,6 @@ RI_result RI_Tick(){
                             largest_y = fmax(largest_y, ri_height); 
                             
                             if (id_x >= smallest_x && id_x <= largest_x && id_y >= smallest_y && id_y <= largest_y){ 
-                                int intersections = 0; 
-                                
-                                intersections += is_intersecting(id_x, id_y, 10000, 100000, x0, y0, x1, y1); 
-                                intersections += is_intersecting(id_x, id_y, 10000, 100000, x1, y1, x2, y2); 
-                                intersections += is_intersecting(id_x, id_y, 10000, 100000, x2, y2, x0, y0); 
-                                
-                                if (intersections % 2 == 0){ 
-                                    continue; 
-                                } 
-                                
                                 float denominator = (y1 - y2) * (x0 - x2) + (x2 - x1) * (y0 - y2); 
                                 
                                 if (!(material_flags & RI_MATERIAL_DOUBLE_SIDED) && denominator >= 0) { 
@@ -1256,6 +1246,10 @@ RI_result RI_Tick(){
                                 w1 = ((y2 - y0) * (id_x - x0) + (x0 - x2) * (id_y - y0)) / denominator; 
                                 w2 = 1.0 - w0 - w1; 
                                 
+                                if (!(w0 > 0 && w1 > 0 && w2 > 0)){
+                                    continue;
+                                }
+
                                 if (material_flags & RI_MATERIAL_WIREFRAME && (w0 >= wireframe_width && w1 >= wireframe_width && w2 >= wireframe_width)){
                                     continue;
                                 }

+ 1 - 1
src/launch program/main.c

@@ -23,7 +23,7 @@ int main(){
     RI_SetFlag(RI_FLAG_SHOW_INFO, 0);
     RI_SetFlag(RI_FLAG_USE_CPU, 0);
 
-    RI_SetValue(RI_VALUE_WIREFRAME_SCALE, 0.02);
+    RI_SetValue(RI_VALUE_WIREFRAME_SCALE, 0.01);
 
     char prefix[50] = "[RASTERIVER IS AMAZING] ";
     RI_SetDebugPrefix(prefix);