Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Jefo
Založen: 02. 07. 2011 Příspěvky: 58
|
Zaslal: 1. červenec 2013, 20:08:31 Předmět: XNA a kreslenie čiar |
|
|
Ahoj
potreboval by som poradiť s kreslením čiar v XNA. Mohol by mi prosím niekto napísať ako na to a doplniť to aj kratkym zdrojákom.
Ďakujem |
|
Návrat nahoru |
|
|
Dlaha
Založen: 30. 07. 2007 Příspěvky: 598 Bydliště: Olomouc
|
Zaslal: 2. červenec 2013, 10:01:57 Předmět: |
|
|
Tohle je kupodivu trochu komplikovanější a musíš zabrouzdat do 3D. SpriteBatch pro to metodu nemá (pokud má, tak jsem hlupák, že jsem ji za ty roky nenašel).
Pročti si tohle: http://msdn.microsoft.com/en-us/library/bb975154.aspx
Potřebuješ efekt na kreslní (o efektech viz. v odkazu výše). Nejrychlejší bude vytvořit si BasicEffect na kreslení (můžeš si ale napsat i vlastní). Potom mu musíš nastavit vykreslovací matice (opět by o tom měli psát v odkazu výše).
kód: |
BasicEffect basicEffect;
basicEffect.World = Matrix.Identity;
basicEffect.View = Matrix.CreateLookAt(new Vector3(5, 5, 5), Vector3.Zero, Vector3.Up);
basicEffect.Projection = Matrix.CreatePerspectiveFieldOfView(
MathHelper.ToRadians(45), // 45 degree angle
(float)GraphicsDevice.Viewport.Width /
(float)GraphicsDevice.Viewport.Height,
1.0f, 100.0f);
|
Tady je použita projekční matice s perspektivou, ale tobě se bude asi hodit víc Orthogonální, jestli kreslíš přes SpriteBatch (něco o tom určitě přes google najdeš).
Dál musíš mít co vykreslit, takže si uděláš pole s jednotlivými body. Plus indexování těchto bodů (pořadí ve kterým se budou kreslit).
kód: |
VertexCollection<VertexPositionColor> vertices = new VertexPositionColor[2];
short[] indexes = new short[2];
// a naplnis to
vertices[0].Position=new Vector3(-1,1,0);
vertices[1].Position=new Vector3(1,-1,0);
indexes[0]=0; indexes[1]=1;
|
A pak vykreslíš v metodě Draw:
kód: |
foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes) {
pass.Apply();
GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(
PrimitiveType.LineStrip,
vertices, 0, vertices.Length,
indexes, 0, indexes.Length - 1
);
}
|
Tenhle kód kreslí všechny průchody efektu, což u BasicEffect není nutné, ale může se ti to hodit vědět.
Nevím jistě, jestli jsem se nedopusil nějaké chyby a bude to fungovat, nezkoušel jsem kompilovat. Barvu vykreslované čáry a nějaké další vlastnosti si pak můžeš nastavit v třídě BasicEffect.
Počítám s tím, že používáš XNA 4.0. _________________ Other Inside
Greenlitnuto! |
|
Návrat nahoru |
|
|
Jefo
Založen: 02. 07. 2011 Příspěvky: 58
|
Zaslal: 2. červenec 2013, 16:02:58 Předmět: |
|
|
Ok. Dakujem už sa mi pdarilo niečo nakresliť cez XNA 4.0. Pomohlo by mi keby mi ešte poradíte ako zmeniť hrúbku čiary. Našiel som niečo cez "GraphicsDevice.RenderState.PointSize" len to mi v XNA 4 nefunguje. |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 3. červenec 2013, 09:29:46 Předmět: |
|
|
Pokud vím, tak XNA je nad Direct3D, a ten tloušťku čar neumí (viz příšerné pixel tlusté vlasy hrdinky v jednom starém 3D Marku). To jde jen v OpenGL (antialiasované čáry, ale vyžaduje řazení a není podporováno s novými profily). "point size" se bude asi týkat point sprites. Takže pro XNA pravděpodobně nezbude než tesselovat čáru do polygonů se zprůhledňujícími se okraji. Jako to měly v iOS vezi Cut the Rope. Což mě napadá - pro co ta aplikace má být? Když je to XNA, tak pro webové prohlížeče a Windows 8 Metro můžeš programovat v JavaScript/Canvas, kde ty antialiasované tlusté čáru jsou. _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 3. červenec 2013, 18:39:13 Předmět: |
|
|
Jen doplnění Ladise - Teoreticky je nemusíš tessellovat, ale stačí použít alpha blending a texturu namapovanou na "čáru z polygonů". Ostatně tak se to dělá i v OpenGL (pokud nepoužíváš staré profily). _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
|
satik
Založen: 06. 05. 2010 Příspěvky: 161 Bydliště: Krkonose
|
Zaslal: 4. červenec 2013, 08:41:43 Předmět: |
|
|
Ja to resil tak, ze jsem vykresloval bily pixel obarveny podle zadane barvy a roztahnuty na sirku na delku cary a na vysku na tloustku cary a orotovany podle potreby (Atan2 ti zjisti uhel). |
|
Návrat nahoru |
|
|
Jefo
Založen: 02. 07. 2011 Příspěvky: 58
|
Zaslal: 9. červenec 2013, 17:46:04 Předmět: |
|
|
No uz kreslím čiary jedna radosť ide to super. Akurat mam problem s nastavením "Projection". Nastavil som ho takto
kód: |
efekt.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.Pi / 4 , GraphicsDevice.Viewport.Width / GraphicsDevice.Viewport.Height,1.0f, 10f);
efekt.View = Matrix.CreateLookAt(new Vector3(0,0,0),Vector3.Zero,Vector3.Up);
|
Problem je že nič nevidím.
Ďalej som skúšal kresliť trojuholnky teda face. No niečo som nakreslil a pod "Orthographic" projekciou mi to aj zobrazilo no neviem ako mam ist správňe na to. Skúšal som takto.
kód: |
body[0] = new VertexPositionColor(new Vector3(graphics.GraphicsDevice.Viewport.Width / 2 - 50f, 40f, -1f), Color.Yellow);
body[2] = new VertexPositionColor(new Vector3(graphics.GraphicsDevice.Viewport.Width / 2 - 50f, 90f, -1f), Color.Yellow);
body[1] = new VertexPositionColor(new Vector3(graphics.GraphicsDevice.Viewport.Width / 2 +50f, 90f, -1f), Color.Yellow);
body[3] = new VertexPositionColor(new Vector3(graphics.GraphicsDevice.Viewport.Width / 2 + 50f, 40f, -1f), Color.Yellow);
indexes = new short[6];
indexes[0] = 0;
indexes[1] = 1;
indexes[2] = 2;
indexes[3] = 0;
indexes[4] = 1;
indexes[5] = 3;
|
Kreslím to takto
kód: |
GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(PrimitiveType.TriangleList, body,0,4,indexes, 0, 2);
|
Vie mi prosím niekto pomôcť s nastavením projekcie a so správnym kreslením tych fejsov(trojuholnikov). Ďakujem |
|
Návrat nahoru |
|
|
Jefo
Založen: 02. 07. 2011 Příspěvky: 58
|
Zaslal: 9. červenec 2013, 18:48:54 Předmět: |
|
|
Problem mam v tom ze mi to nekresli druhy trojuholnik |
|
Návrat nahoru |
|
|
|