Чт, 21 Мар 2019
Механоиды 3
Приветствую Вас Гость | RSS
Главная страница | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Форум "Механоиды 3" » Рабочий раздел. » Графика » Графика: 3D модели и OpenGL (свой движок)
Графика: 3D модели и OpenGL (свой движок)
YandersenДата: Вт, 14 Апр 2009, 22:26 | Сообщение # 1
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Надеюсь, энтузиазм на тему "Напишем движок сами!" всё же возьмет верх. Предлагаю тут раскладывать по полочкам всё, что касается моделей и по-тихоньку программно грызть код и описывать их.
Поскольку сам имею опыт только с OpenGL, то предлагаю использовать эту графическую библиотеку для движка, со всеми вытекающими в модели последствиями подробностями.
Поехали?

Добавлено (2009-04-10, 7:34 Am)
---------------------------------------------
Итак, раз Механоиды - гуля о технике, это существенно упрощает концепцию игровых моделей. Щас поясню, что имею в виду.
К примеру, возьмём всем известную Контру. Там поверхность моделей непостоянна - при изменении поз тела изменяются координаты вершин модели (модель, видимо, пересчитывается перед каждой перерисовкой). Но если модель - механика, состоящая из отдельных деталей, каждая из которых не морфируется, а лишь движется относительно других деталей, нет надобности пересчитывать модель - просто перед каждой перерисовкой каждой детали нужно задать углы, повороты и положения деталей. Не нужно постоянно обсчитывать вершины и рисовать поверхность в реал-тайме (без использования дисплейных списков) - можно заранее составить отдельные дисплейные списки для каждой детали, а затем лишь пользоваться функциями glRotate и glTranslate перед отрисовкой диспл.списков. Результат - высокая детализация, быстрая отрисовка, меньшая сложность движка, меньше невнятных данных в файле модели, простая структура модели.
Те, кто имеет опыт с OpenGL, меня поймут.

Итак, структура модели:
модель состоит из деталей,
детали состоят из поверхностей.
Далее. Что есть что и как работает.
Кто игрался с 3D Max, скорее всего, знает, как привязывать объекты друг к другу. Т.е. есть главный объект (к примеру, кисть руки), к нему привязаны дочерние объекты (фаланги пальцев), у них, в свою очередь есть свои дочерние объекты (одна фаланга привязана к другой, та к следующей, образуя цепи, что мы называем пальцами. smile При двигании объекта (тут - руки) автоматически двигаются и все его дочернии объекты (пальцы, фаланга за фалангой), так что их ориентация относительно объекта-прародителя не меняется (если будем двигать палец, все нижележащие фаланги также придут в движение, но вся рука останется неподвижной). Такая общеизвестная концепция дочерне-прародительных отношений объектов. smile Прошу заметить: у каждого объекта может быть сколько угодно зависимых (дочерних/привязанных_к_нему) объектов, но лишь ОДИН прародитель. Иначе - багогенно. wink
Ну так вот. Модель, в целом - набор деталей ("деталь" = "объект"), списков анимации (ID детали, на сколько передвинуть, на сколько градусов поворнуть, за сколько милисекунд) и т.д.. !Должна быть указана одна главная деталь (деталь, не имеющая прародителей; аналог тела - к нему крепится всё остальное). Каждая деталь имеет список дочерних для неё деталей и их ориентаций (вектор переноса и угол поворота).
С деталями, в общем плане, всё. Далее. Деталь состоит из поверхностей. Поверхность - отдельнорисуемый примитив (полигон), все вершины которого однородны. Т.е. перед рисовкой примитива, образующего поверхность, сначала выбирается текстура, цвет (да-да, все вершины одного цвета, без всяких там убогих интерполяций - для разукраски универсально юзать текстуры), а затем отрисовываются все вершины, задаваемые аттрибуты каждой из которых - координаты нормали, текстуры и вершины. ИМХО, универсально.
И тут уже есть, с чего начать - написание класса поверхности. Что-то вроде:

class TSurface{
int PrimitiveType; //GL_POLYGON, GL_TRIANGLE_STRIP...
int TextureID; //Идентификатор (номер) ранее загруженной текстуры
float Color[3]; //Цвет поверхности
int VertexN; //Количество вершин
float *Nxyz; //Указатель на массив нормалей
float *Tst; //Указатель на массив координат текстуры
float *Vxyz; //Указатель на массив вершин
};

Примерно так. ПРИМЕРНО. Бо нормали, текстуры (2D), цвета и вершины - всё, чем я пользовался пока - всё, что я могу перечислить. Кто знает ещё необходимые аттрибуты - вперёд.
Затем нужно написать функцию по отрисовке поверности:

void DrawSurface(TSurface *Surface){
...
}

Ну и т.д. Это рыба. Просто показываю, с чего, ИМХО, надо начинать - с самого простого и универсального, с самого низа.
Ну всё, на работу просплю, блин, пора уже давно было спать лечь... angry

Добавлено (2009-04-14, 10:25 Pm)
---------------------------------------------
Прошёлся по всем функциям OpenGL в поисках того, что нужно, и выясняя то, что можно. Как я понимаю, в целях экономии денег на психиаторов, ни у кого не возникло желания пользоваться всякими сплайнами, курвами и другой заверченной байдой, отличной от привычной полигонной геометрии? Ну тогда вот, что хочу вынести на обзор.
Любого рода рисовка геометрии проходит внутри операторных функций glBegin(...) - glEnd() или с помощью функций рисования массивов вершин. Между ними задаются всякого рода аттрибуты вершин. Есть что-то полностью ясное и законченное - функции, задающие атрибуты вершин, можно пересчитать по пальцам:
glTexCoord,
glColor или glIndex,
glNormal,
glVertex,
glEdgeFlag,
glMaterial,
glArrayElement,
glEvalCoord,
glEvalPoint,
а также glCallList или glCallLists.
Из перечисленного, ИМХО, врядли понадобяться выделенные серым цветом (а glCallList и glCallLists просто пока не в теме); то, что выделено красным - не всосу ваще, что это - кто знает, отпишитесь, плиз. Остаётся:
glTexCoord,
glColor,
glNormal,
glVertex,
glMaterial,
glArrayElement.
Ну, первые четыре - стандартный набор; glMaterial я бы предпочёл вызывать вне glBegin(...)-glEnd(), поскольку, ИМХО, редко когда отдельные вершины одного полигона могут различаться материалом (предлагаю тут ещё поразмыслить); а glArrayElement - это для случая с массивами. Кстати об этом. Действительно, намного производительнее группировать данные в массивы, и юзать glArrayElement или вообще glDrawArrays, чем рисовать вершины, юзая отдельные функции для каждого аттрибута вершины. К тому же оговаривается, что выгоднее в плане производительности юзать не отдельные массивы текстокоординат, цветов, нормалей и вершин, а группировать эти данные в один mix-массив. Все эти четыре типа данных (T, C, N, V) включают массивы следующих двух видов (подробнее см. glInterleavedArrays)
GL_T2F_C4F_N3F_V3F
GL_T4F_C4F_N3F_V4F
Я бы предпочёл первый тип массива - две координаты текстуры (s,t, для общеиспользуемой двумерной текстуры GL_TEXTURE_2D), затем четыре компоненты цвета (RGBA - универсально), затем три координаты нормали (nx,ny,nz), и в конце 3 координаты самой вершины (vx,vy,vz; во всех типах массивов координаты вершины по понятным причинам идут последними). Прошу заметить - везде требуется тип данных float. Итого: 48 байт на каждую вершину массива, из которых треть (16 байт) - данные о цвете (ambient color), причем прошу обратить внимание на то, что нет типов массивов, включающий остальные данные о материале (specular color, shiness, emission). Посему предлагаю и цвет выносить вне скобок glBegin(...)-glEnd() и красить полигон полностью одним цветом. Кажется, неуниверсально, но разукраской вершин в разные цвета пионеры занимаются, решая задачи по отображению треугольника, но практические задачи по рисованию глайдеров и других объектов полагаются на сто процентов на текстуру и форму, в то время как цвет голой модели ставится по-умолчанию белым или серым. Пускай, некоторые части могут различаться цветом, но минимальная единица практических задач - полигон, или даже целая поверхность (группа смежных полигонов), но никак не отдельно-взятая вершина. Посему предлагаю юзать тип массива и, соответственно, данных вершин:
GL_T2F_N3F_V3F
Т.е. 2D-текстура (s,t), нормаль (nx,ny,nz) и вершина (vx,vy,vz) - 32 байта на вершину. С первой мелочью (какие данные модели нужны для рисовки внутри операторных скобок glBegin(...)-glEnd()) разобрались? Пойдём выше или тут нужно над чем-то ещё потолковать?

Добавлено (2009-04-14, 10:26 Pm)
---------------------------------------------
А чёй-то склеило посты? surprised


[Беженец со Скаев]

Сообщение отредактировал Yandersen - Вт, 14 Апр 2009, 22:28
 
smt005Дата: Вт, 14 Апр 2009, 23:11 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Yandersen, я тоже примерно до этого уровня освоил OpenGL, только практики практически нет.
Теперь надо разобраться с шейдерами(а затем тени) в GLSL.

А потом надо будет работать над оптимизацией движка.

Добавлено (2009-04-14, 11:11 Pm)
---------------------------------------------
Пытался разобраться с PhysX, чуть моск не сломал, но так и не разобрался, даже не понял как отрисовывать то что нафизичил этот физикс.

 
Ize_g0reДата: Ср, 15 Апр 2009, 19:30 | Сообщение # 3
1 Поколение
Группа: Доверенные
Сообщений: 35
Замечания: 0%
Статус: Offline
мнде...
Снимаешь с физического тела (С КАЖДОГО) позицию и поворот и применяешь к мешу - т.е. графическому образу физического тела - и рендеришь сцену, чо непонятного?



Deep inside... With stones in hand...
From the mind... ...he plays light's end
 
smt005Дата: Ср, 15 Апр 2009, 19:54 | Сообщение # 4
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Ize_g0re, Я ась себе сделаю, поговорим, ок ?

Добавлено (2009-04-15, 7:54 Pm)
---------------------------------------------

Quote (Ize_g0re)
мнде...

Я же любитель и опыта ваще нет.
 
Ize_g0reДата: Чт, 16 Апр 2009, 10:10 | Сообщение # 5
1 Поколение
Группа: Доверенные
Сообщений: 35
Замечания: 0%
Статус: Offline
А я, блин, профессионал...
Вообще есть тематическеие ресурсы....



Deep inside... With stones in hand...
From the mind... ...he plays light's end
 
smt005Дата: Чт, 16 Апр 2009, 22:12 | Сообщение # 6
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Yandersen, Найди в инете книгу (где я скачивал, не помню) "Графическая библиотека OpenGL" Ю.М. Баяковский.
Там минимум лишней информации, коротко и подробно описываются основы.
 
YandersenДата: Пт, 17 Апр 2009, 14:14 | Сообщение # 7
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (smt005)
"Графическая библиотека OpenGL" Ю.М. Баяковский.
Там минимум лишней информации, коротко и подробно описываются основы.
Нашёл. Не пробовал читать остальное, кроме раздела про материалы, но мнение - сжечь. Перевести на русский названия параметров маериала могу я и сам, но вот что не понравилось - много двусмысленных фраз, плюс ошибки режут глаза - там показан пример, где в качестве параметров материала передаются массивы из трёх компонент, хотя показанные варианты функций задания материала, принимающие цвет в виде массива, требуют нахождения в нём всех четырёх компонент цвета. angry
Так что вопрос о значении параметров материала остаётся открытым.
?


[Беженец со Скаев]
 
smt005Дата: Пт, 17 Апр 2009, 17:04 | Сообщение # 8
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Quote (Yandersen)
ошибки режут глаза - там показан пример......

Какая страници...

Надо поэксперементировать - увидить глазами.

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

 
YandersenДата: Пт, 17 Апр 2009, 21:51 | Сообщение # 9
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (smt005)
у меня за короткое время сложилось общее представление что такое OpenGL в отличее от других книг и всяки примеров в инете.
Эт верно - общая картина - самое главное. Хотя если по NeHe упорно пройтись, тоже неплохо. А уж для работы конкретно есть документарий. Благо, OpenGL придумали не психи, так что сделана сия святыня ясно, чётко и доступно. Не то, что Вижуалка... angry
Quote (smt005)
Какая страници...
Что-то около 40-й, там где соответствующий раздел про материалы.
Quote (smt005)
Надо поэксперементировать - увидить глазами.
Я, может, в выходные сотворю тестовую программку, где вставлю настройки всего, чтобы можно было крутить ползунками (или вводить данные) и видеть результ. Не обещаю, но возможно. Увидеть действительно необходимо.

Кстати, долго не мог втыкнуть, чем glColorMaterial и glMaterial различаются и в чём смысл. Вроде, допёр! happy Похоже, glMaterial сразу задаёт нужный параметр, а glColorMaterial просто переназначает, каким параметром (GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR или GL_EMISSION) управляет функция glColor. Умно придумано, однако! biggrin


[Беженец со Скаев]
 
smt005Дата: Пт, 17 Апр 2009, 22:13 | Сообщение # 10
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Yandersen, ты понимаешь GLSL и как тении делать ?
 
Ize_g0reДата: Сб, 18 Апр 2009, 12:59 | Сообщение # 11
1 Поколение
Группа: Доверенные
Сообщений: 35
Замечания: 0%
Статус: Offline
тени, блин...
Теней хуча туева рецептов - от стенсильных до мягких параллельно-проецированных...



Deep inside... With stones in hand...
From the mind... ...he plays light's end
 
smt005Дата: Сб, 18 Апр 2009, 13:34 | Сообщение # 12
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Quote (Ize_g0re)
Теней хуча туева рецептов
Толку от этой хуча туева рецептов? Мне надо толковое объяснение на подобии той "отстойной" книжки.
 
YandersenДата: Сб, 18 Апр 2009, 20:26 | Сообщение # 13
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Ни GLSL не знаю, ни как тени делают. Ничё не знаю, кроме функций OpenGL, и то не всех. Но, как я говорил, с геометрией я дружу, так что на тему теней идеи есть. Фраза "карта теней" тоже имеет чем возбудить. Идея такая: каждый рисуемый в сцену треугольник создаёт усечённую пирамиду тени, в которой вершина - источник света, а усечённое основание - рисуемый треугольник. Нетрудно представить такой чертёж, да? Ну так вот, исходя из знаний пространственной геометрии, к счастью мною неплохо всосаных за первый курс обучения в ВУЗе, я могу написать функцию, составляющую уравнения четырёх плоскостей, задающих объём теневого пространства, создаваемого каждым треугольником сцены для каждого источника света. В дальнейшем, после рисовки буфера кадра, каждый его пиксел должен быть проверен на попадание в области тени от всех треугольников сцены (но предварительно нужно получить координаты точки сцены, соответствующей этому пикселу). Функция создания уравнения пирамиды тени не будет очень ресурсоёмкой (не будет включать никаких операций кроме сложения, деления, умножения и логики), а функция проверки попадания точки в пирамиду тени - вообще простая - там с десяток-два простейших операций. Есть две "кстати": функция создания пирамиды тени для локализованных (точечных, т.е. как фонарик) и направленных (лучи света параллельны, как на земле от солнца) будет, соответственно двух видов; к тому же, для каждого источника света должна быть своя карта теней (т.е. сколько источников света, столько и пирамид тени нужно будет составить для каждого треугольника).
ИМХО, такая байда обязана была быть реализована в самом OpenGL. dry Кстати, плавных теней она не даст.

Добавлено (18 Апр 2009, 20:26)
---------------------------------------------
Есть и второй способ (основанный на принципе левых и правых троек векторов или объёме параллелограмма, построенного на трёх векторах). Он требует больше вычислений, но не требует захламления памяти. Суть в том, что тени высчитываются и накладываются уже после рисовке сцены. Просчитывается каждый пиксел буффера (точка сцены, ему соответстующая), и каждый раз, для каждого пиксела нужно обсчитать все треугольники (в предыдущем варианте все треугольники перед отрисовкой метили свою пирамиду тени для всех светильников, и после отрисовки нужно было лишь подставить координаты точек в уже готовые неравенства и пологичить). ИМХО, этот способ проще в использовании, и уж точно ОБЯЗАН был быть поддерживаем оппаратно (там сплошные векторные операции да определители матриц). Может, в ДиректХе он и есть, но в ОpenGL никаких пригодных функций я не нашёл.
Короче, тени могут и подождать (пока не будут ааппаратно реализованы, а то так - тормозисто будет). Для начала, ИМХО, можно просто потемнения на ландшафт накладывать в точках, над которыми объект висит.
//===
А вообще, я торчу от рендеринга методом трассировки луча - за ним будущее! biggrin


[Беженец со Скаев]
 
YandersenДата: Вс, 19 Апр 2009, 23:38 | Сообщение # 14
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Склепал тестовую прогу для наблюдения эффектов от настроек материала - см. прикрепление.
Цвет обекта задаю один раз, перед его отрисовкой, glColor3f(0.5,0.5,0.5), т.е. серый цвет (чтобы эффекты лучше были видны); затем задаю все настройки материала:
float Ambient[4];
float Diffuse[4];
float Specular[4];
int Shininess;
float Emission[4];
...

glMaterialfv(GL_FRONT, GL_AMBIENT, Ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, Diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, Specular);
glMateriali(GL_FRONT, GL_SHININESS, Shininess);
glMaterialfv(GL_FRONT, GL_EMISSION, Emission);
, и после этого отрисовываю объект (форму задавал сам программно - это "капля" с очень высокой детализацией (около 40000 треугольников)).
Такая невнятка: настройки Ambient и Diffuse цветов ни на что не влияют. Проверил, на вход glMaterial идут правильные данные, но OpenGL их почему-то игнорирует. Кто знает причину?
Развлекайтесь!
Прикрепления: MaterialTest.exe(535.5 Kb)


[Беженец со Скаев]
 
KrogothДата: Пн, 20 Апр 2009, 00:07 | Сообщение # 15
5 Поколение
Группа: Основной состав
Сообщений: 553
Замечания: 0%
Статус: Offline
Чето у меня с отрисовкой глюки аццкие.
 
YandersenДата: Пн, 20 Апр 2009, 08:24 | Сообщение # 16
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
2 Krogoth: богатый коммент... Щас напрягу воображение только... dry

//===

Поправил прогу, теперь работают все настройки материала. Оказалось, нужно было запретить вот что:
glDisable(GL_COLOR_MATERIAL);
Видимо, раз по-умолчанию выставлено (как написано в мануале ГЛевском):
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
, то функция glColor управляет Ambient и Diffuse - компонентами цвета, поэтому настройка этих компонент с помощью glMaterial игнорируется. Но после запрета этого дела стала игнорироваться функция glColor. Вот такая палка о двух концах.
В общем, щас всё показательно и чудно. Развлекайтесь! smile

Добавлено (20 Апр 2009, 08:24)
---------------------------------------------
Как я понял, все четыре компоненты цвета просто суммируются. Реальный цвет материала - это Diffuse-компонента. Её интенсивность зависит от косинуса угла падения лучей на поверхность. Specular - цвет бликов от светильника. Shiness - размер бликов. Но не могу понять разницы между Ambient и Emission. Эти обе, вроде, не зависят от источника света (не утверждаю - настроек источника света не ввёл, так что, может, с разными источниками будут эти компоненты по-разному ся вести). Хотя, логически, разница ясна, но графически её нет, что ли?..

Прикрепления: MaterialsTest.exe(535.5 Kb)


[Беженец со Скаев]
 
KrogothДата: Пн, 20 Апр 2009, 13:45 | Сообщение # 17
5 Поколение
Группа: Основной состав
Сообщений: 553
Замечания: 0%
Статус: Offline
Главное, что суть проблемы изложил!
А если конкретно, то с конусом все в порядке, а шарик мерцает аццки, то появляется, то исчезает, то только кусок видно...
 
smt005Дата: Пн, 20 Апр 2009, 19:57 | Сообщение # 18
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Yandersen, при попытке запустить, требует "CC3260MT.DLL".

Добавлено (20 Апр 2009, 19:57)
---------------------------------------------
Кто нибудь, объясните мне, как изменять размер динамического масива в С++.

 
YandersenДата: Пн, 20 Апр 2009, 21:15 | Сообщение # 19
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (smt005)
Yandersen, при попытке запустить, требует "CC3260MT.DLL".
Потыкал галочек в опциях - размер ехешника чуть увеличился. Как щас (см. в прикреплении)? sad
Quote (smt005)
Кто нибудь, объясните мне, как изменять размер динамического масива в С++.
А заодно что это такое вообще... happy

Добавлено (20 Апр 2009, 21:01)
---------------------------------------------

Quote (Krogoth)
с конусом все в порядке, а шарик мерцает аццки, то появляется, то исчезает, то только кусок видно...
Там больше 40000 треугольников в этом полушарике напихано - детализация в 1 градус. Но мой ноут справляется... cool

Добавлено (20 Апр 2009, 21:15)
---------------------------------------------
//======

Понял, как металл иммитировать - по-миниммуму диффузного цвета, дофига отражённого, и степень отражения процентов на 20 эдак. Рассеянный по-максимуму. Очень похожий на металл моих часов материал получается. happy А пластик гладкий бляскучий - так наоборот, диффузного по-максимуму, отражённого - средне, степень отражения - средне.

Прикрепления: 3733737.exe(588.5 Kb)


[Беженец со Скаев]

Сообщение отредактировал Yandersen - Пн, 20 Апр 2009, 21:03
 
smt005Дата: Пн, 20 Апр 2009, 21:41 | Сообщение # 20
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Quote (Yandersen)
А заодно что это такое вообще...

Разум вроде должен понять.

Вот так объявляется массив в области динамической памяти.

Ttype * Array = new Ttype[количество объектов];

Как изменять количество объектов в процессе программы. Если вообще можно.

Добавлено (20 Апр 2009, 21:41)
---------------------------------------------

Quote (Yandersen)
Как щас ?

Работает.
Капля мигает...
 
YandersenДата: Пн, 20 Апр 2009, 22:01 | Сообщение # 21
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Ах, это! biggrin Я думал, это memory allocation называеццо... dry В Билдере есть спецательный класс DynamicArray<Ttype>, там всё, что нужно есть. Но твой вопрос и меня интересовал, так что я пытался глянуть, как в дефинишне DynamicArray это сделано, тока не нашёл, где там - так всё завёрнуто... wacko

Добавлено (20 Апр 2009, 22:01)
---------------------------------------------

Quote (smt005)
Капля мигает
Тьфу ты! dry


[Беженец со Скаев]
 
KrogothДата: Пн, 20 Апр 2009, 22:30 | Сообщение # 22
5 Поколение
Группа: Основной состав
Сообщений: 553
Замечания: 0%
Статус: Offline
Quote (Yandersen)
Капля мигает...
Вот-то то и оно.
 
smt005Дата: Пн, 20 Апр 2009, 22:47 | Сообщение # 23
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Yandersen, как выводиш каплю, списком или масскивом, или "glBegin ... glEnd" ?
 
YandersenДата: Пн, 20 Апр 2009, 23:27 | Сообщение # 24
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (smt005)
как выводиш каплю
->
Quote (smt005)
glBegin ... glEnd
.

Походу, лучше просто навалить всяких стандартных ГЛЮевских объектов, цилиндров, конусов, да шариков - они точно глючить не станут, а для теста материала идеально подойдут.


[Беженец со Скаев]
 
YandersenДата: Вт, 21 Апр 2009, 00:29 | Сообщение # 25
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (smt005)
мигает
Quote (Krogoth)
Вот-то то и оно
Хм... Есть догадка... Попробуйте-ка это - не моргает ли (см. прикрепление)?
Прикрепления: ModelEditor.rar(311.1 Kb)


[Беженец со Скаев]

Сообщение отредактировал Yandersen - Вт, 21 Апр 2009, 00:29
 
YandersenДата: Вт, 21 Апр 2009, 00:30 | Сообщение # 26
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Ну вот, напихал стандартных цилиндров и шариков ГЛУвских вместо самодельной капли. Ну щас-то не глючит? dry
Прикрепления: 8390615.exe(587.5 Kb)


[Беженец со Скаев]
 
KrogothДата: Вт, 21 Апр 2009, 01:15 | Сообщение # 27
5 Поколение
Группа: Основной состав
Сообщений: 553
Замечания: 0%
Статус: Offline
Глючит не менее аццко. Через мерцающий цилиндр отчетливо видно два целых шарика.
 
YandersenДата: Вт, 21 Апр 2009, 04:29 | Сообщение # 28
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Прошу прощения - моя ступил... Я ж не поставил двойную буфферизацию! Хотя, странно: на моём ноуте ведь не мильгает... sad Ну, в общем, поставил двойную, щас уж точно всё пучком должно быть.
Прикрепления: 8945929.exe(575.0 Kb)


[Беженец со Скаев]
 
smt005Дата: Вт, 21 Апр 2009, 09:24 | Сообщение # 29
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Yandersen, если не сложно, добавь регулировку скорости ( и СТОП) а лучше вертение мышкой и за объектом сделай фон (из текстурированного полигона или кучки о бъектов), чтобы видеть изменение Альфа цвета.
 
YandersenДата: Вт, 21 Апр 2009, 22:05 | Сообщение # 30
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
ГГГАТОВА! biggrin
Вертеть клизматрон на W-S-A-D; на заднем плане - лист чёрно-белой паранои, плюс бонус - настройки материала можно сохранять в текстовый файл (но не загружать, гы) и усердно их потом изучать.
Получилось, ИМХО, щщщикарно, только насчёт прозрачности - это магия высшего уровня, так что не трясите меня по поводу того, что при заслонении одной клизмы другою, задняя не всегда отображается. Как я пока знаю, для корректной отрисовки нужно рисовать полупрозрачные объекты в порядке их приближения - сначала задние, затем передние по отношению к наблюдателю. Но я этой херью маяццо не хочу... wacko
Здорово, а? biggrin


[Беженец со Скаев]
 
smt005Дата: Ср, 22 Апр 2009, 09:01 | Сообщение # 31
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Quote (Yandersen)
лист чёрно-белой паранои
Лучше цветную.
Quote (Yandersen)
сначала задние, затем передние по отношению к наблюдателю. Но я этой херью маяццо не хочу..

Так это не проблема (если только у тебя кад не как куча каких-то строк), по ходу программы, сначала пишеш отрисовку фона а потом объект. Втроде так решается.
 
YandersenДата: Ср, 22 Апр 2009, 14:06 | Сообщение # 32
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
wacko Твою!!!... Обезьяна я ж дурная совсем - сам файл-то прикрепить и забыл!!! surprised
Прикрепления: 7029231.exe(589.5 Kb)


[Беженец со Скаев]
 
smt005Дата: Ср, 22 Апр 2009, 15:50 | Сообщение # 33
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Измени текстуру. И как говорится "мелоч а приятно", сделай ползунки больше. А значения не только сохранять но и отображать в программе.

И объекты другие, цилиндр, квадрат и т.д., т.е. не только капли.

з.ы.: а програмка прикольная получилась.

 
YandersenДата: Сб, 30 Май 2009, 01:03 | Сообщение # 34
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Получай! smile Не знаю, какой фон ты хотел - я проявил своё недалёкое творчество... happy Заменяй на любую бмпэшку с тем же названием.
Вывод циферок сделал, ползунки для слепых увеличил. smile
Если хочешь какую-нить фигуру ещё (или вместо), напиши функцию по отрисовке (забацай в *.h файле) - я скомпиллю. Нужные данные - только нормали и вершины. Ну, glBegin-glEnd-способ - т.е. просто, без извращений.
Прикрепления: MaterialsTest.rar(240.0 Kb)


[Беженец со Скаев]

Сообщение отредактировал Yandersen - Сб, 30 Май 2009, 01:05
 
YandersenДата: Сб, 30 Май 2009, 03:24 | Сообщение # 35
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Не возражаете, если втыкну тут ссылочки на описания gl-евских функций по работе с массивами? Перечислю все имеющиеся, для удобства, ну как минимум для себя. happy

OpenGL позволяет задавать массивы таких аттрибутов вершин, как: цвет (компонентный или индексированный), координаты текстуры, координаты нормали, координаты вершины, флаг вершины. Функции задания массивов:

void glColorPointer (int size, unsigned int type, int stride, void *pointer);
void glTexCoordPointer (int size, unsigned int type, int stride, void *pointer);
void glNormalPointer (unsigned int type, int stride, void *pointer);
void glVertexPointer (int size, unsigned int type, int stride, void *pointer);
void glIndexPointer (unsigned int type, int stride, void *pointer);
void glEdgeFlagPointer (int stride, unsigned char *pointer);
Иногда удобнее сгруппировать все аттрибуты вершин (кроме флагов и индексов) в один большой общий массив, который задаётся функцией:
void glInterleavedArrays (unsigned int format, int stride, void *pointer);
Какие типы данных (текстура/цвет/нормаль/вершина) есть в массиве и из скольких компонент каждый из них состоит, задаётся константами:
GL_V2F, GL_V3F, GL_C4UB_V2F, GL_C4UB_V3F, GL_C3F_V3F, GL_N3F_V3F, GL_C4F_N3F_V3F, GL_T2F_V3F, GL_T4F_V4F, GL_T2F_C4UB_V3F, GL_T2F_C3F_V3F, GL_T2F_N3F_V3F, GL_T2F_C4F_N3F_V3F, GL_T4F_C4F_N3F_V4F (оцветовал те типы массивов, которые считаю наиболее интересными).

Те или иные типы аттрибутов будут использованы при рисовании только если они "разрешены" для использования, что определяется функциями:

void glEnableClientState (unsigned int array);
void glDisableClientState (unsigned int array);
"array" - одна из констант, определяющих тип массива:
GL_COLOR_ARRAY, GL_EDGE_FLAG_ARRAY, GL_INDEX_ARRAY, GL_NORMAL_ARRAY, GL_TEXTURE_COORD_ARRAY, GL_VERTEX_ARRAY.

Варианты функций отрисовки заданных массивов:

void glDrawArrays (unsigned int mode, int first, int count);
Эта функция рисует примитив(ы) типа "mode" (GL_POINTS / GL_LINE_STRIP / GL_LINE_LOOP / GL_LINES / GL_TRIANGLE_STRIP / GL_TRIANGLE_FAN / GL_TRIANGLES / GL_QUAD_STRIP / GL_QUADS / GL_POLYGON), считывая из указанных ранее массивов данные аттрибутов, соответствующие количеству вершин равному "count", начиная с вершины под номером "first".

void glDrawElements (unsigned int mode, int count, unsigned int type, void *indices);
Этот вариант рисования массива отличается от предыдущего тем, что позволяет указывать номера отдельных вершин, совсем не обязательно "идуших в массивах подряд". Эти выборочные номера вершин должны быть впихнуты в дополнительный массив, указатель на который нужно послать в функцию в качестве последнего аргумента.

void glDrawRangeElements (unsigned int mode, int start, int end, int count, unsigned int type, void *indices);
То ли описание кривое, то ли извилины мои недостачно кривы, но понять, как юзать эту функцию, мне не удалось. Но вроде бы, эта функциовина не имеет большой важности, являясь специфическим вариантом предыдущей.

Вроде, всё. wacko

Добавлено (30 Май 2009, 03:24)
---------------------------------------------
Если кому действительно нужны подробные описания, а с инглишем туго, трясите меня, распишу "своими словами".


[Беженец со Скаев]

Сообщение отредактировал Yandersen - Сб, 30 Май 2009, 03:21
 
smt005Дата: Вс, 31 Май 2009, 15:47 | Сообщение # 36
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Quote (Yandersen)
Не возражаете

Нет конечно!

Quote (Yandersen)
Если кому действительно нужны подробные описания

Наступит время, буду тебя распрашивать на счёт тени...
 
smt005Дата: Вт, 23 Июн 2009, 20:51 | Сообщение # 37
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Yandersen кучу однообразных тем насоздавал, буду сюда вывкладывать

Вот до чего дошёл я.
Текстуры сделал низкого разрешения для того что бы загрузить на форум, ну и для экономии трафика.

С текстурами правда проблемы, особенно в сложных объектах, ещё полностью не разобрался.

В файле \dbKop\setting.ini изменяйте скорость движения и верчения глайдера (строки 2, 3). И плавность поворота камеры, она почемуто зависит от FPS (если поворот камеры не плавный то значение надо уменьшить, если очень медленно надо увеличить, строки 7, 8) .

Во второй строчке можно менять загружаемую локацию (dbKop/Location00.Loc, Location01.Loc и т.д. ), данные находятся в этой же папке.

Если прога не будет работать, высылайте ЛОГ.

Добавлено (23 Июн 2009, 20:51)
---------------------------------------------
Жду коментарии................

Прикрепления: EngineKopv2.rar(996.6 Kb)
 
PA3UJIbДата: Вт, 23 Июн 2009, 20:59 | Сообщение # 38
1 Поколение
Группа: Основной состав
Сообщений: 105
Замечания: 0%
Статус: Offline
Та же самая байда - "Приложение не было запущено, поскольку оно некорректно настроено..."
И лога нету никакого, он вообще где лежать должен?
 
smt005Дата: Вт, 23 Июн 2009, 21:18 | Сообщение # 39
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Вот гавно!!!

ЛОГ должен лежать с экзешником.

Получается что прога вообще не запускается или даёт ошибку при первой процедуре.
Надо будет инициализацию изучить и самому написать.

Знать бы что именно там неправильно настроенно.

Добавлено (23 Июн 2009, 21:18)
---------------------------------------------
У тебя работало вот это:
http://smt005.my1.ru/_fr/0/9362341.jpg

http://smt005.my1.ru/_fr/0/NeHeGLProject1.rar

 
YandersenДата: Ср, 24 Июн 2009, 00:09 | Сообщение # 40
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (PA3UJIb)
Та же самая байда - "Приложение не было запущено, поскольку оно некорректно настроено..."
И лога нету никакого
dry


[Беженец со Скаев]
 
Форум "Механоиды 3" » Рабочий раздел. » Графика » Графика: 3D модели и OpenGL (свой движок)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:


Хостинг от uCoz