Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Вниз

Полусфера на поверхности сферы (OpenGL)   Найти похожие ветки 

 
ancara ©   (2006-12-01 16:15) [80]


> Это же глупо - создавать два идентичных дисплейных списка
> просто потому, что они различаются на одну цифру?

Нет, гораздо глупее пересобирать один и тот же список для разных объектов :)) Для каждого объекта нужно выделить отдельный персональный список :))

> В чем принципиальное отличие Списка от процедуры?

ну если рендер сделать просто в процедуре то, очевидно, там будут содержаться такие команды:
 glVertex(x,y,z);
 glNormal(x,y,z);
 и т.д.,
т.е. мы будем по-очереди, каждую вершину с ее координатами, нормалями, текстрными координатами и пр. загонять в видеокарту.
А она, в свою очередь, при получении очередного полигона, почти мгновенно его расчитает (нарисует) и будет ждать, пока мы подготовим следующий и пропихнем его по медленной AGP (PCI-E) шине.
 И так каждый кадр, даже если ничего не поменялось, мы опять будем гнать те же данные снова и снова, в итоге FPS -> к нулю..
 Когда мы используем список, а точнее его собираем (glNewList и так далее..)
мы проделываем те же операции, т.е. гоним данные по шине в видеокарту, но мы делаем это только один раз (в идеальном случае), а в момент рендеринга мы просто вызываем соответствующий дисплейный список (glCallList), т.е. мы всего лишь просим видеокарту отрисовать некий объект (совокупность полигонов) который уже находится в ней, и это происходит значительно быстрее.


 
Creative   (2006-12-01 16:20) [81]

то есть если у меня две сферы отличаются по одному единственному параметру (например ZenitStop) - мне тем не менее имеет смысл собрать два разных списка их рисования? Я правильно поняла?


 
ancara ©   (2006-12-01 16:28) [82]


> Я правильно поняла?

угу

А VBO еще круче :))
Например: мы пытаемся рисовать какой-то ландшафт сеткой полигонов.
Один раз его загнали в видюху и рисуем оттуда.
Затем, в некий момент нам понадобилось изменить координаты парочки вершин.
Если мы будем использовать дисплейный список, то в этой ситуации мы будем вынуждены пересобрать список заново и целиком его залить в видеокарту.
 VBO же нам позволяет кинуть туда только эти отдельные вершины, в памяти видеокарты они заменять старые и мы снова сможем приступить к рисованию и займет эта процедура считаные такты :))


 
Creative   (2006-12-01 16:31) [83]

Звучит здорово, а что такое VBO?


 
ancara ©   (2006-12-01 16:40) [84]

VBO = Vertex Buffer Object, но это уже из разряда расширений, на первых порах нужно освоить базовые возможности OpenGL, например списки эти опять же, или DrawArray, DrawElement... Главное понимать что происходить после тех или иных манипуляций.


 
Creative   (2006-12-01 16:45) [85]

Ок, отложим на более позднее время.

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


 
ancara ©   (2006-12-01 16:55) [86]


> если у меня всего пара объектов рисуется - можно и процедурой
> обойтись

Если рассматривать конкретно этот случай можно и так сказать, но тем неменее, использование более экономичных и более производительных средств даже в примитивных задачах поможет выработать "хороший тон" программирования.
 Ведь хороший капитан, например, ведет судно одинаково профессионально, назависимо от того, сколько пассажиров находится на борту, два или пятьсот? :))


 
Creative   (2006-12-01 17:05) [87]

Хм...хорошо сказано, я это учту, спасибо. Как говорится, береги честь смолоду. :-)

Я сейчас вот о чем думаю: изначально у тебя по движению мыши сфера крутится по двум осям. Все было бы хорошо, кабы осей не было три. Я попробовала было посадить вращение на [мышь] + [кнопка, соответствующая оси], но наткнулась на такое затруднение: если я правильно поняла, в процессе вращения система координат сферы перекашивается и поэтому когда ты в следующий раз крутишь ее например по оси Z - ты уже с трудом понимаешь, в какое место попадет твоя сфера. Есть какой-то умный способ реализовать такую вещь?
Я например хочу как-то добиться, либо, чтобы сфера перемещалась таким образом - координаты ее зенита должны в точности следовать перемещениям курсора, либо, чтобы пользователь мог просто ввести например широту и долготу, и сфера сама по ним бы вставала.


 
ancara ©   (2006-12-01 17:25) [88]


> чтобы пользователь мог просто ввести например широту и долготу,
>  и сфера сама по ним бы вставала.

Я понял! Ты работаешь в Google и вы там делаете новую GoogleEarth! Я угадал? :))


> изначально у тебя по движению мыши сфера крутится по двум
> осям

Стоп, стоп, изначально у меня камера перемещалась вокруг центра координат, а объекты были неподвижны. Но учитывая, что у тебя при движении мышки изменяются FAlpha и FBeta и при рендеринге каждая сфера поворачивается на эти свои углы, то получается что крутится сфера, да.


> Все было бы хорошо, кабы осей не было три.

А тебе действительно надо крутить вокрух трех осей? Я в том смысле что двумя  не обойтись? Вроде как можно крутить вокруг оси, проходящей через полюса и  вокруг оси, лежащей в плоскости экватора и проходящей через нулевой меридиан, например.
 Или можно вокруг оси, проходящей через полюса и  вокруг оси, лежащей в плоскости, параллельно плоскости "экрана", и проходящей черех центр сферы, но тогда этот вектор придется постоянно расчитывать, исходя из того, "каким боком", повернут шарик к наблюдателю. Этот вектор будет результатом векторного произведения двух векторов:
V1 - лежит на оси, кот. проходит через полюса;
V2 - лежит на прямой, проходящей через камеру и центр сферы;


 
Creative   (2006-12-01 17:33) [89]

Я понял! Ты работаешь в Google и вы там делаете новую GoogleEarth! Я угадал?

нет, я всего-навсего пишу программку, которая помогла бы мне расставить базу в игрушке UFO: XCOM :-)

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

Что мне действительно нужно - так это чтобы зенит полусферы мог встать в абсолютно любой точке сферы. И если я не глючу - кручением по двум осям тут не обойтись. Но это я если я не глючу!


 
DesWind ©   (2006-12-02 00:58) [90]

В Хсом там вродь тока вокруг одной можно, но ее ставят поразному


 
Creative   (2006-12-04 10:07) [91]


> В Хсом там вродь тока вокруг одной можно, но ее ставят поразному


В самом то ХСом - да, но я хочу, чтобы модель можно было посмотреть с любой стороны, потому что кто как, а я задолбалась ПВО ставить.


 
Creative   (2006-12-04 10:09) [92]


to ancara


Я таки поняла что наглючила - поворотом по двум осям можно попасть в любую точку сферы. :-)


 
Creative   (2006-12-04 16:52) [93]

Продолжение вопросов. Если сферу вращать (не важно по скольки осям) - ее система координат кувыракается вместе с ней. То есть стоит нам повернуть ее на А градусов по Х, как наши оси Y и Z уже окажутся черт те где, и когда мы захотим повернуть сферу по Z например, она окажется совсем не там, где мы хотим. Как заставить сферу вращаться в фиксированной системе координат: чтобы если я говорю "поворот по Y на положительный градус" - я ВСЕГДА видела как ее зенит движется вокруг строго вертикальной оси?
Звучит наверное непонятно, но я лучше не могу. :-(


 
ancara ©   (2006-12-04 17:21) [94]


> Звучит наверное непонятно,

Да все прекрасно понятно, там ничего сложного: после того как повернула вокруг оси X на угол А, надо посчитать "вертикальный" вектор и он будет равен:
( 0.0, cos(A), sin(A) ), A надо конечно же сначала привести к радианам. Вот вокруг этого вектора и крути... Но это при условии, что первый поворот был вокруг оси X, если же вокруг Z то вектор будет другим, а если вокруг и X и Z, то тем более :))


 
ancara ©   (2006-12-04 17:24) [95]

А можно еще проще, сначала крути вокруг Y, потом вокруг X


 
Creative   (2006-12-05 10:08) [96]

Не я лучше углы посчитаю, а то гадай еще, где у меня Х теперь находится. Я хочу сделать максимально наглядно.

>Вот вокруг этого вектора и крути...

А как мне выбирать - вокруг которго вектора крутить? Я знаю только glRotate(0, 0.0, 0.0, 0.0, 0.0), но она вроде не располагает к выбору конкретных векторов.


 
ancara ©   (2006-12-05 10:56) [97]


> А как мне выбирать - вокруг которго вектора крутить? Я знаю
> только glRotate(0, 0.0, 0.0, 0.0, 0.0), но она вроде не
> располагает к выбору конкретных векторов.

Кури пост N37.


 
Creative   (2006-12-05 11:10) [98]

>это будет поворот вокруг вектора (1.0, 0.0, 1.0) на 30 градусов. Причем OpenGL этот вектор еще и нормализует

оно?


 
ancara ©   (2006-12-05 11:45) [99]

оно самое:)


 
Creative   (2006-12-05 12:30) [100]

О пользе образования: начала читать статью про кватернионы. Запустила проект и погоняв его, увидела, что все нормально вращается и вокруг двух осей и все предсказуемо и ничего такого страшного рассчитывать кажется не придется. Не понимаю...:-)



Страницы: 1 2 3 вся ветка

Форум: "Игры";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.64 MB
Время: 0.013 c
15-1197263105
class_
2007-12-10 08:05
2008.01.13
При просмотре небольшого ролика в Интернет


2-1197373127
@!!ex
2007-12-11 14:38
2008.01.13
Фиксация углов куба.


2-1197511676
Wind
2007-12-13 05:07
2008.01.13
TTreeView


2-1197538417
XerSon
2007-12-13 12:33
2008.01.13
Оптимальный выбор платормы для клент-серверного приложения?


4-1182157169
SkySat
2007-06-18 12:59
2008.01.13
Выбор папки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский