Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 44

3D построение объектов

27.04.2014, 15:18. Показов 3718. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите каким образом множа построить параллелепипед в OpenGL. Так чтобы он был размещен вдоль прямой. То есть я задаю 2 точки и строится типа бруска в пространстве.

вот пример в 3D max


или подскажите как координаты посчитать, для построения

То есть зная жёлтые точки мне нужна найти красные.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2014, 15:18
Ответы с готовыми решениями:

Построение геометрических объектов по данным из БД
Доброго времени суток! Столкнулась с такой задачей - есть база данных, в которую заносим параметры электрического нагревателя(фото...

Построение описания класса, создание и уничтожение объектов этого класса
Построить описание класса, содержащего информацию о почтовом адресе организации. Предусмотреть возможность раздельного изменения...

Размещение объектов в пределах формы и отражение двух объектов при соприкосновении
Помогите с задачей, чтобы круг летал по форме и соприкасаясь с квадратом отталкивался от него. Shape2.Top = Shape2.Top - 50 End If If...

11
Заблокирован
27.04.2014, 15:30
Никак. По этим точкам можно вычислить только расстояние между торцами. Для построения по двум точкам, нужно задавать угловые точки. И вообще почитайте книгу Краснова. Графика Open GL в проектах Delphi.
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 44
27.04.2014, 15:44  [ТС]
Да, я не пометил толщина бруска мне известна.

Причём тут книга Краснова там про это нет я читал.

Добавлено через 6 минут
Сама идея построения мне ясна, мне нужна формула для нахождения координат конца вектора, зная длину, координаты начала и углы от осей.
0
Заблокирован
27.04.2014, 23:49
Ну дак в чём тогда проблема? В 3D графике существует такое понятие, как контейнер. Это локальная система координат. В Open GL именно всё так и организовано. И не забывайте что вам нужны треугольники. И мало того, они должны следовать в определённом порядке, и сохранять направление обхода своих точек. Вот этим и должна заняться ваша программа. Почитайте книги Амерала. Там это прекрасно изложено.

Ну а для начала построения, конечно же нужно найти ваши точки. Они в значениях мировых координат. Так в чём же дело? Это простейшая геометрия. Вы знаете размеры торца. Прекрасно. Делим ширину и высоту торца на 2.
А потом...
Ну предположим, что у вас не Оpen GL а обычная система координат.
координаты точки A
X=1
Y=0
Z=0

координаты точки B
X=6
Y=0
Z=0

То есть брусок вытянут вдоль оси X

Размеры торца 4x2

Тогда
xx = 4 / 2 = 2
yy = 2 / 2 = 1

Вот теперь через матрицу сдвига вычисляем координаты точек торца.
Но в вашем простейшем случае это так.
прямоугольник abcd

a
X=1
Y=A-xx
Z=A+yy

b
X=1
Y=A+xx
Z=A+yy

c
X=1
Y=A+xx
Z=A-yy

d
X=1
Y=A-xx
Z=A-yy

Добавлено через 13 минут
Но если делать всё по правилам, то для начала нужно перевести ваш брусок из мировых координат в локальные.
Для этого вычисляется центр отрезка между заданными точками. И они принимают координаты 0 0 0
Если взять координаты из примера, это будет так.
6-1/2 = 2.5
То есть
А=-2.5
B=2,5

Применяем по формулам выше трансформацию пермещения исходных точек и получаем точки четырёхугольного полигона,

анологично поступаем со вторым торцом


В результате получаем массив точек

Вообще, для отображения в OpenGl можно состряпать загрузочный файл. Он может быть текстовым, или сразу
передать на отображение.

Только сначала нужно ещё создать массив граней разбитый на треугольники. и карту нормалей.

Добавлено через 1 час 3 минуты
Да... вам наверное нужна эта формула.
https://www.cyberforum.ru/cgi-bin/latex.cgi?{(x2 - x1)}^{2} + (y2 - y1)^{2} + (z2 - z1)^{2}
Это расстояние между точками в трёхмерном пространстве.
То есть у вас есть эти точки. Вычисляете расстояние между ними, это длина бруска. Ну а далее как говорил раньше. Переводим в локальную систему координат. Получаем точки и на построение.
Только если вам нужна ваша палка в таком же положении каком были точки, нужно будет ещё вычислить угол наклона по всем осям, и потом повернуть палку и перенести её в нужную позицию.
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 44
28.04.2014, 21:52  [ТС]
Если брусок расположен в доль какой либо оси его построение меня не затруднит. Трудность в высчитывание координат тарцов бруска повёрнутого во всех 3 плоскостях.

Добавлено через 3 минуты
Может кто подскажет может мне проще рисовать цилиндр с 4 гранями, его можно строить задав 2 точки и ширину? Не помню как строить цилиндр.
0
Заблокирован
29.04.2014, 01:10
PavelG2010,
Кошмар... Вы видимо не въехали.
Ещё раз и читайте внимательно что я пишу.
Существует понятие "локальная система координат или контейнер."
В нём фигура как раз и располагается вдоль оси. А потом этот контейнер переносится в нужное место и поворачивается.
Я же вам объяснял.
Вам нужно из ваших координат перенести брусок в такой вот контейнер. Для этого нужно узнать расстояние между точками в 3D пространстве. Формулу я дал. Это будет длина бруска. Торцы известны. Брусок лежит в локальной системе вдоль оси. Вот и вычисляйте все ваши точки и грани. А когда они вычислены, введите их в массив фигуры. Рисование будет происходить невидимо, пока не произойдут все трансформации. Из двух точек что у вас есть. кроме расстояния. вычислите смещение и повороты. И когда будете рисовать, после отрисовки задайте смещение и поворот. и когда брусок окажется на экране, он будет в таком же положении, как и точки.
Если у вас три таких бруска, их не надо рисовать три раза. А надо клонировать один в разные позиции.
неужели это так трудно понять?
Исходная фигура хранится в локальной системе. А при отрисовке переносится в мировую систему. Вот вам и нужно... По двум точкам вычислить длину и положение в пространстве. Знаю длину, конструируете брусок в локальной системе. и потом эту локальную систему трансформируете.
Опять непонятно?

цилиндр с 4 гранями? это как? Цилиндр вообще-то круглый. почитайте книги Амерала. там все формулы построения объёмных фигур.
А круг строится из треугольников. Задаёте не ширину а радиус или диаметр. Двумя точками задаёте высоту и положение в пространстве. Вычисляете расстояние, это и есть высота. По высоте строятся боковые грани.
А зная диаметр, можно вычислить все треугольники круга. Опять же. Цилиндр строится в локальной системе, а потом переносится в мировую.
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 44
03.05.2014, 14:24  [ТС]
ДА. понял я вас и в первый раз. Этот способ не затруднит от рисовку брусков будет 5000-10000 штук.
Можно ссылку на "Амерала" не могу найти.
Цилиндр бывает даже с 3 гранями.))
Миниатюры
3D построение объектов  
0
Заблокирован
05.05.2014, 20:43
PavelG2010,
Ну ты загнул. Цилиндр это цилиндр. А это назывется призма.
У Амерала нет про OpenGL.
Напиши в поиске "Принципы программирования в машинной графике"

Добавлено через 2 минуты
http://gendocs.ru/v28442/?cc=3&view=djvu
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 44
06.05.2014, 08:30  [ТС]
Это цилиндр, там написано Сylinder (перевод цилиндр) просто у него граней для построения стоит 3 поэтому он и выглядит как призма.
0
Заблокирован
06.05.2014, 14:58
PavelG2010,
на заборе тоже написано.... А там дрова лежат. Обидно, да?

Добавлено через 2 минуты
Как с вами тяжело... Куб цилиндр сфера. Они являются исходными фигурами для построения других. Но это не значит, что получаемя фигура остаётся тем, чем была.
Ну вот если вы к велосипеду прицепите мотор, что будет? Велосипед?
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 44
07.05.2014, 07:48  [ТС]
Для построения параллелепипеда нужна знать высоту длину и ширину.
А для построения цилиндра нужна высота и радиус.
Если строить 4 сторонний цилиндр он буде выгладить как параллелепипед но являться цилиндром.
0
36 / 30 / 13
Регистрация: 08.12.2012
Сообщений: 810
04.06.2015, 12:01
не понятно что означают слова "контейнер" и "локальная система координат"
также что значат цифры например в процедуре glOrtho(0, 2, 0, 2, -1 ,1);
то что это left, right, bottom, top, near, far это везде написано
как эти нули единицы и двойти в окне распределяются , вот вопрос
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.06.2015, 12:01
Помогаю со студенческими работами здесь

В программе реализовать возможность записи объектов в файл и чтения объектов из файла
Добрый день, помогите, пожалуйста! У меня есть программа: #include <iostream> #include <locale.h> using namespace std; class...

LinkedList составленный из объектов класса, как обратиться к полям объектов
Не могу сообразить как обратиться к полям объектов, добавленных в LinkedList. Суть такая: есть класс, имеющий 4 поля (разные типы - String...

Удалить один из объектов и увеличить другой при соприкосновении объектов.
Как сделать так чтобы (Когда Sprite1 дотронулся до Sprite2 тогда sprite2 destroy и Sprite1 + size) Тоисть кто не понял - Когда мы...

Массив объектов базового класса, позволяющий работать с набором объектов — чтение, вывод
Расширить программы с классами. Каждый разработанный класс считать базовым; для каждого такого класса описать производный класс - массив...

В общем как заменить в подборе объектов и так чтобы не сохранял в массив объектов а в лист? с#
Вот код.public static RaycastHit rch; int _my_podbor_switch; public GameObject All_max_go_Bullet = new GameObject; public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru