thermo mapping in ofapp

This commit is contained in:
micuat 2020-10-20 20:28:13 +02:00
parent 788f7b9f9b
commit 65d0ee7a85
2 changed files with 34 additions and 39 deletions

View file

@ -103,20 +103,6 @@ float simplex3d_fractal(vec3 m) {
+0.0666667*simplex3d(8.0*m); +0.0666667*simplex3d(8.0*m);
} }
vec2 stToV4l2(vec2 v) {
v *= 1.65;
v.s -= 115;
v.t -= 170;
return v;
}
vec2 v4l2ToSt(vec2 v) {
v.s += 115;
v.t += 170;
v /= 1.65;
return v;
}
void main() void main()
{ {
vec3 pos = texture(particles0, texCoordVarying.st).xyz; vec3 pos = texture(particles0, texCoordVarying.st).xyz;
@ -124,8 +110,7 @@ void main()
vec3 misc = texture(particles2, texCoordVarying.st).xyz; vec3 misc = texture(particles2, texCoordVarying.st).xyz;
vec4 target = texture(particles3, texCoordVarying.st).xyzw; vec4 target = texture(particles3, texCoordVarying.st).xyzw;
vec2 v4l2st = stToV4l2(texCoordVarying.st); float thermo = texture2D(u_v4l2cam, texCoordVarying.st).r;
float thermo = texture2D(u_v4l2cam, v4l2st).r;
float depth = texture(u_depth, texCoordVarying.st).x; float depth = texture(u_depth, texCoordVarying.st).x;
vec4 ray = texture(u_world, texCoordVarying.st); vec4 ray = texture(u_world, texCoordVarying.st);
@ -169,15 +154,15 @@ void main()
vec3 force = vec3(0,0,0); vec3 force = vec3(0,0,0);
float th = 3.1415 * 4 * simplex3d_fractal(vec3(pos.xyz * 0.001)); float th = 3.1415 * 4 * simplex3d_fractal(vec3(pos.xyz * 0.001));
float phi = 3.1415 * simplex3d_fractal(pos.xyz * 0.002); float phi = 3.1415 * simplex3d_fractal(pos.xyz * 0.002);
// force.x += cos(th) * cos(phi); force.x += cos(th) * cos(phi);
// force.y += sin(th) * cos(phi); force.y += sin(th) * cos(phi);
// force.z += sin(phi); force.z += sin(phi);
// force *= 100; force *= 100;
if(age < 0.001) { if(age < 0.001) {
target.w = 0; target.w = 0;
if(random3(pos).x > pow(length(v4l2st - uHottest0.st)/20,16)+0) { if(random3(pos).x > pow(length(texCoordVarying.st - uHottest0.st)/20,16)+0) {
vec2 h = v4l2ToSt(uHottest1.st); vec2 h = uHottest1.st;
vec4 hray = texture(u_world, h); vec4 hray = texture(u_world, h);
float hdepth = -depth * 65535.0; float hdepth = -depth * 65535.0;
if(hdepth == 0) hdepth = -0.01 * 65535.0; if(hdepth == 0) hdepth = -0.01 * 65535.0;
@ -185,8 +170,8 @@ void main()
target.xyz = H + random3(pos); target.xyz = H + random3(pos);
target.w = 1; target.w = 1;
} }
else if(random3(pos).x > pow(length(v4l2st - uHottest1.st)/50,16)+0) { else if(random3(pos).x > pow(length(texCoordVarying.st - uHottest1.st)/20,16)+0) {
vec2 h = v4l2ToSt(uHottest0.st); vec2 h = uHottest0.st;
vec4 hray = texture(u_world, h); vec4 hray = texture(u_world, h);
float hdepth = -depth * 65535.0; float hdepth = -depth * 65535.0;
if(hdepth == 0) hdepth = -0.01 * 65535.0; if(hdepth == 0) hdepth = -0.01 * 65535.0;
@ -199,8 +184,8 @@ void main()
if(target.w > 0) { if(target.w > 0) {
float th = atan(-pos.y + target.y, -pos.x + target.x); float th = atan(-pos.y + target.y, -pos.x + target.x);
float phi = atan(-pos.z + target.z, length(target.xy-pos.xy)); float phi = atan(-pos.z + target.z, length(target.xy-pos.xy));
th += 3.1415 / 2 * simplex3d_fractal(vec3(pos.xyz * 0.001)); th += 3.1415 / 4 * simplex3d_fractal(vec3(pos.xyz * 0.001));
phi += 3.1415 / 2 * simplex3d_fractal(pos.xyz * 0.001); phi += 3.1415 / 4 * simplex3d_fractal(pos.xyz * 0.001);
force.x = cos(th) * cos(phi); force.x = cos(th) * cos(phi);
force.y = sin(th) * cos(phi); force.y = sin(th) * cos(phi);
force.z = sin(phi); force.z = sin(phi);

View file

@ -51,9 +51,16 @@ void ofApp::setupThermal()
// we use a texture because the ofxV4L2 class has no draw method (yet) // we use a texture because the ofxV4L2 class has no draw method (yet)
// we use GL_LUMINANCE because the ofxV4L2 class supports only grayscale (for now) // we use GL_LUMINANCE because the ofxV4L2 class supports only grayscale (for now)
v4l2Tex.allocate(camWidth, camHeight, GL_RGB); v4l2Tex.allocate(512, 512, GL_RGB);
v4l2Pixels.allocate(camWidth, camHeight, OF_PIXELS_RGB); v4l2Pixels.allocate(512, 512, OF_PIXELS_RGB);
for (int i = 0; i < 512; i++)
{
for (int j = 0; j < 512; j++)
{
v4l2Pixels.setColor(j, i, 0);
}
}
} }
void ofApp::setup() void ofApp::setup()
@ -139,16 +146,20 @@ void ofApp::updateThermal()
{ {
hotspots.push_back(std::vector<ofVec3f>()); hotspots.push_back(std::vector<ofVec3f>());
} }
int count = 0; for (int i = 0; i < 512; i++)
for (int i = 0; i < camHeight; i++)
{ {
for (int j = 0; j < camWidth; j++) for (int j = 0; j < 512; j++)
{ {
int a = v4l2Cam.getPixels()[count / 3]; int x = j * 1.65 - 115;
v4l2Pixels.setColor(count++, a); int y = i * 1.65 - 170;
v4l2Pixels.setColor(count++, a); if (ofInRange(x, 0, camWidth - 1) == false || ofInRange(y, 0, camHeight - 1) == false)
v4l2Pixels.setColor(count++, a); {
if (i % 4 == 0 && j % 4 == 0 && i > 80) continue;
}
int count = x + y * camWidth;
int a = v4l2Cam.getPixels()[count];
v4l2Pixels.setColor(j, i, a);
if (i % 4 == 0 && j % 4 == 0)
{ {
auto c = body.getColor(j, i); auto c = body.getColor(j, i);
if (c.r < hotspots.size()) if (c.r < hotspots.size())
@ -198,9 +209,9 @@ void ofApp::onParticlesUpdate(ofxShader &shader)
{ {
shader.setUniform3f("uHottest1", hotspots.at(1).at(0)); shader.setUniform3f("uHottest1", hotspots.at(1).at(0));
} }
else if (hotspots.size() > 0 && hotspots.at(0).size() > 0) { else if (hotspots.size() > 0 && hotspots.at(0).size() > 0)
{
shader.setUniform3f("uHottest1", hotspots.at(0).at(1)); shader.setUniform3f("uHottest1", hotspots.at(0).at(1));
} }
} }
@ -244,7 +255,6 @@ void ofApp::draw()
cam.end(); cam.end();
} }
drawDebug(); drawDebug();
kinectDevice.getBodyIndexTex().draw(0, 0, 360, 360);
} }
void ofApp::keyPressed(int key) void ofApp::keyPressed(int key)