materials, brick and nodes structure, preparing for world generation
This commit is contained in:
@@ -1,28 +1,9 @@
|
||||
|
||||
/*
|
||||
point: Hit point
|
||||
view: View vector (camera ray)
|
||||
normal: Normal vector
|
||||
*/
|
||||
vec3 solve(vec3 hitPoint, vec3 view, vec3 normal)
|
||||
{
|
||||
// Lighting
|
||||
vec3 light_color = vec3(1.0, 1.0, 1.0);
|
||||
vec3 light_dir = normalize(hitPoint-vec3(0.0, 1.5, 4.0));
|
||||
|
||||
vec3 ambient = light_color * 0.1;
|
||||
vec3 diffuse = light_color * max(1.0-dot(normal, light_dir), 0.0);
|
||||
vec3 specular = light_color * pow(max(dot(view, reflect(-light_dir, normal)), 0.0), 32);
|
||||
|
||||
// Combine colors
|
||||
vec3 object_color = vec3(0.0, 0.1, 0.5);
|
||||
return (ambient + diffuse + specular) * object_color;
|
||||
}
|
||||
|
||||
/*
|
||||
* origin: Point hit on the node
|
||||
* dir: Camera view direction (ray direction)
|
||||
* addr: Number given by node, afaik brick offset in brick array
|
||||
* incAxis: Last axis that was used to increment position
|
||||
* addr: Number given by node, brick offset in brick array
|
||||
*/
|
||||
vec4 castBricks(vec3 origin, vec3 start, vec3 dir, vec3 incAxis, uint addr)
|
||||
{
|
||||
@@ -38,14 +19,12 @@ vec4 castBricks(vec3 origin, vec3 start, vec3 dir, vec3 incAxis, uint addr)
|
||||
vec3 rayInv = 1.0/dir;
|
||||
vec3 raySign = sign(dir);
|
||||
vec3 dist = (pos-origin+0.5 + raySign*0.5) * rayInv;
|
||||
|
||||
ivec3 offset = ivec3(0, 0, (addr-1)*32);
|
||||
|
||||
vec3 tmp = abs(raySign);
|
||||
for(int i=0;i<110;i++)
|
||||
{
|
||||
// Get brick
|
||||
uint brick = texelFetch(bricksTexture, offset+ivec3(pos), 0).r;
|
||||
uint brick = texelFetch(_BricksTexture, offset+ivec3(pos), 0).r;
|
||||
if(brick != 0)
|
||||
{
|
||||
// Hit point
|
||||
@@ -55,7 +34,7 @@ vec4 castBricks(vec3 origin, vec3 start, vec3 dir, vec3 incAxis, uint addr)
|
||||
|
||||
// Normal vector (negate previous increment axis and mult by sign)
|
||||
vec3 normal = -incAxis * raySign;
|
||||
return vec4(solve(hitPoint, dir, normal), 1.0);
|
||||
return vec4(solve(hitPoint, dir, normal, brick-1), 1.0);
|
||||
}
|
||||
|
||||
// Get new closest axis to increment
|
||||
@@ -68,7 +47,7 @@ vec4 castBricks(vec3 origin, vec3 start, vec3 dir, vec3 incAxis, uint addr)
|
||||
if(pos.x > 31 || pos.y > 31 || pos.z > 31) { break; }
|
||||
}
|
||||
|
||||
return vec4(0.5,0.5,0.5, 0.0);
|
||||
return vec4(1.0,0.0,0.5,0.0);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -93,16 +72,13 @@ vec3 castNodes(vec3 origin, vec3 dir)
|
||||
for(int i=0;i<110;i++)
|
||||
{
|
||||
// Get node
|
||||
uint node = texelFetch(nodesTexture, ivec3(pos), 0).r;
|
||||
uint node = texelFetch(_NodesTexture, ivec3(pos), 0).r;
|
||||
if(node != 0)
|
||||
{
|
||||
// Hit point
|
||||
vec3 mini = (pos-origin+0.5 - raySign*0.5) * rayInv;
|
||||
float len = max(0.0, max(mini.x, max(mini.y, mini.z)));
|
||||
vec3 hitPoint = origin + dir * len;
|
||||
// Normal vector (negate previous increment axis and mult by sign)
|
||||
//vec3 normal = -incAxis * raySign;
|
||||
//return solve(hitPoint, dir, normal);
|
||||
|
||||
// Cast brick
|
||||
vec4 result = castBricks(pos, hitPoint, dir, incAxis, node);
|
||||
|
||||
Reference in New Issue
Block a user