Ausgefülltes Polygon mit Löchern zeichnen
-
Wie groß darf der Stencil-Puffer sein? Weil wenn meine Karte z.B. 10.000 x 10.000 Pixel groß ist, und ich sehe immer nur ein Bildausschnitt von 1000 x 1000, dann muss man entweder bei jeden Scroll den Stencil-Puffer neu berechnen. Außer er ist eben auch 10.000 x 10.000 Pixel groß.
-
Ich glaube ich hab mal was in der SDL lib gesehen, was surfaces erstellen kann und dann polygone auf diesen Surfaces zeichnet (2D) ,sodass du deine Texturen usw. gut ausnutzen kannst
-
XMAMan: Also Stencilbuffer in jedem Frame neu berechnen sollte imo ziemlich okay sein.
-
Ich probier das jetzt mit OpenGL einfach mal aus. Ich möchte den Stencil-Puffer erstellen, indem ich zuerst das größte Polygon zeichne(Setze Puffer-Bereich auf 1). Dann zeichne ich alle darin enthaltenen Polygone(Zweimal 1 ergibt wieder 0) und so weiter.
-
Weil wenn meine Karte z.B. 10.000 x 10.000 Pixel groß
Und du laedst die 100 MByte Textur als Ganzes und renderst sie als Ganzes?
-
@knivil: Hm, ja... das geht dann nicht. Man muss den Stencil-Puffer bei jeden Frame also neu berechnen. Anders gehts wohl leider nicht.
-
Was spricht dagegen, es gneau so zu machen, wie es das spiel tut: zuerst ein großes Rechteck zeichnen auf das eine Textur gekachelt wird. dann einfach die Löcher drüber zeichnen.
-
Warum sollte man 100% rendern wenn sowieso nur 1% sichtbar ist?
-
weil es nichts kostet.
-
Also ich würde so eine Map nicht als ein großes Polygon mit Löchern betrachten, sondern eher als einen Haufen Polygone. Schau dir mal SFML an...
-
Jo...
Himmel zeichnen, Ziegel drüber zeichnen, Gras drüber zeichnen, gewonnen.
Wenn du weniger Overdraw willst, kannst du ja die Himmel-Polygone (manuell, im Level Editor) so zurechtschneiden dass nur der sichtbare Teil gezeichnet wird. Da du aber immer noch von hinten nach vorne zeichnest, muss das nicht genau sein -- ungefähr Pi * Daumen ausgeschnitten reicht vollkommen - darf nur nicht zu wenig sein.
Kann man natürlich auch automatisieren. Je schlauer man das ganze macht, desto weniger CPU und GPU wird es weglutschen, aber dafür muss man dann auch entsprechend viel programmieren.
-
dot schrieb:
Also ich würde so eine Map nicht als ein großes Polygon mit Löchern betrachten, sondern eher als einen Haufen Polygone. Schau dir mal SFML an...
Waaaaaaaaaaah, er hat SFML gesagt!!!
Wo ist die SDL <-> SFML Polizei wenn man sie braucht???
-
He Leute, ich habe ein Big-Problem
Problem 1: Es ist Samstag Abend und ich sitze hier und programmiere.
Problem 2: OpenGL zeichnet meine Polygone nicht so wie ich will.
Schaut mal auf das Bild. Links habe ich mit System.Drawing(GDI+) ausgegeben, rechts mit OpenGL. Ich habe eine Krake mit Polygonen gezeichnet. Links ist es so wie es sein sein soll, rechts mit OpenGL, was Probleme macht.
http://img840.imageshack.us/img840/9770/polygonfehler.png
Hier der OpenGL-Code:
public override void drawFillPolygon(string texture, List<Vertex> points, bool makeFirstPixelTransparent) { Gl.glEnable(Gl.GL_TEXTURE_2D); Gl.glColor3f(1,1,1); Gl.glBindTexture(Gl.GL_TEXTURE_2D, getTexture(texture, makeFirstPixelTransparent, null).texturID); Gl.glBegin(Gl.GL_POLYGON); foreach (Vertex V in points) { Gl.glTexCoord2f(V.s, V.t); Gl.glVertex2i(V.x, V.y); } Gl.glTexCoord2f(points[0].s, points[0].t); Gl.glVertex2i(points[0].x, points[0].y); Gl.glEnd(); }
Hier der GDI+-Code
public override void drawFillPolygon(string texture, List<Vertex> points, bool makeFirstPixelTransparent) { Point[] newPoints = new Point[points.Count]; for (int i=0;i<newPoints.Length;i++) newPoints[i] = new Point(points[i].x, points[i].y); if (graph != null) graph.FillPolygon(getTexture(texture, makeFirstPixelTransparent, null).textureBrush, newPoints); } ... public class Vertex { public float s; public float t; public int x; public int y; public Vertex(); }
Warum will die Krake nicht so wie ich will?
-
OpenGL kann nur konvex, nicht aber konkav? Brauche ich etwa das hier? http://wiki.delphigl.com/index.php/Ear_Clipping_Triangulierung
Ihr müsst mir helfen
-
Ah ja... ich habe jetzt mal alle konkaven Polygone in Dreiecke zerlegt.
So sieht es nun aus:
http://img163.imageshack.us/img163/9770/polygonfehler.png
Es geht vorran mit mein bescheuerten Spiel