Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

3Д движло своими рукаим...

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> 3Д движло своими рукаим...
Имя
Сообщение << Старые топики   Новые топики >>
3Д движло своими рукаим... - 2007-04-20 18:24:00.370000   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
Я понимаю, что есть ОПЕН ГЛ, директ ИКС, но всёже хочется самому написать алгоритм наиболее удачного "движка" для вывода 3Д изображений.
Начну: недавно дописал один движок, он мне очень понравился (правда есть ещё 1 глючёк, но это дело времени), вот его описание:
получаем проэкции вершин: проводим прямые от глаза до всех вержин сцены.
организуем вложенный цикл, который опросит каждый пиксель экрана.
внутри цикла проверка на принадлежность его к полигонам, через координаты проэкций вершин.
выводим точку цветом ближайшего полигона: проводим прямую из глаза, через текущий пиксель экрана, узнаём расстояния от глаза, до пересечений прямой с полигонами, которым принадлежит текущая точка.
конец циклов.
когда картинка готова её можно обработать, но это уже другая история…
а какие у вас будут идеи и соображения на эту тему ???
Post #: 1
RE: 3Д движло своими рукаим... - 2007-04-20 18:31:05   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
Софт-рендеринг чёли?
Делал. Вроде удачно. Только непонятно нафига.



Демка с сорцами: http://systemhalt.nm.ru/graphic/MyEditor.rar

Кста, покажи свой движок. А то мне чёта не верится.
Post #: 2
RE: 3Д движло своими рукаим... - 2007-04-20 19:11:09.123333   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
Во первых: ты свой "движок" не довёл до ума: хотябы: в левом, нижнем окне обьект вращается с верху в низ, а мыша идёт лево-право…
и де у тебя хоть какая-то реалистичность? нах ты вывел окантовку полигонов? почему полигоны(треугольники) одного квадрата на кубе - бывают разных цветов? почему обьект "скачет" (верщины при вращении - дёргаются)? и ещё многа таких почему… но глвное - ПОЧЕМУ ТАК МЕДЛЕННО ????? почему так многа строк кода ????? свои сорцы не покажу, пока не перейду на визуал Си, щас движно на Паскале, под дос… И ещё основной вопрос не в исходниках и реализации движла, а в его АЛГОРИТМЕ !!!
З.Ы. И де у тя там выставляется угол зрения ???
З.З.Ы. тока заметил, что все обьекты вращаются тока в одну сторону :D:D:D:D
кароче жги найт дальше… и если опишеш понятным языком свой алгоритм, продолжим дискуссию, иначе - нет.
Post #: 3
RE: 3Д движло своими рукаим... - 2007-04-20 19:21:07.866666   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
Мдя….
Post #: 4
RE: 3Д движло своими рукаим... - 2007-04-20 19:24:16.666666   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
Итаг, по порядку :D:D

quote:

ORIGINAL: T
Во первых: ты свой "движок" не довёл до ума

Это была лаба в универе на втором курсе (два года назад). Всё что нужно было - там реализовано. Если хочешь - можем посоревноваться в написании софт-рендера. Тока надо чётко определить параметры, по которым будет оцениваться лучший и сроки разработки.

quote:

ORIGINAL: T
в левом, нижнем окне обьект вращается с верху в низ, а мыша идёт лево-право…

Так задумано. Там картинки синхронизированы. В одном так вертится, в другом эдак, а в третьем через жо.

quote:

ORIGINAL: T
и де у тебя хоть какая-то реалистичность?

А надо? Смотри камент нумбер 1.

quote:

ORIGINAL: T
нах ты вывел окантовку полигонов?

Я так захотел. В чём проблема?

quote:

ORIGINAL: T
почему полигоны(треугольники) одного квадрата на кубе - бывают разных цветов?

Где-то при вычислении нормали к поверхности ошибку сделал.

quote:

ORIGINAL: T
почему обьект "скачет" (верщины при вращении - дёргаются)?

Ммм…. а как должно быть? Чё-та не понимаю. На сколько пикселей мышу сдвинул, на столько и повернулся объект.

quote:

ORIGINAL: T
и ещё многа таких почему… но глвное - ПОЧЕМУ ТАК МЕДЛЕННО ?????

Потому что через GDI.

quote:

ORIGINAL: T
почему так многа строк кода ?????

Потому что Delphi. На C++ или C# было бы компактнее.

quote:

ORIGINAL: T
свои сорцы не покажу, пока не перейду на визуал Си, щас движно на Паскале, под дос…

Ты свои сорцы не покажешь потому что у тебя нечего показывать. Ты, как и Technologist только трындеть можете.

quote:

ORIGINAL: T
И ещё основной вопрос не в исходниках и реализации движла, а в его АЛГОРИТМЕ !!!

Тебе блок-схему нарисовать? :D:D:D:D

quote:

ORIGINAL: T
З.Ы. И де у тя там выставляется угол зрения ???

Дык, мышкой. Не понял вопроса.

quote:

ORIGINAL: T
кароче жги найт дальше… и если опишеш понятным языком свой алгоритм, продолжим дискуссию, иначе - нет.

Если ты не покажешь доказательство того, что ты хоть что-нить написал, то ты трепло. Хотя, я и сейчас в это нисколько не сомневаюсь.

quote:

ORIGINAL: T
и если опишеш понятным языком свой алгоритм, продолжим дискуссию, иначе - нет.

Из файла считываются вершины в массив.
Каждая вершина умножается на матрицы вращения, перемещения (аналог glRotate, glTranslate), потом с помощью функций GDI (а точнее методов TCanvas) выводятся на форму.

Post #: 5
RE: 3Д движло своими рукаим... - 2007-04-20 19:29:36.556666   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
ты туп на столько, что даже спорить с тобой не хочу… ты видел как я выложил алгоритм ??? вот и ты так выложи алгоритм, и если ты допустил ошибку в прощёте нормали, о чём может итти реч ? ты нуб, я не опущусь до твоего уровня, я небуду хвастать недоделкой. Или описуй алгоритм, или вали. ТОП ДЛЯ АЛГОРИТМОВ !!!!!!!!!!!
Post #: 6
RE: 3Д движло своими рукаим... - 2007-04-20 19:40:18.100000   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
quote:

ORIGINAL: T
ты туп на столько, что даже спорить с тобой не хочу… ты видел как я выложил алгоритм ??? вот и ты так выложи алгоритм, и если ты допустил ошибку в прощёте нормали, о чём может итти реч ? ты нуб, я не опущусь до твоего уровня, я небуду хватать недоделкой. Или описуй алгоритм, или вали. ТОП ДЛЯ АЛГОРИТМОВ !!!!!!!!!!!

Не плачь, мама купит тебе Пиковит ;):D:D:D
Post #: 7
RE: 3Д движло своими рукаим... - 2007-04-20 19:41:39.303333   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
кому моча в голову бьёт, говорите мыло, я отошлю недоделку свою…..
Post #: 8
RE: 3Д движло своими рукаим... - 2007-04-20 19:42:19.240000   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
Выкладывай тут. На суд всего честного люда :D
Post #: 9
RE: 3Д движло своими рукаим... - 2007-04-20 19:44:06.306666   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36

quote:

ORIGINAL: NightmareZz

quote:

ORIGINAL: T
ты туп на столько, что даже спорить с тобой не хочу… ты видел как я выложил алгоритм ??? вот и ты так выложи алгоритм, и если ты допустил ошибку в прощёте нормали, о чём может итти реч ? ты нуб, я не опущусь до твоего уровня, я небуду хватать недоделкой. Или описуй алгоритм, или вали. ТОП ДЛЯ АЛГОРИТМОВ !!!!!!!!!!!

Не плачь, мама купит тебе Пиковит ;):D:D:D

ну и дыбил… тока и умееш, что срать свей рожей на форуме…
Post #: 10
RE: 3Д движло своими рукаим... - 2007-04-20 19:56:36.143333   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
Post #: 11
RE: 3Д движло своими рукаим... - 2007-04-20 20:36:43.906666   
Technologist

Сообщений: 3590
Оценки: 0
Присоединился: 2006-10-28 20:28:06.943333

quote:

ORIGINAL: T

ну и дыбил… тока и умееш, что срать свей рожей на форуме…

И не только срать

Post #: 12
RE: 3Д движло своими рукаим... - 2007-04-20 20:40:01.240000   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36

quote:

ORIGINAL: Technologist

quote:

ORIGINAL: T

ну и дыбил… тока и умееш, что срать свей рожей на форуме…

И не только срать



Да… найт просто ЦМОКТУНЧИК !!! Сосёт на лево и право ! Интересно, а какой Йух папин, а какой мамин ???
Post #: 13
RE: 3Д движло своими рукаим... - 2007-04-20 20:40:39.536666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
T, NightmareZz, вы откровенно достали сраться в форуме. обменяйтесь аськами и сритесь по аське. или приватными сообщениями пользуйтесь для этой цели.

по теме.
T, ты определись зачем тебе это.
во-первых, что DDraw, что OGL – это не движки, а всего лишь библиотеки рендеринга. даже правильнее говорить, не библиотеки, а интерфейсы – api, – под которыми может прятаться как софтверный рендеринг, так и хардварный. если хочеться посмотреть на движок, слазай на sf.net и поищи там, по словам "3D engine". например, там можно найти такую фигню как ogre.
во-вторых, как уже упомянуто, бонусы DDraw и OGL в возможности хардварного ускорения. вручную ты этого не сделаешь.
то есть это я к чему, идя таким путём, ты не получишь "наиболее удачного" движка.

насколько я знаю, в хардваре делается не так, как предлагаешь ты, а чуть иначе. все полигоны проецируются на плоскость экрана, и заодно складываются в z-buffer, специальную структурку, для выявления ситуации когда один полигон заслоняет другой. то есть если две проекции пересекаются на экране, то лезем в z-buffer, и смотрим какой полигон дальше. там может возникнуть ситуация когда непонятно – но тут просто дополнительные заморочки возникают, которые, как правило, не нужны, ибо всё понятно и без них. а когда определились какие же полигоны (уж 2d-полигоны) надо рисовать на экране, там дальше довольно-таки приятно обсчитываются цвета конкретных точек.|

а вообще если интересно как всё это на практике делать, в X'ах есть библиотечка Mesa, которая как раз софтверный OGL реализует, возьми и поковыряй.
Post #: 14
RE: 3Д движло своими рукаим... - 2007-04-20 21:26:47.213333   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
Спасибо Эрго, извеняюсь реально, если я перегнул палку. Да, я понимаю все прелести хардового рендеринга, но глядя на алгоритм рисования всех нынешних прог, я ох…еваю. У меня всё получается и проще и быстрей, почему, я панять немогу. Под досом, на разрешении 320*200, не использую память под Z-буфер, я умею рисовать даже грани которые накладываются, при этом частота кадров 20-30 в сек, кстати, скинь пожалуйста свой имейл, я тебе пришлю сорц, если хош канеша… просто там есть мелкая ошибка, я её никак немогу устранить, вот када устраню, буду дальше развивать ддвижок.
Post #: 15
RE: 3Д движло своими рукаим... - 2007-04-21 11:54:50.223333   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
Блин, ну дак покажи свою прогу людям. Я тоже могу сказать, что дома телепортатор собрал… но никому не покажу, потому что там есть ошибка и мне стыдно недоделанную технику демонстрировать. А потом буду распинаться как эта хренотень классно работает. Ток никто мне не поверит.
Post #: 16
RE: 3Д движло своими рукаим... - 2007-04-21 12:52:17.673333   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
Я сказал: мыло в ПМ, отошлю
Post #: 17
RE: 3Д движло своими рукаим... - 2007-04-21 13:03:34.620000   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
Всё с тобой понятно :D:D:D:D
Post #: 18
RE: 3Д движло своими рукаим... - 2007-04-22 01:32:17.133333   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
вот: http://slil.ru/24271873 прошу не судить сторого. Там увидите вращающийся кубик, всё в чёрнобелых тонах, по идее цвет должен темнеть от преближения к "глазу", но я там паранул, обещаю исправить, и выложить… иногда, некоторые грани всёже имеют правильную раскраску, это происходит, если угол нормали к плоскости экрана больше 45 градусов… а када угол - острый, увы чёто в формуле нетак… всё переработаю, выложу… а пока есть тока это… это работает по вышеописаному алгоритму, выводит напрямую в видеопамять, изза чего не пашет на некоторых компах ))).
Post #: 19
RE: 3Д движло своими рукаим... - 2007-04-22 21:11:48.173333   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
ну хоть ктонить смарел ?
Post #: 20
RE: 3Д движло своими рукаим... - 2007-04-22 21:32:42.953333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
посмотрел, вращает. ;)

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

запросто может случиться так, что крутить кубик на cpu, быстрее чем на gpu, просто потому, что для этой простой задачи, можно использовать более простые алгоритмы, нежели те, что используются gpu. хотя вряд ли, тк придётся сильнее грузить agp – в случае хардвара, как я понимаю, по agp передаются только координаты вершин и матрицы преобразований. тебе же приходиться цвет каждой точки прокидывать.

правда не стоит забывать и то, про что говорил вирт – программы имеют тенденцию расти до тех пор, пока не сожрут все ресурсы компа. программы со временем становяться сложнее и тормознее, но рост сложности не соответствует росту функциональности. есть такая фигня. да и у меня есть гипотеза, что intel, amd и nvidia скидываются, и тайно приплачивают разработчикам игр, чтобы те писали игры потормознее, чтобы геймеры всё время апгрейдили бы свои компы. :D
Post #: 21
RE: 3Д движло своими рукаим... - 2007-04-22 21:35:33.473333   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
quote:

ORIGINAL: T
ну хоть ктонить смарел ?

Виста не кушаед. В ближайшее время гляну под XP - отпишусь.



Post #: 22
RE: 3Д движло своими рукаим... - 2007-04-22 21:40:37.086666   
inf_loa_d

Сообщений: 261
Оценки: 0
Присоединился: 2007-02-05 00:27:52.070000
Найт, не в висте дело. Вчера при запуске чат клиента у мну та ж хрень была.
Воть только само по себе как то отладчиком обошлося)))
Post #: 23
RE: 3Д движло своими рукаим... - 2007-04-22 21:46:24.996666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25

quote:

ORIGINAL: NightmareZz

quote:

ORIGINAL: T
ну хоть ктонить смарел ?

Виста не кушаед. В ближайшее время гляну под XP - отпишусь.

а всякие dosbox'ы под вистой не запускаются?
Post #: 24
RE: 3Д движло своими рукаим... - 2007-04-22 21:50:09.296666   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
quote:

ORIGINAL: inf_loa_d
Найт, не в висте дело. Вчера при запуске чат клиента у мну та ж хрень была.
Воть только само по себе как то отладчиком обошлося)))

Шоэто у тя за полноэкранные досовские чат-клиенты? Дайте два!

quote:

ORIGINAL: rgo
а всякие dosbox'ы под вистой не запускаются?

Хз, не пробовал.
Post #: 25
RE: 3Д движло своими рукаим... - 2007-04-22 22:27:38.670000   
Technologist

Сообщений: 3590
Оценки: 0
Присоединился: 2006-10-28 20:28:06.943333
quote:

Виста не кушаед.

Лишнее доказательство убогости висты.
Post #: 26
RE: 3Д движло своими рукаим... - 2007-04-23 00:55:31.063333   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
прикол в том, что эта прога умело очень быстро откидывает не выводящиеся обьекты, работает оч. быстро, но чем выхе разрешение экрана, тем она тормознутей… увы… сделай я разрешение 640 на 400, она будет пахать в 4 раза медленней, НО ! на число граней в сцене ей практически нас-рать… поэтому подключив к рэндерингу хотябы 32 битные расширения проца, получим нормальную скорость… кароче я исправлю возникшую фигню, и выложу, зацените… прошу заценить размер файла 18кб ))
Post #: 27
RE: 3Д движло своими рукаим... - 2007-04-23 11:04:24.116666   
userx

Сообщений: 16
Оценки: 0
Присоединился: 2007-04-18 11:20:32.056666
T, а на svgalib не пробовал? у тебя много асма в коде?
Post #: 28
RE: 3Д движло своими рукаим... - 2007-04-23 14:51:31.220000   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
Да, под DOSBox'ом таки запустилось :)
Post #: 29
RE: 3Д движло своими рукаим... - 2007-04-23 15:44:58.180000   
JTG

Сообщений: 1189
Оценки: 0
Присоединился: 2007-03-05 11:56:01.993333
Изобретаем велосипед… Кто знает, может правда чё-нить выйдет. Скиньте двиг, ссылка не работает JTG@gala.net



ЗЫ: дема пишет в A000:0000 , в таком случае всё, что угодно быстро бегать будет, нормальный вывод тоже ведь время порядком отнимает
Post #: 30
RE: 3Д движло своими рукаим... - 2007-04-23 15:55:57.893333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25

quote:

ORIGINAL: T

на число граней в сцене ей практически нас-рать…

а как ты без z-buffer'а отсекаешь те части граней, которые рисовать не надо? или у тебя всё на один выпуклый многогранник рассчитано?
Post #: 31
RE: 3Д движло своими рукаим... - 2007-04-23 16:10:09.920000   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
quote:

ORIGINAL: userx
T, а на svgalib не пробовал? у тебя много асма  коде?

На асме у меня только инициализация грифи-карты в режим 320*200 1байт на цвет, через 10-е прерывание. И вывод пикселей…
Post #: 32
RE: 3Д движло своими рукаим... - 2007-04-23 16:33:39.970000   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
quote:

ORIGINAL: rgo
quote:

ORIGINAL: T
на число граней в сцене ей практически нас-рать…

а как ты без z-buffer'а отсекаешь те части граней, которые рисовать не надо? или у тебя всё на один выпуклый многогранник рассчитано?

движок выводит скольки угодно гранники, но односторонние (полигоны), и все точки должны лежать в одной плоскости(иначе будут глючки), возможность использования Зэд-буфера есть, но т.к. я чёто напорол с формулой вычисления расстояния от глаза до заданой точки на плоскости, его включать нельзя, ато будут глюки…
Вот процедура, в которой дето ошибка… я подозреваю, что нехватает точности… но где…

procedure lcp(const L1, L2, P1, P2, P3: point3d;var Cross: point3d);
var
A, B, C, D, T: real;
begin
A := P1.Y * (P2.Z - P3.Z) + P2.Y * (P3.Z - P1.Z) + P3.Y * (P1.Z - P2.Z);
B := P1.Z * (P2.X - P3.X) + P2.Z * (P3.X - P1.X) + P3.Z * (P1.X - P2.X);
C := P1.X * (P2.Y - P3.Y) + P2.X * (P3.Y - P1.Y) + P3.X * (P1.Y - P2.Y);
D := - (A * P1.X + B * P1.Y + C * P1.Z);
T := (A * L1.X + B * L1.Y + C * L1.Z + D) / A * (L2.X - L1.X) + B * (L2.Y - L1.Y) + C * (L2.Z - L1.Z);
Cross.X := L1.X + T * (L2.X - L1.X);
Cross.Y := L1.Y + T * (L2.Y - L1.Y);
Cross.Z := L1.Z + T * (L2.Z - L1.Z);
end;

описание:
L1,2 - точки лежащие на прямой
Р1,2,3 - точки лежащие на плоскости
Cross - точка пересечения прямой и плоскости

использование:
используется дважды, первый раз при получении проэкций вершин на экран, второй раз при выводе всех пикселей пренадлежащих полигону

глюк:
при втором использовании, если нормаль полигона лежит под острым углом к плоскости экрана, расстояние до пикселей считается неправильно ((((
Post #: 33
RE: 3Д движло своими рукаим... - 2007-04-23 18:38:47.003333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
мне лень разбираться… но, кажется мне что у тебя излишне просто, или ты какие-то предположения на относительное расположение точек накладываешь? ведь там получается система трёх линейных уравнений, с тремя неизвестными. я б прикрепил файлик с выкладками, да форум, сцуко, pdf не хочет кушать, а если его в jpg перегнать, то либо "файл слишком большой", либо нечитабельно (latex2png зараза, как выясняется не умеет antialias делать). а без индексов сверху и снизу, и греческого алфавита я не умею :)
Post #: 34
RE: 3Д движло своими рукаим... - 2007-04-23 18:44:04.943333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25

quote:

ORIGINAL: T

quote:

ORIGINAL: rgo
quote:

ORIGINAL: T
на число граней в сцене ей практически нас-рать…

а как ты без z-buffer'а отсекаешь те части граней, которые рисовать не надо? или у тебя всё на один выпуклый многогранник рассчитано?

движок выводит скольки угодно гранники, но односторонние (полигоны), и все точки должны лежать в одной плоскости(иначе будут глючки), возможность использования Зэд-буфера есть, но т.к. я чёто напорол с формулой вычисления расстояния от глаза до заданой точки на плоскости, его включать нельзя, ато будут глюки…

я не про то. если многогранник невыпуклый. или просто два многогранника, один заслоняет часть другого, чего будет?
Post #: 35
RE: 3Д движло своими рукаим... - 2007-04-23 18:54:19.453333   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
quote:

ORIGINAL: rgo
quote:

ORIGINAL: T
quote:

ORIGINAL: rgo
quote:

ORIGINAL: T
на число граней в сцене ей практически нас-рать…

а как ты без z-buffer'а отсекаешь те части граней, которые рисовать не надо? или у тебя всё на один выпуклый многогранник рассчитано?

движок выводит скольки угодно гранники, но односторонние (полигоны), и все точки должны лежать в одной плоскости(иначе будут глючки), возможность использования Зэд-буфера есть, но т.к. я чёто напорол с формулой вычисления расстояния от глаза до заданой точки на плоскости, его включать нельзя, ато будут глюки…

я не про то. если многогранник невыпуклый. или просто два многогранника, один заслоняет часть другого, чего будет?

Будет всё пучком, как в Зэд-буферизации, а ели многогранник повёрнут попой(не лицом), то он не выводится… но в свойствах можно указать его двухстроннесть…
И ещё: прозьба: если кто-то любит(умеет) математику, напишите функцию, которая будет позвращать координаты точки пересечения прямой с плоскостью(всё не ограничено и задано точка лежащими на обьёектах). Ато я написал одну функцию… и всё… на большее меня не хватает… я подозреваю, что лучше переписать с тригонометрией, т.к. в моей функции, када плоскость паралельна прямой, нейки параметр, на который делят, равен НУЛЮ, а если плоскость под очень острым углом, этот параметр идёт к НУЛЮ, и возникают глюки… для тригонометрии же, ПОХ какой там угол…
Post #: 36
RE: 3Д движло своими рукаим... - 2007-04-23 19:12:20.340000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: T
Будет всё пучком, как в Зэд-буферизации, а ели многогранник повёрнут попой(не лицом), то он не выводится… но в свойствах можно указать его двухстроннесть…

неее. а если он повёрнут харей, но заслонён наполовину?
quote:

ORIGINAL: T
И ещё: прозьба: если кто-то любит(умеет) математику, напишите функцию, которая будет позвращать координаты точки пересечения прямой с плоскостью(всё не ограничено и задано точка лежащими на обьёектах). Ато я написал одну функцию… и всё… на большее меня не хватает… я подозреваю, что лучше переписать с тригонометрией, т.к. в моей функции, када плоскость паралельна прямой, нейки параметр, на который делят, равен НУЛЮ, а если плоскость под очень острым углом, этот параметр идёт к НУЛЮ, и возникают глюки… для тригонометрии же, ПОХ какой там угол…


нафига тут тригонометрия? считать арктангенсы, чтобы потом от них синусы брать? всё равно от неопределённости в случае параллельности она тебя не избавит. каким образом не считай, всё равно, если прямую пересекающую плоскость крутить так, чтобы она стремилась бы к параллельности с этой плоскостью, то координаты точки пересечения убегут в бесконечность.

хочешь я тебе pdf'ку вышлю с векторным уравнением? я её сделал, только, говорю, прицепить не получилось. системы линейных уравнений крамером решать умеешь? там может получиться гадость, но… будет три деления, вероятно где-нибудь получиться бесконечность, но это же проверяется по результату. или в паскале не проверяется? ну если не проверяется, то просто дискриминант системы один раз проверить, чтобы он не сильно маленький был бы по модулю, и всё.
Post #: 37
RE: 3Д движло своими рукаим... - 2007-04-24 19:35:13.500000   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
кароче вот сорц:
{$N+}
uses
crt,mygr;

label
beg;

type
point3d = record x,y,z:real;
end;{}
ipoint3d = record x,y,z:integer;
end;{}

const
nt=8;
np=12;
iz:ipoint3d=(x:0;y:0;z:-150);
gt:array [1..nt] of ipoint3d=
((x:-100;y:-100;z:300),
(x:100;y:-100;z:300),
(x:100;y:100;z:300),
(x:-100;y:100;z:300),

(x:-100;y:-100;z:100),
(x:100;y:-100;z:100),
(x:100;y:100;z:100),
(x:-100;y:100;z:100));

p:array [1..np] of record a,b,c:byte; end=
((a:1;b:2;c:4),
(a:2;b:3;c:4),
(a:2;b:6;c:3),
(a:6;b:7;c:3),
(a:6;b:5;c:7),
(a:5;b:8;c:7),
(a:1;b:8;c:5),
(a:1;b:4;c:8),
(a:5;b:6;c:2),
(a:5;b:2;c:1),
(a:3;b:7;c:8),
(a:4;b:3;c:8));

s:array [1..4] of ipoint3d=
((x:-160;y:-100;z:0),
(x:160;y:-100;z:0),
(x:160;y:100;z:0),
(x:-160;y:100;z:0));{}

var
ix,iy,i,tmr,gd,gm,k1,k2,k3:integer;
pos,cpo:ipoint3d;
t:array [1..nt] of ipoint3d;
it:array [1..nt] of ipoint3d;
cp:array[1..nt] of ipoint3d;
ayz,axy,azx:real;
key:char;
free:boolean;

procedure ilcp (L,l1,P, p1, p2 : ipoint3d; var cross : ipoint3d);
var
m1,m2,m3,g:extended;
d:point3d;
begin
l1.x:=l1.x-l.x;
l1.y:=l1.y-l.y;
l1.z:=l1.z-l.z;
p1.x:=p1.x-p.x;
p1.y:=p1.y-p.y;
p1.z:=p1.z-p.z;
p2.x:=p2.x-p.x;
p2.y:=p2.y-p.y;
p2.z:=p2.z-p.z;
d.x:=l.x-p.x;
d.y:=l.y-p.y;
d.z:=l.z-p.z;
m1 := p1.y * p2.z - p1.z * p2.y;
m2 := p1.x * p2.z - p1.z * p2.x;
m3 := p1.x * p2.y - p1.y * p2.x;
g := (l1.x*m1-l1.y*m2+l1.z*m3);
if g<>0 then
g := (d.x *m1- d.y*m2+ d.z*m3)/g;
cross.x:=round(l.x+g*l1.x);
cross.y:=round(l.y+g*l1.y);
cross.z:=round(l.z+g*l1.z);
end;{}

procedure turn(var x,y:integer;a:real);
var
nx:real;
begin
nx:=x*sin(a)+y*cos(a);
y:=round(-x*cos(a)+y*sin(a));
x:=round(nx);
end;

function onis(x,y,x1,y1,x2,y2,x3,y3:integer):boolean;
begin
onis:=false;
if ((y-y1)*(x2-x1)-(x-x1)*(y2-y1)<=0) and
((y-y2)*(x3-x2)-(x-x2)*(y3-y2)<=0) and
((y-y3)*(x1-x3)-(x-x3)*(y1-y3)<=0) then onis:=true;{}
end;

function range(xx,yy,zz:real):integer;
begin
{ range:=random(250);{}
{ zz:=zz-iz.z;
{ xx:=xx-1000;{}
{ range:=round(sqrt(xx*xx+yy*yy+zz*zz)/20);{}
{ if zz>-3000 then range:=250;{}
{ if xx>100 then range:=250;{}
range:=round(zz/10);{}
end;

begin
initgraph(19);{15 12 NELZA}

for i:=1 to 255 do
setrgbcolor(255-i,0,255-i,0);
beg:
repeat
inc(tmr);
{ azx:=pi/2;{}
axy:=axy+k1/100;{}
azx:=azx+k2/100;{}
ayz:=ayz+k3/100;{}

for i:=1 to nt do
begin
t.x:=gt.x;
t.y:=gt.y;
t.z:=gt.z;
end;

for i:=1 to nt do
begin
t.z:=t.z-200;
turn(t.x,t.y,axy);
turn(t.x,t.z,azx);
turn(t.y,t.z,ayz);
t.z:=t.z+200;
end;

for i:=1 to nt do ilcp(iz,t,s[4],s[2],s[3],cp);

for pos.y:=-100 to 100 do
for pos.x:=-160 to 160 do
begin
for i:=1 to np do
if onis(pos.x,pos.y,cp[p.a].x,cp[p.a].y,
cp[p.b].x,cp[p.b].y,
cp[p.c].x,cp[p.c].y) then
begin
ilcp(iz,pos,t[p.a],t[p.b],t[p.c],cpo);
putpixel(pos.x+160,pos.y+100,range(cpo.x,cpo.y,cpo.z));
free:=false;
i:=np;
end;
if free then putpixel(pos.x+160,pos.y+100,0);
free:=true;
end;
until keypressed;
key:=readkey;
if key='+' then k1:=k1+1;
if key='-' then k1:=k1-1;
if key='6' then k2:=k2+1;
if key='4' then k2:=k2-1;
if key='2' then k3:=k3+1;
if key='8' then k3:=k3-1;
if key&lt;&gt;'q' then goto beg;
end.
я так и не вдуплил в чём ошибка… если ктонить покажет, буду благодарен…
Post #: 38
Страниц:  [1]
Все форумы >> [Прочее] >> 3Д движло своими рукаим...







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.