![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Корявая прорисовка (Direct3D) [Delphi, C++ Builder, Windows]
VolanD666 © (2004-12-01 15:43:00)Здрасти, программеры.
Вот начал писать свою игру. Типа ходит чувак (от первого лица) по коридору. И все бы хорошо, вот только наверху у стенок какие то зубцы рисуются, а если стенку сделать выше, то зубья становятся острее.
:-O.
VolanD666 (2004-12-05 07:28:00) [1]Спасибо.
Sapersky (2004-12-04 20:33:00) [2]А вообще есть где-нибудь ссылки в интернете по теме: "Как написать свой Doom", а то искал в поисковиках, но не нашел?
Так прямо и искал? :)
Вообще ссылки, в некотором роде, есть. Искать нужно по словам BSP/PVS и Portal (портал).
На gamedev.ru была статья по BSP.
Или вот ещё, с примерами:
http://www.cs.sun.ac.za/~henri/advgfx.html
Но по-английски...
cyborg (2004-12-04 10:06:00) [3]
> "Как написать свой Doom"
Пиши по адресу: Дурдом, палата №6
;)
VolanD666 (2004-12-04 09:02:00) [4]Спасибо, за ссылку. Но я, честно говоря, не дружу с английским языком. :-)
А вообще есть где-нибудь ссылки в интернете по теме: "Как написать свой Doom", а то искал в поисковиках, но не нашел?
Sapersky (2004-12-03 18:32:00) [5]1) В силу особенностей математики Z-буфера точность при задании NearPlane < 1 уменьшается очень сильно. Примерное представление о том, какой интервал на самом деле задаётся, можно получить переставив все ноли спереди от NearPlane назад к FarPlane :), точнее, разделив FarPlane на NearPlane. Т.е. интервал 0.001 .. 1000 эквивалентен 1 .. 1000000.
2) Распределение точности в Z-буфере нелинейное - чем ближе, тем точнее, грубо говоря, на первые 10% интервала тратится 90% точности.
Поэтому даже при относительно вменяемом интервале 0.001 .. 2 (= 1..2000) вся точность уходит на объекты 0.001 .. 0.01 (много таких? :)), а на остальные почти ничего не остаётся.
Всё это есть в статье по ссылке, которую я давал...
VolanD666 (2004-12-03 14:23:00) [6]Пробовал менять это число на 2.0:
D3DXMatrixPerspectiveFovLH (&matProj, D3DX_PI/4, 1.0f, 0.001f, 1000.0f);.
Ничего не изменилось. :-(
Sapersky (2004-12-02 15:28:00) [7]Хотя нет, увеличение разрядности не поможет.
Ты посчитай сколько у тебя градаций получается от 00.1 до 1000? Ну с шагом 0.01 это выходит минимум 100000 градаций буфера
Даже хуже.
http://www.mvps.org/directx/articles/using_w-buffers.htm
Если посчитать, как там написано, то получается, что 99.9% точности Z-буфера в данном случае тратится на интервал 0.001..1
Можно, конечно, использовать W-буфер, но он поддерживается не всеми картами, так что лучше ограничить расстояние, на которое можно подходить к стене (зачем 0.001? Если это метры - то вряд ли кто-то сможет подойти к стене на 1 мм :)).
Sapersky (2004-12-02 14:09:00) [8]У меня его откомпиленый проэкт идет и все пашет.
Может, он использует 24(32)-битный Z-буфер, а у тебя 16-битный?
VolanD666 (2004-12-02 13:53:00) [9]А тогда при подходе к стене можно будет посмотреть за нее.
> Ему повезло, у него видеокарточка была другая.
У меня его откомпиленый проэкт идет и все пашет.
Darthman (2004-12-02 13:30:00) [10]//А вот, мой знакомый писал на Delphi и у него все путем.
Ему повезло, у него видеокарточка была другая.
Ты посчитай сколько у тебя градаций получается от 00.1 до 1000? Ну с шагом 0.01 это выходит минимум 100000 градаций буфера. МИНИМУМ, карточка с этим не справляется. Меняй ближнее отсечение на 1.0
VolanD666 (2004-12-02 13:25:00) [11]А вот, мой знакомый писал на Delphi и у него все путем.
NailMan (2004-12-02 10:20:00) [12]VolanD666
Нельзя такое значение в near задавать - теряется точность работы Z-buffer.
Как правило принято устанавливать nearclip в 1.0
---
WBR, NailMan aka 2:5020/3337.13
VolanD666 (2004-12-02 05:32:00) [13]Не стены рисуются нормально (треугольников хватает). Раньше все работало нормально, но как только изменил ближнюю прорисовку:
D3DXMatrixPerspectiveFovLH (&matProj, D3DX_PI/4, 1.0f, 0.001f, 1000.0f);. Наверху у стен появились искажения.
MeF Dei Corvi (2004-12-01 19:05:00) [14]
> VolanD666 (01.12.04 15:43)
Поясни конкретнее о чем речь. Можно скриншотом.
XProger (2004-12-01 18:57:00) [15]Я так понял - рачь идёт о "Z-Fighting". Что-то вроде совпадения глубины в Z-Buffer'е
XProger (2004-12-01 18:56:00) [16]Либо слишком большие числа используешь :)
MeF Dei Corvi (2004-12-01 18:54:00) [17]
> какие то зубцы рисуются
Дык криво стены рисуешь... Треугольники лишние.