Tweaked indexing, there is a discrepancy at z_max values that I need to
sort out. Added some 2d optimization functions for fun, currently doing a class involving them
This commit is contained in:
@@ -6,6 +6,9 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#define _USE_MATH_DEFINES
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
|
||||||
class Map {
|
class Map {
|
||||||
@@ -57,17 +60,6 @@ public:
|
|||||||
//generate_octree();
|
//generate_octree();
|
||||||
//return;
|
//return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
dimensions = dim;
|
dimensions = dim;
|
||||||
std::mt19937 gen;
|
std::mt19937 gen;
|
||||||
std::uniform_real_distribution<double> dis(-1.0, 1.0);
|
std::uniform_real_distribution<double> dis(-1.0, 1.0);
|
||||||
@@ -78,10 +70,76 @@ public:
|
|||||||
|
|
||||||
height_map = new double[dim.x * dim.y];
|
height_map = new double[dim.x * dim.y];
|
||||||
|
|
||||||
for (int i = 0; i < dim.x * dim.y; i++) {
|
for (int i = 0; i < dim.x * dim.y * dim.z; i++) {
|
||||||
height_map[i] = 0;
|
list[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//for (int x = -dim.x / 2; x < dim.x/2; x++) {
|
||||||
|
// for (int y = -dim.y / 2; y < dim.y/2; y++) {
|
||||||
|
//
|
||||||
|
// double height = 20;
|
||||||
|
|
||||||
|
// height += std::pow(x / 50.0, 2) - 10 * std::cos(2 * 3.1415926 * x / 50.0);
|
||||||
|
// height += std::pow(y / 50.0, 2) - 10 * std::cos(2 * 3.1415926 * y / 50.0);
|
||||||
|
//
|
||||||
|
// list[(x + dim.x/2) + dim.x * ((y +dim.y/2) + dim.z * (int)height)] = 5;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
int xx = 0;
|
||||||
|
int yy = 0;
|
||||||
|
for (int x = -dim.x / 2; x < dim.x / 2; x++) {
|
||||||
|
for (int y = -dim.y / 2; y < dim.y / 2; y++) {
|
||||||
|
|
||||||
|
double z = 150;
|
||||||
|
//for (int x = 0; x < dim.x; x++) {
|
||||||
|
// for (int y = 0; y < dim.y; y++) {
|
||||||
|
double height = 0;
|
||||||
|
|
||||||
|
z += -x*2 * std::sin(std::sqrt(abs(x*2 - y*2 - 47))) -
|
||||||
|
(y*2 + 47) * std::sin(std::sqrt(std::abs(y*2 + 47 + x*2 / 2)));
|
||||||
|
|
||||||
|
|
||||||
|
//z += x * std::sin(std::sqrt(std::abs(y - x + 1))) *
|
||||||
|
// std::cos(std::sqrt(std::abs(y + x + 1))) +
|
||||||
|
// (y + 1) *
|
||||||
|
// std::cos(std::sqrt(std::abs(y - x + 1))) *
|
||||||
|
// std::sin(std::sqrt(std::abs(y + x + 1)));
|
||||||
|
|
||||||
|
// Pathological
|
||||||
|
//z += 0.5 +
|
||||||
|
// (std::pow(std::sin(std::sqrt(100 * std::pow(x/20, 2) + std::pow(y/20, 2))), 2) - 0.5) /
|
||||||
|
// (1 + 0.001 * std::pow(std::pow(x/20, 2) - 2 * x/20 * y/20 + std::pow(y/20, 2), 2));
|
||||||
|
|
||||||
|
// Ackleys
|
||||||
|
//z += 20 + M_E -
|
||||||
|
// (20 / (std::pow(M_E, 0.2) * std::sqrt((std::pow(x / 16.0, 2) + std::pow(y / 16.0, 2) + 1) / 2))) -
|
||||||
|
// std::pow(M_E, 0.5 * std::cos(2 * M_PI * x / 16.0) + cos(2 * M_PI * y / 16.0));
|
||||||
|
|
||||||
|
//
|
||||||
|
//z += -20 * std::pow(M_E, -0.2 * sqrt(0.5 * std::pow(x/64.0, 2) + std::pow(y/64.0, 2))) - std::pow(M_E, 0.5 * (cos(2 * M_PI * x/64.0) + (cos(2 * M_PI * y/64.0)))) + 20 + M_E;
|
||||||
|
|
||||||
|
//list[x + dim.x * (y + dim.z * (int)height)] = 5;
|
||||||
|
|
||||||
|
double m = 0.7;
|
||||||
|
while ((z*m) > 0){
|
||||||
|
list[xx + dim.x * (yy + dim.z * (int)(z*m))] = 5;
|
||||||
|
z -= 1/m;
|
||||||
|
}
|
||||||
|
yy++;
|
||||||
|
|
||||||
|
}
|
||||||
|
yy = 0;
|
||||||
|
xx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//int featuresize = 2;
|
//int featuresize = 2;
|
||||||
|
|
||||||
//for (int y = 0; y < dim.y; y += featuresize)
|
//for (int y = 0; y < dim.y; y += featuresize)
|
||||||
@@ -109,7 +167,7 @@ public:
|
|||||||
//value 2^n+1
|
//value 2^n+1
|
||||||
int DATA_SIZE = dim.x + 1;
|
int DATA_SIZE = dim.x + 1;
|
||||||
//an initial seed value for the corners of the data
|
//an initial seed value for the corners of the data
|
||||||
double SEED = 50;
|
double SEED = rand() % 25 + 25;
|
||||||
|
|
||||||
//seed the data
|
//seed the data
|
||||||
setSample(0, 0, SEED);
|
setSample(0, 0, SEED);
|
||||||
|
|||||||
@@ -13,7 +13,12 @@ float4 white_light(float4 input, float3 light, int3 mask) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// {r, g, b, i, x, y, z, x', y', z'}
|
||||||
|
|
||||||
|
float4 cast_light_rays(float3 ray_origin, global float* lights, global int* light_count) {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
__kernel void min_kern(
|
__kernel void min_kern(
|
||||||
global char* map,
|
global char* map,
|
||||||
@@ -81,7 +86,7 @@ __kernel void min_kern(
|
|||||||
uint t = seed ^ (seed << 11);
|
uint t = seed ^ (seed << 11);
|
||||||
uint result = randoms.y ^ (randoms.y >> 19) ^ (t ^ (t >> 8));
|
uint result = randoms.y ^ (randoms.y >> 19) ^ (t ^ (t >> 8));
|
||||||
|
|
||||||
int max_dist = 500 + result % 50;
|
int max_dist = 800 + result % 50;
|
||||||
int dist = 0;
|
int dist = 0;
|
||||||
|
|
||||||
int3 mask = { 0, 0, 0 };
|
int3 mask = { 0, 0, 0 };
|
||||||
@@ -90,7 +95,6 @@ __kernel void min_kern(
|
|||||||
do {
|
do {
|
||||||
|
|
||||||
mask = intersection_t.xyz <= min(intersection_t.yzx, intersection_t.zxy);
|
mask = intersection_t.xyz <= min(intersection_t.yzx, intersection_t.zxy);
|
||||||
|
|
||||||
intersection_t += delta_t * fabs(convert_float3(mask.xyz));
|
intersection_t += delta_t * fabs(convert_float3(mask.xyz));
|
||||||
voxel.xyz += voxel_step.xyz * mask.xyz;
|
voxel.xyz += voxel_step.xyz * mask.xyz;
|
||||||
|
|
||||||
@@ -108,7 +112,9 @@ __kernel void min_kern(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If we hit a voxel
|
// If we hit a voxel
|
||||||
int index = voxel.x + (*map_dim).x * (voxel.y + (*map_dim).z * voxel.z);
|
//int index = voxel.x * (*map_dim).y * (*map_dim).z + voxel.z * (*map_dim).z + voxel.y;
|
||||||
|
// Why the off by one on voxel.y?
|
||||||
|
int index = voxel.x + (*map_dim).x * (voxel.y + (*map_dim).z * (voxel.z-1));
|
||||||
int voxel_data = map[index];
|
int voxel_data = map[index];
|
||||||
|
|
||||||
if (voxel_data != 0) {
|
if (voxel_data != 0) {
|
||||||
@@ -127,11 +133,15 @@ __kernel void min_kern(
|
|||||||
return;
|
return;
|
||||||
case 5:
|
case 5:
|
||||||
//write_imagef(image, pixel, (float4)(.25, .00, .25, 1.00));
|
//write_imagef(image, pixel, (float4)(.25, .00, .25, 1.00));
|
||||||
write_imagef(image, pixel, white_light((float4)(.25, .32, .14, 0.2), (float3)(lights[7], lights[8], lights[9]), mask));
|
write_imagef(image, pixel, white_light((float4)(.25, .32, .14, 0.2), (float3)(lights[7], lights[8], lights[9]), mask));
|
||||||
|
//cast_light_rays(voxel, lights, light_count)
|
||||||
return;
|
return;
|
||||||
case 6:
|
case 6:
|
||||||
write_imagef(image, pixel, (float4)(.30, .80, .10, 1.00));
|
write_imagef(image, pixel, (float4)(.30, .80, .10, 1.00));
|
||||||
return;
|
return;
|
||||||
|
default:
|
||||||
|
write_imagef(image, pixel, (float4)(.30, .80, .10, 1.00));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,9 +38,9 @@ const int WINDOW_X = 1000;
|
|||||||
const int WINDOW_Y = 1000;
|
const int WINDOW_Y = 1000;
|
||||||
const int WORK_SIZE = WINDOW_X * WINDOW_Y;
|
const int WORK_SIZE = WINDOW_X * WINDOW_Y;
|
||||||
|
|
||||||
const int MAP_X = 1024;
|
const int MAP_X = 512;
|
||||||
const int MAP_Y = 1024;
|
const int MAP_Y = 512;
|
||||||
const int MAP_Z = 256;
|
const int MAP_Z = 512;
|
||||||
|
|
||||||
float elap_time(){
|
float elap_time(){
|
||||||
static std::chrono::time_point<std::chrono::system_clock> start;
|
static std::chrono::time_point<std::chrono::system_clock> start;
|
||||||
@@ -135,7 +135,7 @@ int main() {
|
|||||||
c.create_buffer("view_matrix_buffer", sizeof(float) * 4 * view_res.x * view_res.y, view_matrix);
|
c.create_buffer("view_matrix_buffer", sizeof(float) * 4 * view_res.x * view_res.y, view_matrix);
|
||||||
|
|
||||||
Camera camera(
|
Camera camera(
|
||||||
sf::Vector3f(55, 50, 50),
|
sf::Vector3f(256, 256, 256),
|
||||||
sf::Vector2f(0.0f, 1.00f)
|
sf::Vector2f(0.0f, 1.00f)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user