с использованием GLScene в delphi Мне нужно найти пересечение между объектом (достаточно линии или плоскости) и видимым пространством, чтобы определить, какая часть этого объекта в настоящее время отображается.
Я попытался получить вид усечения, но я не мог найти, как это сделать. Я думал об использовании положения, направления и поля зрения камеры, но я подозреваю, что они не обновляются при использовании таких методов, как MoveAroundTarget или установки целевого объекта.
Спасибо,
MarcoОпределение пересечения с усечками в GLScene
2
A
ответ
2
Для получения усеченного конуса вы можете использовать матрицу ModelViewProjection, полученную при умножении модели ModelViewMatrix и ProjectionMatrix на текущий буфер TGLScene. Чтобы получить плоскости из матрицы, используйте функцию ExtractFrustumFromModelViewProjection. Ниже приведен фрагмент кода:
var
matMVP: TMatrix;
frustum : TFrustum;
intersectPoint : TVector;
begin
// get the ModelViewProjection matrix
matMVP:=MatrixMultiply(GLScene1.CurrentBuffer.ModelViewMatrix, GLScene1.CurrentBuffer.ProjectionMatrix);
// extract frustum
frustum:=ExtractFrustumFromModelViewProjection(matMVP);
// calculate intersection between left plane and line passing through GLArrowLineX object
if (IntersectLinePlane(GLArrowLineX.Position.AsVector,GLArrowLineX.Direction.AsVector, frustum.pLeft, @intersectPoint)=1)
then begin
// do something with intersectPoint
end else begin
// no intersection point (parallel or inside plane)
end;
end;
1
Вы можете получить усеченный из объекта камеры (TGLSceneViewer.Camera свойства) - свойства NearPlane
, DepthOfView
, Position
, Direction
будут необходимы, а также 'TGLSceneViewer.FieldOfView' ,
У TGLCamera также есть метод под названием RayCastIntersect
, который может оказаться полезным.
Смежные вопросы
- 1. Проблема с усечками и вставкой
- 2. GLScene picking
- 3. Определение точки пересечения двух линий
- 4. Определение пересечения и локализации многоугольника
- 5. Определение пересечения треугольника и плоскости
- 6. GLScene triangles count
- 7. Определение точки и угла пересечения двух окружностей.
- 8. Определение сферы пересечения объекта или нет
- 9. Определение пересечения между сложностью упорядоченных массивов
- 10. Perl - определение пересечения нескольких числовых диапазонов
- 11. Определение линии пересечения от матрицы гомографии
- 12. Захватить вершину под мышью в GLScene
- 13. PHP Определение пересечения между массивами в многомерном массиве
- 14. Delphi - GLScene - resize спрайт в соответствии с изображением
- 15. Java Game Physics - Определение пересечения и обнаружения столкновений
- 16. Как найти и бесплатно объекты glScene ....?
- 17. Python пересечения с подстрок
- 18. Скала пересечения с графом
- 19. Как показать экструзионный или многоугольный каркас в GLscene
- 20. GLScene - конвертировать 3D-вектор в текущий вектор камеры
- 21. Возникли проблемы с тремя точками пересечения точек пересечения js
- 22. Пересечения в одной таблице
- 23. Пересечения в MySQL
- 24. Моделирование пересечения в C#
- 25. Точка пересечения
- 26. Пересечения линий
- 27. Условные пересечения в R
- 28. Пересечения прямоугольников
- 29. Функция пересечения
- 30. Форма пересечения
Направление не изменяется, например. когда я использую TGLCamera.MoveAroundTarget, я сейчас экспериментирую с матрицей проекции и матрицы модели: = MatrixMultiply (GLScene1.CurrentBuffer.ProjectionMatrix, GLScene1.CurrentBuffer.ModelViewMatrix); – mabi
правильной матрицей является MatrixMultiply (GLScene1.CurrentBuffer.ModelViewMatrix, GLScene1.CurrentBuffer.ProjectionMatrix); Я выложу некоторый код delphi, когда я очищу свой тест – mabi