Auto sizing bounding box

Need to port the sizing code to be rust based, reasonable amount of work
This commit is contained in:
John Hunter
2023-02-13 01:42:54 +00:00
parent ea771018be
commit ec9785feca
3 changed files with 33 additions and 20 deletions
+5 -5
View File
@@ -49,17 +49,17 @@ vec3 shading(vec3 normal)
vec3 getNormal(vec3 p,float dens){ vec3 getNormal(vec3 p,float dens){
vec3 n; vec3 n;
n.x=scene(vec3(p.x+EPSILON,p.y,p.z),false).x; n.x=scene(vec3(p.x+EPSILON,p.y,p.z),false);
n.y=scene(vec3(p.x,p.y+EPSILON,p.z),false).x; n.y=scene(vec3(p.x,p.y+EPSILON,p.z),false);
n.z=scene(vec3(p.x,p.y,p.z+EPSILON),false).x; n.z=scene(vec3(p.x,p.y,p.z+EPSILON),false);
return normalize(n-(scene(p,false).x)); return normalize(n-(scene(p,false)));
} }
vec2 spheretracing(vec3 ori,vec3 dir,out vec3 p){ vec2 spheretracing(vec3 ori,vec3 dir,out vec3 p){
vec2 td=vec2(NEARPLANE,1.); vec2 td=vec2(NEARPLANE,1.);
p=ori; p=ori;
for(int i=0;i<MAX_STEPS&&td.y>EPSILON&&td.x<FARPLANE;i++){ for(int i=0;i<MAX_STEPS&&td.y>EPSILON&&td.x<FARPLANE;i++){
td.y=scene(p,false).x; td.y=scene(p,false);
td.x+=(td.y)*.9; td.x+=(td.y)*.9;
p=ori+dir*td.x; p=ori+dir*td.x;
} }
+24 -11
View File
@@ -4,6 +4,7 @@
#extension GL_EXT_mesh_shader:require #extension GL_EXT_mesh_shader:require
#include "include.glsl" #include "include.glsl"
#include "interpreter.glsl"
layout(local_size_x=1,local_size_y=1,local_size_z=1)in; layout(local_size_x=1,local_size_y=1,local_size_z=1)in;
layout(triangles,max_vertices=64,max_primitives=162)out; layout(triangles,max_vertices=64,max_primitives=162)out;
@@ -13,17 +14,6 @@ layout(location=0)out VertexOutput
vec4 position; vec4 position;
}vertexOutput[]; }vertexOutput[];
const vec4[8]positions={
vec4(-.5,-.5,-.5,1.),
vec4(-.5,-.5,.5,1.),
vec4(-.5,.5,-.5,1.),
vec4(-.5,.5,.5,1.),
vec4(.5,-.5,-.5,1.),
vec4(.5,-.5,.5,1.),
vec4(.5,.5,-.5,1.),
vec4(.5,.5,.5,1.),
};
void main() void main()
{ {
uint iid=gl_LocalInvocationID.x; uint iid=gl_LocalInvocationID.x;
@@ -32,6 +22,29 @@ void main()
vec3 signingvec=sign((inverse(pc.world)*vec4(camera_uniforms.campos,1)).xyz); vec3 signingvec=sign((inverse(pc.world)*vec4(camera_uniforms.campos,1)).xyz);
clear_stacks();
default_mask();
float[6]bounds={
1048576-scene(vec3(1048576,0,0),false),
1048576-scene(vec3(0,1048576,0),false),
1048576-scene(vec3(0,0,1048576),false),
-1048576+scene(vec3(-1048576,0,0),false),
-1048576+scene(vec3(0,-1048576,0),false),
-1048576+scene(vec3(0,0,-1048576),false),
};
vec4[8]positions={
vec4(bounds[3],bounds[4],bounds[5],1.),
vec4(bounds[3],bounds[4],bounds[2],1.),
vec4(bounds[3],bounds[1],bounds[5],1.),
vec4(bounds[3],bounds[1],bounds[2],1.),
vec4(bounds[0],bounds[4],bounds[5],1.),
vec4(bounds[0],bounds[4],bounds[2],1.),
vec4(bounds[0],bounds[1],bounds[5],1.),
vec4(bounds[0],bounds[1],bounds[2],1.),
};
SetMeshOutputsEXT(8,6); SetMeshOutputsEXT(8,6);
mat4 mvp=camera_uniforms.proj*camera_uniforms.view*pc.world; mat4 mvp=camera_uniforms.proj*camera_uniforms.view*pc.world;
//mat4 sw=pc.world; //mat4 sw=pc.world;
+4 -4
View File
@@ -134,7 +134,7 @@ void default_mask()
mask=uint8_t[13](uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255)); mask=uint8_t[13](uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255),uint8_t(255));
} }
vec3 scene(vec3 p,bool material) float scene(vec3 p,bool material)
{ {
uint major_position=0; uint major_position=0;
uint minor_position=0; uint minor_position=0;
@@ -1409,10 +1409,10 @@ vec3 scene(vec3 p,bool material)
case OPNop: case OPNop:
break; break;
case OPStop: case OPStop:
return vec3(pull_float()); return pull_float();
case OPInvalid: case OPInvalid:
default: default:
return vec3(float(minor_float_cache[minor_position])); return float(minor_float_cache[minor_position]);
} }
}else{ }else{
//return vec3(float(minor_float_cache[minor_position])); //return vec3(float(minor_float_cache[minor_position]));
@@ -1426,7 +1426,7 @@ vec3 scene(vec3 p,bool material)
major_position++; major_position++;
if(major_position==13) if(major_position==13)
{ {
return vec3(pull_float()); return pull_float();
} }
} }
} }