.[ ČeskéHry.cz ].
Sphere UV

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Matasx



Založen: 17. 08. 2008
Příspěvky: 258

PříspěvekZaslal: 11. září 2008, 15:05:35    Předmět: Sphere UV Odpovědět s citátem

Mám takový trapný dotaz Embarassed potřeboval bych vypočítat UV koordináty pro mapování textur ze souřadnic vertexů koule, takovým způsobem, aby byla na celou kouli natažena jedna textura právě jedenkrát. Buď mám špatně vzoreček nebo ještě neco jiného. Kód sem vkládat radši ani nebudu. (nevím jestli to tu už nebylo - nicméně sem to tu nenašel).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 11. září 2008, 15:11:15    Předmět: Odpovědět s citátem

mno jednak napis jak si delas kouli - jestli si ji pocitas sam - nebo jako gluSphere

gluSphere ma totiz problem ze spatne resi poly - smrskava je

ale jinak v noci pohledam zapoctak ze skoly kde jsem mapoval na kouli nejakou texturu zemekoule
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Matasx



Založen: 17. 08. 2008
Příspěvky: 258

PříspěvekZaslal: 11. září 2008, 15:23:14    Předmět: Odpovědět s citátem

Nikdy sem kouli netexturoval a tak sem to chtel proste zkusit, takze ten kod je trosku prasarna...
kód:

//vytvoření
m = Mesh.Sphere(d3dDevice, 0.02f, 10, 10);

//výpočet UV
//v cyklu pochopitelně (verts - PositionNormal, verts1 - PositionNormalTextured):
verts1[i].Position = verts[i].Position;
verts1[i].Normal = verts[i].Normal;
verts1[i].Tu = verts1[i].X / (float)Math.Sqrt(Math.Pow(verts1[i].X, 2) + Math.Pow(verts1[i].Y, 2) + Math.Pow(verts1[i].Z, 2));
verts1[i].Tv = verts1[i].Y / (float)Math.Sqrt(Math.Pow(verts1[i].X, 2) + Math.Pow(verts1[i].Y, 2) + Math.Pow(verts1[i].Z, 2));

ještě přiložím obrázek textury a výsledné otexturování

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Matasx



Založen: 17. 08. 2008
Příspěvky: 258

PříspěvekZaslal: 20. září 2008, 10:09:52    Předmět: Odpovědět s citátem

Takže opravdu nikdo neví, jak otexturovat kouli? Crying or Very sad
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 20. září 2008, 10:42:12    Předmět: Odpovědět s citátem

Vzato kolem a kolem, koule se texturuje hrozne blbe - ono rozumne natahnout ctverec na vec, ktera nema nikde zadnou hranu, proste nejde. Takze si musis vybrat nerozumny zpusob, jakym to udelas... nejsem grafik, takze nevim co pouzivaji oni, ale ja bych zvolil asi klasicky "atlasovy" zpusob, kde z textury udelas valec kolem te koule a pak to na ni prilepis (podobne jako to je u mapy sveta, kde je potreba obrazek koule natahnout na stranku).

To, co potrebujes, je prevest souradnice bodu z 3D kartezskych (tj. x, y, z) na polarni (tj. uhly na kouli) a pak upravit tak, aby ti sedely do rozmeru textury. Prevod provedes tak, ze si pro kazdy bod urcis, o jaky uhel je natoceny od pocatku soustavy souradnic (tj. treba od vektoru (1, 0, 0)) podle osy Y a podle osy Z. Tim dostanes dve cisla (dva uhly), ktere ti urci pozici v texture. Reci cisel

kód:

U = atan(z/x) [resp. PI/2 pro x = 0 a z > 0, -PI/2 pro x = 0 a z < 0]
V = atan(y/x) [resp. PI/2 pro x = 0 a z > 0, -PI/2 pro x = 0 a z < 0]

kde x,y,z jsou souradnice toho bodu, pro ktery pocitas pozici textury (s tim, ze predpokladam, ze stred koule je v (0, 0, 0)). Vysledek jsou dve cisla bud v radianech nebo ve stupnich, ktere si podle toho vydelis bud 2PI, nebo 360.
kód:

u = U/2PI
v = V/2PI

Texturove koordinaty byvaji mezi 0 a 1 (v OpenGL urcite, v DX asi taky), takze tim jsi hotovy.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 20. září 2008, 10:46:42    Předmět: Odpovědět s citátem

Matasx napsal:
Takže opravdu nikdo neví, jak otexturovat kouli? Crying or Very sad


treba http://mathworld.wolfram.com/GnomonicProjection.html
metod je vic, zkus google("sphere uv mapping" ?!) nebo vterrain.org
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 20. září 2008, 16:10:36    Předmět: Odpovědět s citátem

ondra - promitnuti valce dost zkresluje imho

ja to minule delal tak ze natahnes ctverec na kouli - akoratze to mrsi poly - takze udelas fintu - a posledni usek od posledni rovnobezky udelas jako triangle-fan - cimz sice prijdes o cast dat, ale vypada to lip - protoze to neni tak rozmaznuty
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 20. září 2008, 19:35:31    Předmět: Odpovědět s citátem

1) Buď to dělat mapováním válce na kouli, jak řekl ondrasej.
2) Nebo jako krychli, tzn. máš 6 textur a z každé strany jednu plácneš. Na to se hodí cubemapa, kde jenom zadáš těch 6 textur, jako koordináty použiješ normály té koule a máš to hotový. Žádný koordináty v tomto případě netřeba počítat, je to jednoduché a přímočaré řešení.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Matasx



Založen: 17. 08. 2008
Příspěvky: 258

PříspěvekZaslal: 20. září 2008, 22:09:14    Předmět: Odpovědět s citátem

No vida že to jde Smile sice se mi ještě ani jedno řešení nepodařilo realizovat (nevím co dělám špatně), ale díky všem... budu na tom pracovat až do úplněho pochopení Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 21. září 2008, 09:42:53    Předmět: Odpovědět s citátem

rezna> jak jsem psal... namapovat ctverec na kouli bez deformace jde fakt spatne Wink
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 21. září 2008, 23:32:04    Předmět: Odpovědět s citátem

Ale namapovat 6 textur na kouli jde krásně, viz např. obloha/pozadí/skybox/skydome/whatever ve hrách. Wink Pokud by si chtěl někdo toto řešení s cubemapou naprototypovat, dá se použít RenderMonkey, tam se to dá naklikat do minuty a snadno se pochopí princip. Vlastní implementace v kódu pak bude jasnější.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna