![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
возможно этой теме не совсем здесь место, ибо я уже не ахти какой новичек, но поскольку в контексте моего вопроса я все-таки новичек,
решил запостить сюда. я с малых лет мечтал делать игры, но у меня было мало возможностей в получении информации (типа как ЭТО сделать и т.п.) ... пропустив большой кусок своей биографии могу сказать что сейчас дело дошло до того что я, поизучав "исходники движков" к играм, окончательно утвердился в намерении написать свою игру с нуля под словом "игра" понимается трехмерный проект. а под словом "с нуля" понимается что я не использую готовые алгоритмы, ни 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. эта флешка из разряда "я не сдавал на зачет", т.е. не претендует на звание игра года, а служит просто наглядным пособием к моему вопросу. -------------------- спасиба, что прочитали многабукав =) |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |