mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 04:48:54 +02:00
field modifies itself by particles
This commit is contained in:
parent
20845b4704
commit
250400dac1
4 changed files with 22 additions and 29 deletions
11
field.cpp
11
field.cpp
|
@ -55,8 +55,8 @@ void field_add(float* add, float *pos)
|
||||||
if ((index >= 0) && (index < FIELD_ELEMENTS))
|
if ((index >= 0) && (index < FIELD_ELEMENTS))
|
||||||
{
|
{
|
||||||
field[index].val.x += add[0];
|
field[index].val.x += add[0];
|
||||||
field[index].val.y += add[0];
|
field[index].val.y += add[1];
|
||||||
field[index].val.z += add[0];
|
field[index].val.z += add[2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,9 +107,10 @@ void field_simulate(float dt) {
|
||||||
field[i].val += add;
|
field[i].val += add;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
field[i].val.x += (randFloat() - 0.5)*0.01*FIELD_SCALE;
|
field[i].val *= 0.999;
|
||||||
field[i].val.y += (randFloat() - 0.5)*0.01*FIELD_SCALE;
|
//field[i].val.x += (randFloat() - 0.5)*0.01*FIELD_SCALE;
|
||||||
field[i].val.z += (randFloat() - 0.5)*0.01*FIELD_SCALE;
|
//field[i].val.y += (randFloat() - 0.5)*0.01*FIELD_SCALE;
|
||||||
|
//field[i].val.z += (randFloat() - 0.5)*0.01*FIELD_SCALE;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
|
@ -3,19 +3,6 @@
|
||||||
type = "1"
|
type = "1"
|
||||||
version = "1.0">
|
version = "1.0">
|
||||||
<FileBreakpoints>
|
<FileBreakpoints>
|
||||||
<FileBreakpoint
|
|
||||||
shouldBeEnabled = "No"
|
|
||||||
ignoreCount = "0"
|
|
||||||
continueAfterRunningActions = "No"
|
|
||||||
filePath = "main.cpp"
|
|
||||||
timestampString = "374020144.685254"
|
|
||||||
startingColumnNumber = "9223372036854775807"
|
|
||||||
endingColumnNumber = "9223372036854775807"
|
|
||||||
startingLineNumber = "320"
|
|
||||||
endingLineNumber = "320"
|
|
||||||
landmarkName = "init(void)"
|
|
||||||
landmarkType = "7">
|
|
||||||
</FileBreakpoint>
|
|
||||||
<FileBreakpoint
|
<FileBreakpoint
|
||||||
shouldBeEnabled = "No"
|
shouldBeEnabled = "No"
|
||||||
ignoreCount = "0"
|
ignoreCount = "0"
|
||||||
|
|
27
main.cpp
27
main.cpp
|
@ -116,11 +116,11 @@ ParticleSystem balls(10,
|
||||||
#define RENDER_FRAME_MSECS 10
|
#define RENDER_FRAME_MSECS 10
|
||||||
#define SLEEP 0
|
#define SLEEP 0
|
||||||
|
|
||||||
#define NUM_TRIS 100000
|
#define NUM_TRIS 200000
|
||||||
struct {
|
struct {
|
||||||
float vertices[NUM_TRIS * 3];
|
float vertices[NUM_TRIS * 3];
|
||||||
float normals [NUM_TRIS * 3];
|
// float normals [NUM_TRIS * 3];
|
||||||
float colors [NUM_TRIS * 3];
|
// float colors [NUM_TRIS * 3];
|
||||||
float vel [NUM_TRIS * 3];
|
float vel [NUM_TRIS * 3];
|
||||||
glm::vec3 vel1[NUM_TRIS];
|
glm::vec3 vel1[NUM_TRIS];
|
||||||
glm::vec3 vel2[NUM_TRIS];
|
glm::vec3 vel2[NUM_TRIS];
|
||||||
|
@ -167,8 +167,6 @@ int accel_x, accel_y;
|
||||||
|
|
||||||
int speed;
|
int speed;
|
||||||
|
|
||||||
float mag_imbalance = 0.f;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Serial I/O channel mapping:
|
// Serial I/O channel mapping:
|
||||||
//
|
//
|
||||||
|
@ -312,14 +310,14 @@ void init(void)
|
||||||
tris.vertices[i*3 + 2] = verts[j].z;
|
tris.vertices[i*3 + 2] = verts[j].z;
|
||||||
|
|
||||||
// reuse pos for the normal
|
// reuse pos for the normal
|
||||||
glm::normalize((pos += glm::cross(verts[1] - verts[0], verts[2] - verts[0])));
|
//glm::normalize((pos += glm::cross(verts[1] - verts[0], verts[2] - verts[0])));
|
||||||
tris.normals[i*3] = pos.x;
|
//tris.normals[i*3] = pos.x;
|
||||||
tris.normals[i*3+1] = pos.y;
|
//tris.normals[i*3+1] = pos.y;
|
||||||
tris.normals[i*3+2] = pos.z;
|
//tris.normals[i*3+2] = pos.z;
|
||||||
|
|
||||||
// Moving - white
|
// Moving - white
|
||||||
tris.element[i] = 1;
|
tris.element[i] = 1;
|
||||||
tris.colors[i*3] = 1.0; tris.colors[i*3+1] = 1.0; tris.colors[i*3+2] = 1.0;
|
//tris.colors[i*3] = 1.0; tris.colors[i*3+1] = 1.0; tris.colors[i*3+2] = 1.0;
|
||||||
tris.vel[i*3] = (randFloat() - 0.5)*VEL_SCALE;
|
tris.vel[i*3] = (randFloat() - 0.5)*VEL_SCALE;
|
||||||
tris.vel[i*3+1] = (randFloat() - 0.5)*VEL_SCALE;
|
tris.vel[i*3+1] = (randFloat() - 0.5)*VEL_SCALE;
|
||||||
tris.vel[i*3+2] = (randFloat() - 0.5)*VEL_SCALE;
|
tris.vel[i*3+2] = (randFloat() - 0.5)*VEL_SCALE;
|
||||||
|
@ -364,7 +362,7 @@ void update_tris()
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
float field_val[3];
|
float field_val[3];
|
||||||
|
float field_contrib[3];
|
||||||
for (i = 0; i < NUM_TRIS; i++)
|
for (i = 0; i < NUM_TRIS; i++)
|
||||||
{
|
{
|
||||||
if (tris.element[i] == 1) // If moving object, move and drag
|
if (tris.element[i] == 1) // If moving object, move and drag
|
||||||
|
@ -391,6 +389,13 @@ void update_tris()
|
||||||
tris.vel[i*3] += field_val[0];
|
tris.vel[i*3] += field_val[0];
|
||||||
tris.vel[i*3+1] += field_val[1];
|
tris.vel[i*3+1] += field_val[1];
|
||||||
tris.vel[i*3+2] += field_val[2];
|
tris.vel[i*3+2] += field_val[2];
|
||||||
|
|
||||||
|
// Add a tiny bit of energy back to the field
|
||||||
|
const float FIELD_COUPLE = 0.0000001;
|
||||||
|
field_contrib[0] = tris.vel[i*3]*FIELD_COUPLE;
|
||||||
|
field_contrib[1] = tris.vel[i*3+1]*FIELD_COUPLE;
|
||||||
|
field_contrib[2] = tris.vel[i*3+2]*FIELD_COUPLE;
|
||||||
|
field_add(field_contrib, &tris.vertices[i*3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// bounce at edge of world
|
// bounce at edge of world
|
||||||
|
|
Loading…
Reference in a new issue