Если оператор с логическими причинами функционирует, чтобы прекратить работу [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Если оператор с логическими причинами функционирует, чтобы прекратить работу [закрыто]

Сообщение Anonymous »

Я строю игру в OpenGL. Когда я запускаю оператор IF с помощью функции, включенной в столкновение, это заставляет код пересечения треугольника, чтобы перестать работать. < /P>
Вот мой код с оператором if и без. Первый работает, но второй - нет. Коробка рампа установлена ​​на кастинг Рэй, через который игрок может просто пройти, но другие коробки, которые установлены на столкновение, работают. < /P>
// ramp box which should use ray casting.
model = glm::mat4();
model = glm::translate(model, glm::vec3(-2.0f, 4.5f, 8.0f));
model = glm::rotate(model, 45 * toRadians, glm::vec3(0.0f, 0.0f, 1.0f));
model = glm::scale(model, glm::vec3(10.0f, 2.0f, 1.0f));
glUniformMatrix4fv(uniformModel, 1, GL_FALSE, glm::value_ptr(model));
tile.UseTexture();
shinyMaterial.UseMaterial(uniformSpecularIntensity, uniformShininess);
meshList[4]->RenderMesh();
meshList[4]->updateVertices(model);
meshList[4]->UsesBoxCollision = false;
std::vector ExtractTrianglesFromMesh(const Mesh* mesh) {
std::vector triangles;

for (unsigned int i = 0; i < mesh->mNumOfIndices; i += 3) {
unsigned int i0 = mesh->mIndices;
unsigned int i1 = mesh->mIndices[i + 1];
unsigned int i2 = mesh->mIndices[i + 2];

Triangle* tri = new Triangle();
tri->v0 = mesh->transformedVertices[i0];
tri->v1 = mesh->transformedVertices[i1];
tri->v2 = mesh->transformedVertices[i2];
triangles.push_back(tri);
}

return triangles;
}
// ray casting works here by itself without the if statement
// std::cout v0, tri->v1, tri->v2, hitY)) {
// if (hitY > closestY) {
// closestY = hitY;
// hit = true;
// }
// }
// }
// }
// }

// ray casting does not work here
for (int i = 0; i < meshList.size();i++) {
if (!meshList->transformedVertices.empty()) {
if (!meshList->UsesBoxCollision) { // !!! culprit
const std::vector tris = ExtractTrianglesFromMesh(meshList);
for (int j = 0; j < tris.size();j++) {
float hitY;
if (RayIntersectsTriangle(rayOrigin, rayDir, tris[j]->v0, tris[j]->v1, tris[j]->v2, hitY)) {
if (hitY > closestY) {
closestY = hitY;
hit = true;
}
}
}
} else {
float groundY = 0.0f;
if (camera.boxCollision(meshList->box, deltaTime, groundY)) {
anyGrounded = true;
if (groundY > maxGroundLevel) {
maxGroundLevel = groundY;
closestY = maxGroundLevel;
hit = true;
}
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... op-working
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»