add bubbles

This commit is contained in:
v7eZ3t 2022-02-10 17:47:13 +01:00
parent 8470efa3b8
commit 992877b644

View File

@ -19,7 +19,7 @@ enum {
PASS_NORMAL, PASS_CAUSTIC
};
void bubbleManager();
static GLboolean HaveTexObj = GL_FALSE;
static int reportSpeed = 0;
@ -35,6 +35,7 @@ static int showCaustics = 1, causticMotion = 1;
static int useMipmaps = 1;
static int currentCaustic = 0;
static int causticIncrement = 1;
static int NUMBER_OF_BUBBLES = 500;
static float lightAngle = 0.0, lightHeight = 20;
static GLfloat angle = -150; /* in degrees */
@ -82,7 +83,11 @@ obj::Model planeModel;
int WIN_WIDTH = 1280;
int WIN_HEIGHT = 720;
glm::vec3 planetLocation[10];
glm::vec3 planetLocation[100];
glm::vec3 bubbleLocation[500];
glm::vec3 bubbleOriginalLocation[500];
bool bubbleZdir[500] ;
bool bubbleXdir[500] ;
float mouseXPosition;
float mouseYPosition;
@ -181,9 +186,9 @@ void changeVehicleSpeed() {
vehicleAngle += vehicleAngleSpeed;
printf("vehicleSpeed: %.4f\n", vehicleSpeed);
printf("vehicleAngleSpeed: %.4f\n", vehicleAngleSpeed);
printf("vehicleVerticalSpeed: %.4f\n", vehicleVerticalSpeed);
//printf("vehicleSpeed: %.4f\n", vehicleSpeed);
//printf("vehicleAngleSpeed: %.4f\n", vehicleAngleSpeed);
//printf("vehicleVerticalSpeed: %.4f\n", vehicleVerticalSpeed);
}
@ -442,6 +447,8 @@ void drawScene()
drawObjectTexture(fishContext, modelMatrix, textureFish01);
bubbleManager();
for (int i = 0; i < 10; i++)
{
@ -486,6 +493,74 @@ void drawScene()
}
void bubbleMovement(int i) {
float bubbleWobblingDivider = 100;
int x = floor(bubbleLocation[i].x);
int y = floor(bubbleLocation[i].y);
int z = floor(bubbleLocation[i].z);
float bubbleWobbling = 0.0005;
float bubbleUp = 0.01;
//printf(xDir ? "true\n" : "false\n");
//printf(zDir ? "true\n" : "false\n");
if (bubbleLocation[i].x > bubbleOriginalLocation[i].x + bubbleWobbling * bubbleWobblingDivider ) {
bubbleXdir[i] = false;
//printf("herex1\n");
}
if (bubbleLocation[i].x < bubbleOriginalLocation[i].x - bubbleWobbling * bubbleWobblingDivider){
bubbleXdir[i] = true;
//printf("herex2\n");
}
if (bubbleLocation[i].z > bubbleOriginalLocation[i].z + bubbleWobbling * bubbleWobblingDivider) {
bubbleZdir[i] = false;
}
if (bubbleLocation[i].z < bubbleOriginalLocation[i].z - bubbleWobbling * bubbleWobblingDivider) {
bubbleZdir[i] = true;
}
if (bubbleXdir[i]) {
bubbleLocation[i].x += bubbleWobbling;
} else {
bubbleLocation[i].x -= bubbleWobbling;
}
if (bubbleZdir[i] ) {
bubbleLocation[i].z += bubbleWobbling;
}
else {
bubbleLocation[i].z -= bubbleWobbling;
}
if (y >= 10.0) {
bubbleLocation[i].y = -10.0;
}
bubbleLocation[i].y += bubbleUp;
}
void bubbleManager() {
for (int i = 0; i < NUMBER_OF_BUBBLES; i++)
{
bubbleMovement(i);
glm::mat4 modelMatrix = glm::translate(bubbleLocation[i]);
// Scaling models
glm::vec3 scale = glm::vec3(0.001, 0.001, 0.001);
modelMatrix = glm::scale(modelMatrix, scale);
drawObjectTexture(fishContext, modelMatrix, textureFish01);
}
}
void drawSceneLight(int pass)
{
@ -665,13 +740,32 @@ void loadModelToContext(std::string path, Core::RenderContext& context)
context.initFromAssimpMesh(scene->mMeshes[0]);
}
void init()
{
for (int i = 0; i < 10; i++)
srand(time(NULL));
for (int i = 0; i < 100; i++)
{
planetLocation[i] = glm::ballRand(20.0);
}
for (int i = 0; i < NUMBER_OF_BUBBLES; i++)
{
// srand(time(NULL));
float MAX_NUM = 100.0;
bubbleLocation[i].x = (((float)rand() / (float)(RAND_MAX)) * MAX_NUM) - MAX_NUM / 2;
bubbleLocation[i].y = (((float)rand() / (float)(RAND_MAX)) * 10) - 5;
bubbleLocation[i].z = (((float)rand() / (float)(RAND_MAX)) * MAX_NUM) - MAX_NUM / 2;
bubbleOriginalLocation[i] = bubbleLocation[i];
bubbleZdir[i] = true;
bubbleXdir[i] = false;
}
srand(time(0));
glEnable(GL_DEPTH_TEST);
programColor = shaderLoader.CreateProgram("shaders/shader_color.vert", "shaders/shader_color.frag");