Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 4. červen 2008, 11:09:55 Předmět: Kruh |
|
|
Tak dnes mám pro Vás něco lehčího
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 |
|
|
Quiark
Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 4. červen 2008, 11:48:42 Předmět: |
|
|
No a model by se skládal z čeho? Z čar _________________ Mám strach |
|
Návrat nahoru |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 4. červen 2008, 12:12:16 Předmět: |
|
|
Quiark napsal: |
No a model by se skládal z čeho? Z čar |
Ano jasně to vím , jde mi jen o to jeslti není třeba nějaký rychlejší způsob než ruční sloření z čar.. |
|
Návrat nahoru |
|
|
Crusty
Založen: 28. 08. 2007 Příspěvky: 120 Bydliště: Praha
|
Zaslal: 4. červen 2008, 12:33:43 Předmět: |
|
|
a vytvorit quad a na nej hodit texturu s tim kruhem se ti nehodi? _________________ http://www.2ox.cz |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 4. červen 2008, 13:03:02 Předmět: |
|
|
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 |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 4. červen 2008, 13:24:27 Předmět: |
|
|
Omlouvám se za nepřesné vyjádření, myslel jsem kruh jako prsten, ne jako plochu.. |
|
Návrat nahoru |
|
|
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 4. červen 2008, 13:35:29 Předmět: |
|
|
tak napisu rovnou kruznice
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 |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 4. červen 2008, 13:55:42 Předmět: |
|
|
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 |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 4. červen 2008, 14:10:27 Předmět: |
|
|
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 |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 4. červen 2008, 14:21:06 Předmět: |
|
|
Š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 |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 4. červen 2008, 14:25:39 Předmět: |
|
|
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í |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 4. červen 2008, 15:08:30 Předmět: |
|
|
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 |
|
Návrat nahoru |
|
|
|