Я делаю игру в OpenGL с C++. У меня есть ландшафт, в котором есть холмы и такие, и я хочу, чтобы персонаж мог ходить вверх и вниз по склону. Для этого я создал функцию, которая пытается найти ближайшие координаты и вернуть соответствующие координаты y, но не работает, мой персонаж просто остается на той же высоте. Вот моя функция:Поиск ближайших координат на местности OpenGL
float ViewPort::comparePosition(float xPos, float zPos) {
int closestValSoFar = 0;
for (int unit = 0; unit < sizeof(desert_scene_plainVerts)/sizeof(desert_scene_plainVerts[0]); unit++){
int xDifference = terrainxPos[unit] - xPos;
int zDifference = terrainzPos[unit] - zPos;
int combinedDifferece = xDifference + zDifference;
if (unit == 0) {
closestValSoFar = unit;
}
if (combinedDifferece < (terrainxPos[unit-1] - xPos) + (terrainzPos[unit-1] - zPos)) {
closestValSoFar = unit - 1;
}
else {
closestValSoFar = unit;
}
if ((unit - 1) < sizeof(desert_scene_plainVerts)/sizeof(desert_scene_plainVerts[0])) {
return terrainyPos[closestValSoFar];
}
}
return terrainyPos[closestValSoFar];
}
Я называю это и использовать его с этим кодом:
float yPos = ViewPort::comparePosition(Camera::position.x, Camera::position.z);
Camera::position.y = yPos+1.65;
Кто-нибудь знает, как я могу исправить мой код?
У вас действительно странный способ использования 'sizeof' ... Если размер массива - это стек, тогда введите это вместо' sizeof' ... Если размер не статический, то 'sizeof' не является (дайте правильную длину). – Vallentin
Но я думал, что длина была sizeof (verts)/sizeof (verts [0]) –
Если размер вашего массива 'verts', является статическим, тогда да, который должен вернуть размер, но, как сказано, если ваш массив isn 't static, это даст вам проблемы. – Vallentin