От Автора: Этот проект я
начал давно, я нашёл программу, работающую с
поверхностями, написанную на C (Автор: Nicholas Anderson его страничка).
Я переделал его программку в Pascal, и начал писать
свою программу рендеринга поверхностей на Delphi.
Самый интересный момент - это способ, которым
смешиваются различные текстуры земли, используя
'alpha maps'.
In the left image I highlighted in red the quads
between two different land textures, quads that are textured using alpha maps (like the
one on the right) to create a new texture. When the program starts, the heightfield data
is analysed and all these small 'transition' textures are created and stored. Observe that
only the central part of a transition texture is used - that is to avoid the edge of the
texture to become visible because of the bilinear filtering.
The heightfields used are generated with the
excellent 'Wilbur'
editor written by J.R. Slayton, or real scanned DEMs available on the Web edited with the
same program, or generated with Nicholas
Anderson's built-in random fractal terrain generation algorithm.
Вот несколько картинок для иллюстрации.
|
|
66 fps на моей TNT2
& Celeron 464 MHz |
Вулкан
(отредактирован в Wilbur) |
|
|
A Wilbur generated ridged
multifractal |
Реальный каньон
Colorado! |
The heightfields used are 256x256 matrices of small integers (-32758..32767), yet
the heights should be scaled between -100..100 or so. (Could have used shortints).
Процедура создания поверхности в Wilbur:
1. Создаём новую поверхность, 256x256.
2. Затем идём в Surface -> Calculate height field, там
можно выбрать параметры по вкусу;
3. Edit the terrain with Wilbur's tools to create interesting shapes; не
забудьте нажать 'Relight'.
4. Идём в Surface -> Point process -> Scale, Scale type= To range, and
scale your terrain to Highest=80 and Lowest=-30 or according to your terrain. Note that 0
is the sea level.
5. File -> Save as.., save as 'Lon/Lat text mesh', Output bounds - set to pixel,
an 0 (zero) decimal places.
6. Start 'Terrain_Del' and press F4, and load the previously saved .txt height
data. You can save the terrain as binary by pressing F2.
This program is not optimized
for speed. Yet the 65 frames per second on my TNT2 & Celeron 464 is not bad.
Не знаю почему, но на карточке Intel i740
программа выдаёт ошибку 'Division by zero'. На ATI rage
PRO's работает медленно и не показывается туман.
> I got some feedback (thanks Assen) that says it crashes on S3 Savage. :(
> Hopefully the new improved version of this prog will be finished this summer..
Скачать
EXE-шник, с картами
Скачать исходник на Delphi (без
комментариев, извините)
*NOTE* The above links don't
seem to work if you use DownloadAccelerator(tm).