Господа вот какая проблема встала...
В памяти храню трехмёрный объект, поверхность...
и нада её на экран спроецировать.
А проблема такая хотелось бы это сделать в зависимости от углов обзора
(вертикального и горизонтального) [ну чтоб её вращать можно было ака в матрице]
Искал, искал не как найти не получилось чтоб оба угла учитывались,
сам пыталься вывести чё-то как туплю, не получаеться...
Мож кто подскажет или ссылочку даст...
Ни что в жизни ни даёться так просто как... хотелось бы...
Пасибо конечно, я посмотрю по подробнее...
но по моему меня не совсем поняли (я бегло просмотрел), там дан пример для реализации под Direct3D.
А мне хотелось бы общий агоритм, точнее формулу...
Отобразить 3d точку в 2d с учётом либо углов обзора (2ух)
либо позицции камеры заданой также 3d точкой.
Может кто ещё чаго подскажет ?
Просто время не так много осталось и хотелось, а там, мне кажеться не совсем то...
Ни что в жизни ни даёться так просто как... хотелось бы...
Здравствуйте, freem, Вы писали:
F>А мне хотелось бы общий агоритм, точнее формулу...
Умные дяди пишут вагоны книжек по теории и методологии данного вопроса. Другие, не менее умные, эти книги читают по ночам в поте лица.
А самым умным нужно одну самую главную формулу.
Не позорься, а то ведь тебя к Евклидовским "Элементам" отошлют.
2 AndreyT
Всёгда любил таких вот граждан вроде тебя(вас если угодно)...
Вот смотри, есть такая штука Java мож слыхал ?
и я тебе скажу что очень удобно отсыласть на java.sun.com
по каждому вопросу...а ещё удобней фраза типа "да в инете полно"
или "читай умные книжки", всё это здорово....
и я читаю по возможности но время поджимает...
Понимаешь, и вот тебе встречный вопрос...
если ты не знаешь ответа на вопрос и не имеешь каких либо дельных идей
либо просто залез показать что шибко умный и как тебе в детстве было тяжело и не просто
а шас вот распиздяи вроде меня всё в форумах выпрашивают....не стоит....лучше просто промолчи,
а то слишком уж дёшево смотриться....
Ни что в жизни ни даёться так просто как... хотелось бы...
Здравствуйте, freem, Вы писали:
F>Господа вот какая проблема встала... F>В памяти храню трехмёрный объект, поверхность... F>и нада её на экран спроецировать. F>А проблема такая хотелось бы это сделать в зависимости от углов обзора F>(вертикального и горизонтального) [ну чтоб её вращать можно было ака в матрице] F>Искал, искал не как найти не получилось чтоб оба угла учитывались, F>сам пыталься вывести чё-то как туплю, не получаеться... F>Мож кто подскажет или ссылочку даст...
).
Проблема может отпасть сама собой (трехмерный объект на экран проецируется сам по себе , а вращение и преобразование матриц там уже давно реализовано.
Углы обзора, перспективы, ортогональные проекции можно задать абсолютно любые.
Отвечая на Ваш вопрос в этом топике, Вам всего лишь хотели сказать, что подобные методы уже давно реализованы в графических библиотеках, и не имеет смысла заново изобретать велосипед.
P.S. Если все-таки интересует, как можно координаты 3d точки привести к оконным, то в OpenGL это делается посредством функции gluProject, которая используется аналогично gluUnProject, пример которой тут: http://opengl.gamedev.ru/articles/?id=101
Впрочем, не хочу вас слишком обнадеживать: я вовсе не уверен, что все понял правильно. Два смысловых слоя я уловил, но, по-моему, там был еще и третий... (А&Б Стругацкие, "Жук в муравейнике").
2 Ulys
Пасиба...я знаю, собиралься этим заняться и openGl и DirectX
На счёт велосипеда...
суть ситуации в том что скоро сессия, и ещё много чё нада сделать
и врятли я успею изучить openGl и иже с ним =((
Ни что в жизни ни даёться так просто как... хотелось бы...
Здравствуйте, freem, Вы писали:
F>2 Ulys F>Пасиба...я знаю, собиралься этим заняться и openGl и DirectX F>На счёт велосипеда... F>суть ситуации в том что скоро сессия, и ещё много чё нада сделать F>и врятли я успею изучить openGl и иже с ним =((
На самом деле все намного проще, чем кажется. Я тоже так сначала думал .
Изучать тут практически ничего не придется: исходников полно, если пишешь, например SDI или MDI приложение, набери в яндексе "MFC+OpenGL", скачивай первый же попавшийся исходник, меняй там функцию, отвечающую за вывод изображений (обычно имеет вид
glBegin(GL_ ...);
glVertex3d(...)
glEnd();
), и вперед.
Примерный каркас MFC приложения с использованием дисплейных списков и основными функциями:
По идее, он рабочий, чуть подредактировать названия функций и добавить переменные — должен работать (вырезал кусок из своей программы). Добавлять, больше вроде ничего не надо. Подробнее смотри в ссылках:
Свою первую программку с использованием OGL, я написал минут за десять .
Так что не теряйся, это не так сложно, как может показаться.
P.S. Разборки с матрицами протянутся намного дольше .
Впрочем, не хочу вас слишком обнадеживать: я вовсе не уверен, что все понял правильно. Два смысловых слоя я уловил, но, по-моему, там был еще и третий... (А&Б Стругацкие, "Жук в муравейнике").
Если на OpenGL, то есть gluLookAt. Сама создаст все матрицы, какие нада.
Если же все еще охота руками, то все довольно просто.
Что такое камера — это просто плоскость, на которую проецируется твоя 3D сцена.
Есть множество способов задания плоскости. Проще всего — точка и ортогональный вектор. Уравнение:
a*(x-x0) + b*(y-y0) + c*(z-z0) = 0,где:
a,b,c — коодинаты ортогонального вектора. Размер его не имеет значения, так что можно считать его единичным. x0, y0, z0 — точка в пространстве.
Если переводить это на камеру получается — x0, y0, z0 — точка положение камеры. А вектор — то куда она смотрит.
Параметры вектора можно посчитать, исходя из 2-х углов, если переводить из сферической системы координат в ортогональную.
Теперь делаешь вид, что эта плоскость и есть экран. И проецируешь все точки на свою плоскость, тем самым получая координаты на экране. Формулу не дам — выводить лень. Можешь найти в справочнике по матану (проекция точки на плоскость), или вывести сам. Если сам, то таким способом: координаты проекции можно найти, посчитав точку пересечения прямой, заданной напрявляющим вектором и текущей точкой, с плосокстью проецирования. Если преокция ортогональная, то направляющий вектор прямой есть (a,b,c) — ортогональный вектор плоскости. В результате получаешь 3 координаты проекционной точки (x,y,z). Z координату приравниваешь нулю и не учитываешь.
2 Ulys:
Пасиба за ссылки, книжка по openGL у меня валяеться давно...видать ты наверно прав...
есть тока загвоздка малая, я с MFC не работал...я на java в основном, а си через Borland делал, каюсь.
Попробую нарыть GL4java ну в прочем это уже мои проблемы (гы =) как будто раньше было иначе).
Вобшем если формулу не найду, не вывиду...то наверно openGL
2 JDi aka Сергей:
Ленивый стало быть, главное качество програмиста =))
Попробую, я ещё кодить не пробовал но так задумки есть какие-то, мож получиться....
Пасиба вобшем вам комрады...
Если чё сделаю, раскажу чё и как =)
Ни что в жизни ни даёться так просто как... хотелось бы...
Здравствуйте, freem, Вы писали:
F>если ты не знаешь ответа на вопрос и не имеешь каких либо дельных идей F>либо просто залез показать что шибко умный и как тебе в детстве было тяжело и не просто F>а шас вот распиздяи вроде меня всё в форумах выпрашивают....не стоит....лучше просто промолчи, F>а то слишком уж дёшево смотриться....
Если бы ты был хотя бы внимательным, то было бы легко заметить, что я тебя никуда не посылал.
Поскольку это пустая трата времени, я уже давно для себя уяснил, что если человек не может грамотно и понятно сформулировать вопрос по проблеме, то саму проблему он ни за что не решит без серьёзных усилий в области [само]образования. Вот это я тебе и сказал, причём после того, как ссылки на ресурсы по теме тебе дали, но тебя они не устроили. Видимо, тебе не понравилось, что там читать много надо, напрягаться, да?
Кстати, в школе мне бействительно было нелегко, потому что я шёл нестандартным путём, начав как раз с Евклидовых постулатов и далее через Декарта, Гаусса и мсье Пьера Симона деЛапласа. Чего и тебе рекомендую.
F>А мне хотелось бы общий агоритм, точнее формулу... F>Отобразить 3d точку в 2d с учётом либо углов обзора (2ух) F>либо позицции камеры заданой также 3d точкой.
Впрочем, не хочу вас слишком обнадеживать: я вовсе не уверен, что все понял правильно. Два смысловых слоя я уловил, но, по-моему, там был еще и третий... (А&Б Стругацкие, "Жук в муравейнике").
2 AndreyT
Проблему я решил. решил с помошью аффинных преобразований...
Всё работает, ну почти всё...остались детали...додедлаю выложу...
Насчёт того, что ты там чаго-то понял и что не станешь на меня тратить время...
так а чего тратишь, ты пытаешься мне доказать, что я дурак а ты умный ?
и в школе начанал ты с эвклида...ну молодец...
купи себе булку с маком, две булки купи, скушай и успокойся...мне плевать абсолютно.
Я пришол, суда с вопросом, задал как мне кажеться весьма логичено и доступно...
Получил ответы...
Эсли ты чёго-то не понял, можно попросить уточнить вопрос, если тебе это не нада.
Можно просто промолчать, и забить...
но нет...ты начал доказавыть что ты тут голова...и вот все такие мудни...а ты прям один зияешь на нашем фоне.
Может оно и так...но нада как-то быть скромнее...понимаешь...
Короче не так давно услышал такое словосочетание, которое в некоторой мере (как же) достаточно точно
по моему тебя характерезует..."Залуполог дешовый", это вот мнение моё.
Вот собственно всё, если тебе это не интересно, если ты просто хотел показать какой ты ум.
Показал. Мы все узрели и восхитились...Тока вот всё..ладна харош.
Ни что в жизни ни даёться так просто как... хотелось бы...
Здравствуйте, freem, Вы писали:
F>но нет...ты начал доказавыть что ты тут голова...и вот все такие мудни...а ты прям один зияешь на нашем фоне. F>Может оно и так...но нада как-то быть скромнее...понимаешь...
Я критиковал не тебя лично, а твой подход. И даже не совсем твой личный подход, а подход некоего усреднённого студента, когда сдавать — завтра, а сделать надо много.
Ты же в ответ проехался по мне лично. Почувствуй, как говорится, разницу.
Советов я тебе давать никаких не буду, ты ещё не готов их слышать. Хочешь быть "drag'n'drop" программером — на здоровье. В конце концов, ничего страшного в этом нет, милиионы леммингов уже выбрали этот путь.
Удачи.
Здравствуйте, freem, Вы писали:
F>Пасибо конечно, я посмотрю по подробнее... F>но по моему меня не совсем поняли (я бегло просмотрел), там дан пример для реализации под Direct3D. F>А мне хотелось бы общий агоритм, точнее формулу... F>Отобразить 3d точку в 2d с учётом либо углов обзора (2ух) F>либо позицции камеры заданой также 3d точкой.
F>Может кто ещё чаго подскажет ? F>Просто время не так много осталось и хотелось, а там, мне кажеться не совсем то...
Читаешь (или читаете, как больше нравится) книгу Иванова и Батракова "Программирование трехмерной компьютерной графики".
Там есть формулы для такой задачки. В более общем виде такие преобразования
описываются в фотограмметрии (наука типа такая ). Можно взять учебник,
например Лобанова, но голову погреть здорово придется