Похоже, что алгоритм, на который вы ссылаетесь, рассматривает окно обрезки как ориентированное по оси. В случае рендеринга громкости вы можете захотеть манипулировать ориентацией громкости во время визуализации. Это делает куб не осьным.
Кроме того, кажется, что вы делаете лучевое кастинг на процессоре, а не в шейдере openGL. В шейдере OpenGL вычисление точек «intersectFront» и intersectBack очень просто. Вы сначала визуализируете ограничительную рамку тома два раза в текстуру. Первый рендеринг - для лицевых поверхностей, а второй - для задних поверхностей. Вершины ограничивающего прямоугольника окрашены с помощью выровненных по оси координат поля. Затем две текстуры могут перекрываться, чтобы найти луч пересечения в терминах трехмерных текстурных координат. Для получения дополнительной информации, отметьте это сообщение: volume rendering (using glsl) with ray casting algorithm.
Если вы делаете это на процессоре, лучше всего преобразовать куб/рамку назад, чтобы сделать его выровненным по оси вместе с текущим лучом. Затем вы можете применить упомянутый алгоритм Лян Барского, используя расширения окна как x_min, x_max, y_min, y_max, z_min, z_max.
Спасибо за ваш вход. На данный момент я делаю это на процессоре. Теперь предположим, что я не хочу поворачивать громкость. Я просто хотел увидеть свой том (лучевое кастинг). Я не могу получить, как преобразовать его назад и применить Лян Барского. Как раз в моем случае считаю все статичным. Тот же размер, без вращения, одинаковое положение куба. – user3870357
Вам не нужно делать обратное преобразование, если ваш куб уже выровнен по оси и статичен. Просто вычислите линейные уравнения и используйте значения min и max для каждого измерения, чтобы вычислить точки пересечения. – Jadh4v
Или, чтобы получить еще проще, просто используйте орфографическую проекцию. т. е. ваши лучи движутся вдоль оси z. Но я не создам хорошую перспективу. Хотя, это было бы хорошей отправной точкой. – Jadh4v