.[ ČeskéHry.cz ].
Kruh

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



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 4. červen 2008, 11:09:55    Předmět: Kruh Odpovědět s citátem

Tak dnes mám pro Vás něco lehčího Smile

jde mi o to jak co nejjednodušeji v directx vykreslit kruh.

Jako první možnost mě napadlo pomocí čar, nejsem si však jist zda by to bylo efektivní, aby kruh vypadal pekně, musí mít poměrně velké množství bodů a čar.

Jako druhá je použít model, ale přijde mi trochu zbytečné modlovat takto jednudchý objekt.



Co nejefektivnější metodu potřebuji najít proto, že na scéně bude poměrně velký počet kruhů, díky.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 4. červen 2008, 11:48:42    Předmět: Odpovědět s citátem

No a model by se skládal z čeho? Z čar Wink
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 4. červen 2008, 12:12:16    Předmět: Odpovědět s citátem

Quiark napsal:
No a model by se skládal z čeho? Z čar Wink


Ano jasně to vím Smile, jde mi jen o to jeslti není třeba nějaký rychlejší způsob než ruční sloření z čar..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Crusty



Založen: 28. 08. 2007
Příspěvky: 120
Bydliště: Praha

PříspěvekZaslal: 4. červen 2008, 12:33:43    Předmět: Odpovědět s citátem

a vytvorit quad a na nej hodit texturu s tim kruhem se ti nehodi?
_________________
http://www.2ox.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 4. červen 2008, 13:03:02    Předmět: Odpovědět s citátem

No kruh pomocí čar by bylo asi docela maso, protože abys vyplnil celou plochu kruhu, bylo by jich potřeba hodně moc.
Takže bych zkusil použít triangle-fan nebo tu texturu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 4. červen 2008, 13:24:27    Předmět: Odpovědět s citátem

Omlouvám se za nepřesné vyjádření, myslel jsem kruh jako prsten, ne jako plochu..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



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

PříspěvekZaslal: 4. červen 2008, 13:35:29    Předmět: Odpovědět s citátem

tak napisu rovnou kruznice Wink

ale i tak si myslim ze reseni s texturou bude asi nejelegantnejsi - te texture pak udelas bounding-box kruhu a mas vyhrano ne?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 4. červen 2008, 13:55:42    Předmět: Odpovědět s citátem

No na kružnici buď s texturou nebo si udělat model, do kterého si nageneruješ příslušné vertexy. Takový model Ti stačí udělat jen jeden v nějaké jednotkové velikosti a pak ho pomocí WORLD matice příslušně škálovat nebo jinak deformovat (např. na elipsu).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 4. červen 2008, 14:10:27    Předmět: Odpovědět s citátem

Tak nyní jsem trochu přešel od teorie k praxi a tyvrořil jsem si první kružnici pomocí LineStrip.

Vše je bez problémů až na její velikost. Mohu jí vykreslit, posunou, rotovat, ale jakmile jí změním velikost, nejen že se zdeformuje (zmešní) ale zároveň se také posune a to by neměla. Není to vedlejší efekt kvůli tomu že je složená z čar?

kód:

vytvoření
kód:

        Dim vertices(100) As CustomVertex.PositionColored
        Dim delta As Double = 2 * Math.PI / 100.0F
        Dim radius As Double = 10
        Dim i As Integer

        vrBufferMark = New VertexBuffer(GetType(CustomVertex.PositionColored), 101, dev, Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Managed)

        For i = 0 To 100
            vertices(i).Color = New ColorValue(0, 255, 0).ToArgb()
            vertices(i).Position = New Vector3(100 + (radius * Math.Sin(i * delta)), -0.5F, 100 + (radius * Math.Cos(i * delta)))
        Next

        vrBufferMark.SetData(vertices, 0, LockFlags.None)


vykreslení dvou kružnic a jedna má být menší
kód:

            scale.M11 = 1 : scale.M22 = 1 : scale.M33 = 1 : scale.M44 = 1
            m = Matrix.Translation(100, 100, 100)
            m = Matrix.Multiply(scale, m)
            dev.Transform.World = m
            dev.SetStreamSource(0, vrBufferMark, 0)
            dev.DrawPrimitives(PrimitiveType.LineStrip, 0, 100)


            scale.M11 = 0.5 : scale.M22 = 1 : scale.M33 = 1 : scale.M44 = 1
            m = Matrix.Translation(100, 100, 100)
            m = Matrix.Multiply(scale, m)
            dev.Transform.World = m
            dev.DrawPrimitives(PrimitiveType.LineStrip, 0, 100)


ps: nekopíruji sem celou render metodu ale pouze konec na vykreleni


plo lepší pochopení přikládám image
http://img183.imageshack.us/my.php?image=kruhyhm4.png
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 4. červen 2008, 14:21:06    Předmět: Odpovědět s citátem

Škálování se provádí vždy podle bodu [0,0], ale Ty máš střed na souřadnicích [100,100]. Takže ve vytváření vertexů zruš to přičítání stovky a mělo by to bejt OK.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 4. červen 2008, 14:25:39    Předmět: Odpovědět s citátem

Augi napsal:
Škálování se provádí vždy podle bodu [0,0], ale Ty máš střed na souřadnicích [100,100]. Takže ve vytváření vertexů zruš to přičítání stovky a mělo by to bejt OK.


Díky díky, nevšilm jsem si toho, pořád jsem nastavoval world matice a zapomněl jsem si překontrolovat vytváření..

ps: více očí víc ví Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 4. červen 2008, 15:08:30    Předmět: Odpovědět s citátem

Jen bych doplnil, že ten problém by šel také vyřešit tak, že world matice by se skládala z posunu o [-100,-100], škálování a/nebo rotace a následného posunu o [100,100]. Za těmito třemi maticemi by pak následovaly další libovolné matice. Ale vygenerovat vertexy nějak rozumně je určitě hezčí cesta Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Č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