Проблема в C ++ (прыгающий шар и взрыв частиц) - PullRequest
0 голосов
/ 14 февраля 2019

Я начинающий с C ++, и у меня есть задание, могу ли я попросить немного помощи?

Итак, мой проект состоит в создании прыгающего шара, взрыва частиц и людейходьба, все в 3D с использованием GLM.Я должен использовать гравитацию и все такое, но я не понимаю, как это реализовать.Вот мой код для прыгающего мяча:

 glm::mat4 mv_matrix_sphere =
glm::translate(glm::vec3(-2.0f, 0.5f + t, 0.0f)) *
glm::rotate(-t, glm::vec3(0.0f, 1.0f, 0.0f)) *
glm::rotate(-t, glm::vec3(1.0f, 0.0f, 0.0f)) *
glm::mat4(1.0f);
mySphere.mv_matrix = myGraphics.viewMatrix * mv_matrix_sphere;
mySphere.proj_matrix = myGraphics.proj_matrix;
if (t == 0.5) {
    while (t != 0) {
        t -= f; // increment movement variable
    }
}
t += 0.01f; // increment movement variable

Когда я выполняю, функция работает (шар движется, но не останавливается), так что это означает, что мяч никогда не вернется (неt bounce) И вот мой взрыв частиц:

void particles() {
    vel = new glm::vec3[numParticles];

    for (int i = 0; i < numParticles; i++) {
        vel[i] = glm::normalize(glm::vec3((rand() % 1500 - 750) / 10000.0f, (rand() % 1500 - 750) / 10000.0f, (rand() % 1500 - 750) / 10000.0f));
    }
}

Я нашел этот код в интернете, но он не работает, и я не понимаю, почему.

Я был бы очень признателен, если бывы, ребята, можете мне помочь.Большое спасибо!

1 Ответ

0 голосов
/ 14 февраля 2019

Я думаю, что помню, как делал что-то подобное, когда только начинал.С предоставленным кодом я бы сказал, что вам, вероятно, нужно добавить свойство направления со значением -1 или 1, чтобы помочь решить, в каком направлении должен двигаться шар.Я думаю, что это то, что этот код пытается сделать, но я бы сделал несколько модификаций вашего оператора if.В зависимости от того, в каком направлении вы хотите, чтобы мяч шел вначале, а затем измените конец.

if (t >= 0.5) {
    d = -1;
}
else if (t <= 0){
    d = 1;
}
t += 0.01f * d; // increment movement variable
...