Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2010, 03:04   #1
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию скорость отрисовки примитивов в delphi (многа букав)

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

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

под словом "игра" понимается трехмерный проект.
а под словом "с нуля" понимается что я не использую готовые алгоритмы,
ни openGL, ни DirectX,
а пишу свои.
т.е. сам создаю такое понятие как "камера", "вертексы", и "полигоны"
из которых потом будет строиться 3d.
впрочем, это будет векторная игра (а почему бы нет?).

я считаю что отобразить на плоском экране некий трехмерный объект,
заданный вертексами можно только одним способом,
а именно - на основании разности V и H углов поворота камеры и вертекса просчитать проекции всех вертексов на экран(канву),
получив таким образом точки, а потом эти точки соединить
в нужном порядке.
кроме того нужно проскитать какие полигоны окажутся над какими,
и отрисовывать их в соответствующем порядке,
чтоб полигон который находится далеко не перекрывал полигон,
который перед камерой.

то что я описал - это фундаментальные функции для отрисовки трехмерных оъектов (ведь так?)
я "реализовал" это на flash.
почему в кавычках?
видать хреново реализовал =(
логически все работает!
я создавал (вручную) новые объекты Point(x,y,z), которые играли роль вертексов в 3d.
создал цикл котоый на каждом кадре (особенности flash)
корректировал отображение этих вертексов на "экране",
на основании положения камеры.
с помощью восьми вертексов я описал куб.
запустил тест - все заработало!!!
моей радости не было предела! =)
но!
при попытке создать хотя бы 100 вертексов
флешка начинались лаги, стабильные такие лаги...
причем лагало пропорционально количеству вертексов,
т.е. все работало правильно, но МЕДЛЕННО!
но ведь обычные игры отрисовывают 100+ полигонов по 60 раз в секунду!
не вертексов! а полигонов! каждый полигон описывается тремя(!) вертексами (я полигонами называю грани, я так привык), и при этом не просто рисует, а еще текстуру натягивает!

посему у меня возникает вопрос.
в программе, например, которая использует openGL,
я видел процедуру типа "нарисовать треугольник"
как я понял она рисует на экране проекцию треугольника,
т.е. то как его видит камера.
т.е. один хрен для каждого вертекса надо выполнить операции расчета проекции на экран, и ведь выполняются же они в больших-то играх,
хотя там вертексов далеко не 100.

вобщем, подытоживая вышесказанное...

1. являются ли методы рисования moveTo(); и lineTo(); в delphi базовыми,
или есть еще более низкоуровневые процедуры, выполняющие аналогичные задачи?

2. реально ли добиться того, чтобы программа 60-80 раз/секунда отрисовывала этак 10000 3d-вертексов? т.е. расчитывала их проекции на экран, определяла порядок расположения (ближний полигон рисуется поверх дальнего) и соединяла их линиями в заданном порядке, образуя полигоны.
3. меня ПОКА не интересуют готовые решения, поэтому прошу не рассказывать мне про все волшебства, которые могут творить
библиотеки openGL и DirectX.
я хочу разобраться в самом-самом примитивном, что есть в программировании, вплоть до представления координат в бинарном виде.

4. прикрепляю пример своей разработки. это flash-ка, если не откроется просто так, открывайте с помощью InternetExplorer или другим браузером.
зелеными точками слева показано примерное расположение куба (координаты вертексов прописывались вручную),
камеры можно двигать, картинка с камерой вид сверху определяет положение виртуальной камеры в горизонтальной плоскости,
камера сбоку определяет высоту виртуальной,
окошко справа - это окно 3d вида, в котором отрисовываются вертексы куба. обработка ограничений и исключений не производится, поэтому будут глюки при критических значениях камеры (прикольно).

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



--------------------
спасиба, что прочитали многабукав =)
Вложения
Тип файла: rar 3d develop(swf).rar (6.1 Кб, 13 просмотров)
xrob вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Asp.net + ajax: Как передать серверу многа id :) Manonia ASP.NET 3 15.09.2010 04:16
Паскаль. Вычерчивание графических примитивов. uropb992 Помощь студентам 3 08.06.2010 17:02
Delphi: наивысшая скорость работы с матрицей ex.cluz Общие вопросы Delphi 5 31.05.2010 16:52
Многа пива liljon Свободное общение 7 11.02.2010 23:43
Вывод примитивов в окно формы CashaL0T Общие вопросы .NET 5 26.11.2008 00:57