вавум, клипинг |
[Feb. 20th, 2019|09:55 am] |
интересно (но не настолько, чтобы ковырять логи), чья была инициатива засрать клипер всякими ненужными обсечениями? идея рихтовать вертексы в клипере — идиотская идея. из-за этого клипер периодически «простреливал» на определённых углах просмотра. потому что сюрприз! флоаты не infinitely exact. кто бы мог предположить, да… поубирал к хуям эти недооптимизации — клипер стал rock solid, и прострелы исчезли.
а ещё у кого-то (это уже, похоже, Янис) родилась отличная идея делать пирамидку фрустума прямо из точки, где камера висит. не поняли шутки, да? я тоже долго не врубался. экран-то находится немного впереди камеры. и если делать пирамидку без учёта этого факта, то она неправильная, и обсекает больше, чем надо. в рендере это маскировалось (по разным причинам), а когда я попытался добавить вертикальный клип, оно вылезло. очевидно, что если мы у двусторонней стены не видим mid-texture, то эту стену можно считать сплошной и односторонней. я всунул в клипер фрустум — и попёрли баги, когда ебало наклоняешь. весь день тупил. а потом перечитал код — и дошло, откуда пирамидка начинается. бля.
от фрустума же, похоже, и баги с ROR, где полы не сплошные: иногда под «сетчатым» полом было нихуя. симптомы точно те же самые, слишком агрессивное фрустум-отсечение.
надо будет поспать, и впилить правильный фрустум. ради проверки я просто немного отодвинул начало пирамидки назад — и ура, баги пропали. но это неверный подход. то есть, верный, но отодвигать надо так, чтобы плоскости по границам вьювпорта шли. вспомнить бы ещё, как это делается… |
|
|
Comments: |
From: | (Anonymous) |
Date: | February 20th, 2019 - 03:14 pm |
---|
| | | (Link) |
|
макароны?
Странно, мне казалось, что если с фрустумом так поступить -- то только с Z-буфером фигня приключится, остальное сработает. А где Z-буфера нет -- то и всё хорошо.
Впрочем, если у вас там и правда пирамидка фрустума, а не спроецырованный кубик -- то фиг его знает.
| From: | ketmar |
Date: | February 22nd, 2019 - 02:41 pm |
---|
| | | (Link) |
|
ты чего-то не того пишешь. в смысле, путаешь фрустум как понятие и glFrustum(), по-моему.
>Впрочем, если у вас там и правда пирамидка фрустума, а не спроецырованный кубик там, понятно, плоскости. а я забыл математику, и не понимаю, как он их делает. возможно, он их и правильно делает, а баг где-то в другом месте, кто его знает. это думать надо, а мне нечем.
Ты так говоришь, будто где-то придумали фрустум сильно отличающийся от результатов glFrustum().
| From: | ketmar |
Date: | February 25th, 2019 - 07:54 pm |
---|
| | | (Link) |
|
нет, не везде glFrustum() вызывают просто. и да, с фрустумом всё оказалось в порядке, это я с устатку в глаза поебался.
Вызывают-то да, но glFrustum() внутри -- довольно банальная проекцыя с банальным сравнением результата с нулями всякими -- потому его с какой стороны не делай (до проекцыи, после, вместо) -- результат будет примерно один. | |