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

Вниз

Проверка на видимость   Найти похожие ветки 

 
K.o.Z   (2003-06-14 23:49) [0]

Добрый вечер. Скажите как написать ф-цию проверки на видимость треугольника, зная координаты всех 3 вершин.
Если необходимы и др. данные, то я постараюсь их предоставить.
Спасибо.


 
Landgraph   (2003-06-15 10:47) [1]

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


 
K.o.Z   (2003-06-15 12:50) [2]

Нормали это конечно замечательно, но я не понимаю какой в них толк?


 
Asteroid   (2003-06-15 18:02) [3]

Например в том, чтобы проверять на видимость. Если скалярное произведение вектора зрения на нормаль плоскости (треугоьлника в плоскости) больше 0, значит плоскость (треугольник) повернут к тебе задом и рисовать его не надо.
Или ты не знаешь, как нормаль считать? А еще и с высшим образованием %(


 
K.o.Z   (2003-06-15 22:16) [4]

2 Asteroid
Нормаль к треугольнику - это векторное произведение векторов-сторон, образованных вершинами , если ничего не перепутал :)
А вот про "вектор зрения" никогда не слышал... можно по-подробнее?


 
Asteroid   (2003-06-16 03:15) [5]

Не перепутал :) Вектор зрения - вектор, по направлению которого смотрит камера. Кстати, нормали обычно единичной длины.


 
K.o.Z   (2003-06-16 14:06) [6]

Подловил ;) А как этот сам вектор зрения получить?


 
Asteroid   (2003-06-16 16:19) [7]

> K.o.Z © (16.06.03 14:06)
А ты знаешь, куда у тебя камера смотрит?
Обычно она может смотреть либо на точку target из другой точки pos - тогда вектор будет targ-pos, или же камера задается просто точкой pos и вектором dir, который и есть "вектор зрения".


 
K.o.Z   (2003-06-21 17:13) [8]

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


 
Asteroid   (2003-06-22 22:34) [9]

Если ты на чистом GL, попробуй с Z-буфером поработать (сейчас не напишу, как он включается). А чтобы не морочаться с невидимыми поверхностями, ставь glCullMode(GL_FRONT) (кажется, сейчас нет справки под рукой).
Вот только вывод ландшафта удалением невидимых поверхностей не ускорить. Поищи инфу по BSP-деревьям, оно же octree (нечто вроде мип-маппинга для объектов).


 
Sapersky_   (2003-06-23 11:40) [10]

Во-первых, BSP-деревья и octree - это не одно и то же. Во-вторых, для ландшафта лучше подходит quadtree, т.е. вся сетка ландшафта делится на 4 части, каждая часть ещё на 4 и т.д. Причём доходить до уровня отдельных треугольников вовсе не обязательно и даже нежелательно - можно сделать минимальной ландшафтной единицей (тайлом, так сказать) фрагмент 8*8, или 16*16 или ещё какой. Если не хочется использовать деревья (quadtrees) - можно просто перебирать все фрагменты и проверять их bounding box"ы на видимость. Будет медленнее, чем с деревьями (при больших размерах ландшафта), но быстрее, чем выводить весь ландшафт.
Вообще, статья по ландшафту была на gamedev.ru. Или вот, правда, на английском -
http://www.cs.sun.ac.za/~henri/terrainmain.html


 
Kelegorm   (2003-06-24 19:54) [11]

Хоть я не знаю OPENGL, расскажу, как зделать всё побыстрее.
1) Перво-наперво, как у тебя перерисовывается экран? Надо по таймеру, 30 раз в секунды, то есть каждые 25 миллисекунд. Постоянно - вредно.
2) какого размера текстура? Попробой поменьше и юзай мип-мэпинг.
3) Разве в ОпенГЛ нету автомат. отсечки невидимых поверхностей? Думаю, это расширение, тогда. Всё равно, даже 4-х меговая карта поддержит о бодбодрит.
4) Тогда вручную.
5) Что за народ. Не читая, не рисуя самим, из ГДИ, лезут куда не попадя! А ты возьми старую(1980-1989) книжку, почитай, как там народ вручную накладывал фактуру(текстурки.) :-)

Я не злой старик. Мне вчера 17, и я сначала рисовал и отсекал, даже перспективы(когда линии на экране не паралеьны, а стремятся в точку горизонта) сам на паскале, а потом только совесть позволила изпользовать чужие заготовки. Я использовал только функцию рисования точки!


 
K.o.Z   (2003-06-30 23:17) [12]

2 Kelegorm (24.06.03 19:54)
К великому сожалению не извлёк ничего конструктивного :-(


 
Asteroid   (2003-07-03 02:40) [13]

> K.o.Z © (30.06.03 23:17)
Какой-то пример лежал на DelphiGFX, правда на DX8.

Насчет отсечения невидимых граней:
glEnable( GL_CULL_FACE );
glCullFace( GL_BACK );


 
K.o.Z   (2003-07-05 00:54) [14]

2 Asteroid © (03.07.03 02:40)
какой пример?


Насчет отсечения невидимых граней:
glEnable( GL_CULL_FACE );
glCullFace( GL_BACK );

про это я знаю - я говорю самому не рисовать лишние полигоны в принципе


 
Asteroid   (2003-07-05 04:53) [15]

http://delphigfx.mastak.ru/samples/samp37.rar
http://delphigfx.mastak.ru/samples/samp35.rar



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

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

Наверх





Память: 0.48 MB
Время: 0.012 c
6-63273
Signed
2003-11-16 01:24
2004.01.20
Программно определить в чём неисправность


3-62993
dim-
2003-12-22 11:10
2004.01.20
как сделать рефреш чтобы меньше время тратилось


7-63429
Ivolg
2003-11-03 15:22
2004.01.20
Контекстное меню


1-63237
hfa
2004-01-09 11:34
2004.01.20
Теперь такой вопрос как получить весь список расширений


1-63164
Intell
2004-01-06 15:45
2004.01.20
Как выделять индекс в ListBox?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский