Parallax mapping – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Parallax mapping – .NET – Fórum – Programujte.comParallax mapping – .NET – Fórum – Programujte.com

 

BDS+3
Věrný člen
13. 2. 2022   #1
-
0
-

Zdravím vás, potřeboval bych renderovat náhled povrchu. Povrch je definovaný jako 16bit grayscale raster (heightmap). Rozměry (poměr) povrchu jsou definovány jako DpiX, DpiY, DpiZ. 

O programování "3D"  jsem se nikdy nezajímal a ani se tomuto nemám v plánu nějak zvlášť věnovat.

Většina toho co jsem našel vypadá hodně složitě a způsobů řešení je hrozně moc. Já nepotřebuji, žádné animace ani textury. Potřebuji pouze z výškové mapy vygenerovat něco takového:

Připojen obrázek.

Připojen obrázek.

Výsledek pak bude možno uložit jako obrázek.

Chtěl bych technologii, která bude asi nejlépe s HW akcelerací (mapy jsou většinou do 4000x4000 px), ale aby výsledná aplikace běžela i na počítačích s DirectX 11 a i Windows7. Vím, že se takové věci dělají v OpenGL, DirectX... ale nevím co vybrat, hlavně bych nad tím nerad trávil měsíce. Úplně nejraději bych byl za nějaké hotové řešení, které bych jen doupravil dle svých představ. (Parallax mapping je asi to co potřebuji)

Díky za každou radu, která pomůže.

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
BDS+3
Věrný člen
13. 2. 2022   #2
-
0
-

edit: Ve skutečnosti  je vstupem pole ushort[] a rozměry. Rozměry jsou dány resolutionX mm, resolutionY (v mm), nejvyssiBodZ (0=0 mm; 65535=?mm). (to samozřejmě není důležité, důležité je aby se to renderovalo ve správném poměru)

Aplikace by neměla vyžadovat instalaci nějakého engine apd. (kromě DirectX).

Výpočet mapy při renderování náhledu 2000x2000px by neměl překročit sekundu a běžném počítači.

Je to utilita pro aplikaci ve WinForms v .net 4.7.2

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
gna
~ Anonymní uživatel
1698 příspěvků
13. 2. 2022   #3
-
0
-

V GIS se z výškových dat dělá tzv. hillshade, možná by ti to mohlo stačit a umí to třeba GDAL. Není úplně rychlý, ale jde to.

gdaldem hillshade inheightmap.png -of PNG outshade.png
# + případně další parametry na umístění zdroje světla

Pak vím, že třeba POV-Ray umí vyrenderovat výškovou mapu. Ten nemám nainstalovaný a z hlavy to nedám, ale je to příkaz height_field. To je teda ray tracer a taky nebude rychlý.

Parallax mapping je jen takové šizení světla na placaté textuře, ale ty obrázky, jak je máš tady by to mělo zvládnout. Nemusíš se nic moc učit, jen najdi nějaký ukázkový program, který to dělá a místo textury dej šedý čtverec a místo height mapy tu svoji.

Nahlásit jako SPAM
IP: 213.211.51.–
BDS+3
Věrný člen
14. 2. 2022   #4
-
0
-

#3 gna
díky za rady, zatím jsem zkusil přepsat ten hillShade a taky bumpMapping, ale není to ono. Například plynulý přechod není moc dobře viditelný. A u hiilshade když je nejspíš  úhel sklonu "stejný" jako úhel nasvícení a oka, tak vznikají nepěkné artefakty. Rychlost výpočtu je v pohodě, ale myslím, že je při renderování nutné přidat i nějaké "odlesky" nebo víc průchodů s různými úhly nasvícení. Myslím, že to co potřebuju je spíš na tom druhém obrázku. Zkrátka potřebuji aby ten vyrenderovaný reliéf vypadal spíš jako černobílá fotka toho povrchu.

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
Jerry
~ Anonymní uživatel
489 příspěvků
15. 2. 2022   #5
-
0
-

To co chceš dělá např. 3D Studio Max. Máš soubor s body X,Y,Z a 3DSMax ti udělá horský terén

https://www.youtube.com/watch?v=fSATE1G89GI

neni to algoritmus v C# nebo C++ ale dostaneš výsledný obrázek

jestli na to budeš potřebovat 3DS tak napiš ...

jinak umí to i Matlab a návod je tady:

1# figure(01);
1# A=load('$001');
1# a3=A(:,3);
1# a5=A(:,1);
1# x=reshape(a5,$002,$003);
1# a5=A(:,2);
1# y=reshape(a5,$002,$003);
1# a4=reshape(a3,$002,$003);
1# d1=min(A);
1# d2=max(A);
0# [xi,yi]=meshgrid(d1(1):$004:d2(1),d1(2):$005:d2(2));
0# zi=interp2(x,y,a4,xi,yi,'bicubic');
0# zi=interp2(x,y,a4,xi,yi,'bilinear');
0# zi=interp2(x,y,a4,xi,yi,'nearest');
0# surf(x,y,a4);
0# surf(xi,yi,zi);
0# surfc(x,y,a4);
0# surfc(xi,yi,zi);
0# mesh(x,y,a4);
0# mesh(xi,yi,zi);
1# meshc(x,y,a4);
0# meshc(xi,yi,zi);
1# axis tight;
1# xlabel('value 1');
1# ylabel('value 2');
1# zlabel('objective value');

a jsi schopen to uložit jako jpg obrázek.  a jestli to chceš použít a vysvětlit tak dej vědět.

a pak samozřejmě když to chceš v C++ nebo C# tak by si musel použít Unity nebo DirectX nebo Vulkan nebo OpenGL... .

tak se rozhodni co chceš ...

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:b97e:b44b:917e:ed08...–
Jerry
~ Anonymní uživatel
489 příspěvků
15. 2. 2022   #6
-
0
-

a jinak video návod pro Unity je třeba tady

https://www.youtube.com/watch?v=bFGXghavsD8

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:b97e:b44b:917e:ed08...–
Jerry
~ Anonymní uživatel
489 příspěvků
15. 2. 2022   #7
-
0
-

já bych to asi udělal v Unity jestli potřebuješ jen obrázek

https://forum.unity.com/threads/question-how-to-load-a-terrain-from-a-file.44544/

na netu je všude spousta příkladů pro heslo

Unity terrain from data file

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:b97e:b44b:917e:ed08...–
BDS+3
Věrný člen
15. 2. 2022   #8
-
0
-

#7 Jerry
Já jsem psal že je to Windows Form v .NET 4.7.2, dělám doplňující nástroj do této aplikace. Nechci to dělat externím nástrojem. Takže to buďto udělám přímo v projektu aplikace v c#, nebo v C/C++ jako DLL a funkci budu pak volat z této aplikace. Nevím jestli se dá (nějak jednoduše) pro tento příklad použít unity nebo vulkan a jestli by to bez doinstalace "driverů" běželo na starších PC

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
Jerry
~ Anonymní uživatel
489 příspěvků
15. 2. 2022   #9
-
0
-

aha tak zkus starej XNA 4.0 ..

http://virtuallyprogramming.com/XNATutorials/ThreeDTutorials/Terrain/Terrain.html

de to celkem snadno a je to v rámci Csharp

https://stackoverflow.com/questions/11532280/xna-creating-a-terrain

https://github.com/simondarksidej/XNAGameStudio/wiki/Riemers3DXNA4advterrainoverview

http://www.richardssoftware.net/2013/09/dynamic-terrain-rendering-with-slimdx.html

hm tady máš krásnej příklad

https://www.codeproject.com/Articles/11681/3D-Terrain-Visualisation-in-Managed-DirectX-9-and

a tady o tom máš celou knížku

http://lib.ysu.am/open_books/312636.pdf

a tady máš video

https://www.youtube.com/watch?v=istvTrLR4J4

https://www.youtube.com/watch?v=X7k9Wq2FF90

https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-1-generating-complex-procedural-terrains-using-gpu

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:b97e:b44b:917e:ed08...–
BDS+3
Věrný člen
15. 2. 2022   #10
-
0
-

#9 Jerry
díky za rady, ale můj největší problém, že nevím přesně v čem to udělat abych dosáhl požadovaného výsledku a zkoušet tohle všechno... to bych nad tím strávil roky. O technologiích, které si zde uvedl samozřejmě vím, spíš potřebuji radu co zvolit abych dokázal bez podrobných znalostí technologie napsat to co potřebuju. Já (snad) zítra ještě zkusím najít, nebo nakreslit nějaký příklad, jak bych si to přesně představoval.

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
Jerry
~ Anonymní uživatel
489 příspěvků
15. 2. 2022   #11
-
0
-

a tady sem to našel v C++

https://github.com/tobybessant/Terrain-Generation

a terrain generator

https://github.com/Jaysmito101/TerraForge3D

a něco na CodeProjektu

https://www.codeproject.com/Articles/14154/OpenGL-Terrain-Generation-An-Introduction

a tady je přímo heightmap příklad na githubu

https://github.com/djorna/terrain-generation

https://libs.garden/cpp/search?q=terrain+generation

http://www.rastertek.com/tutindex.html

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:b97e:b44b:917e:ed08...–
Jerry
~ Anonymní uživatel
489 příspěvků
15. 2. 2022   #12
-
0
-

a tady je přímo příklad na DirectX11 height maps

http://www.rastertek.com/tertut02.html

http://www.rastertek.com/tutterr.html

https://github.com/Dan6040/SharpDX-Rastertek-Tutorials/blob/master/README.md

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:b97e:b44b:917e:ed08...–
Jerry
~ Anonymní uživatel
489 příspěvků
16. 2. 2022   #13
-
0
-

asi bych použil něco tady z toho

http://www.richardssoftware.net/p/directx-11-tutorials.html

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:c12b:8740:b5a1:6756...–
Jerry
~ Anonymní uživatel
489 příspěvků
16. 2. 2022   #14
-
0
-

tady to dělaj přes XNA

http://www.catalinzima.com/xna/tutorials/4-uses-of-vtf/terrain-rendering-using-heightmaps/

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:c12b:8740:b5a1:6756...–
Jerry
~ Anonymní uživatel
489 příspěvků
17. 2. 2022   #15
-
0
-

už ti to funguje ??? potřebuješ pomoct ?

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:c56b:5526:ca37:4db...–
BDS+3
Věrný člen
18. 2. 2022   #16
-
0
-

#15 Jerry
vlezlo mi do toho něco co spěchá víc.

Jak se k tomu vrátím, napíšu..

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý