Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

11

12.11.2013, 18:28

Die reinen Vertices können frei von außen gesetzt werden, das ist also nicht fest vorgegeben. Ich kann also alles Mögliche wählen.
Zum testen habe ich mir die folgenden ausgewählt, für ein Quad, ein Sechseck und einen Kreis:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
    Vertex[] vs_quads = [
        Vertex(100, 150),
        Vertex(200, 150),
        Vertex(200, 250),
        Vertex(100, 250)
    ];

    Vertex[] vs_six = [
        Vertex(100, 150),
        Vertex(125, 100),
        Vertex(175, 100),
        Vertex(200, 150),
        Vertex(175, 200),
        Vertex(125, 200)
    ];

    Vertex[] vs_circle = [
        Vertex(205,     380),
        Vertex(204.454, 385.195),
        Vertex(202.841, 390.164),
        Vertex(200.23,  394.688),
        Vertex(196.736, 398.572),
        Vertex(192.511, 401.644),
        Vertex(187.741, 403.771),
        Vertex(182.632, 404.861),
        Vertex(177.408, 404.865),
        Vertex(172.297, 403.784),
        Vertex(167.523, 401.664),
        Vertex(163.293, 398.598),
        Vertex(159.793, 394.72),
        Vertex(157.175, 390.2),
        Vertex(155.554, 385.234),
        Vertex(155,     380.04),
        Vertex(155.538, 374.844),
        Vertex(157.143, 369.873),
        Vertex(159.747, 365.344),
        Vertex(163.234, 361.455),
        Vertex(167.454, 358.376),
        Vertex(172.222, 356.241),
        Vertex(177.329, 355.143),
        Vertex(182.552, 355.131),
        Vertex(187.665, 356.204),
        Vertex(192.442, 358.316),
        Vertex(196.677, 361.375),
        Vertex(200.183, 365.247),
        Vertex(202.808, 369.764),
        Vertex(204.438, 374.727)
    ];
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

12.11.2013, 18:33

Nun, in dem Fall ist es wohl am sinnvollsten, das Bounding Rectangle zu nehmen, so wie du es machst. Inwiefern ist die Performance davon denn ein Problem? Man kann das Mapping natürlich einfach mit einem fixen Scale machen und relativ z.B. zum ersten Vertex oder zu einem festgelegten Ursprung. In letzterer Variante ist das Mapping dann auch über mehrere Polygone hinweg konsistent...

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

13

12.11.2013, 18:52

Ich wollte nur weitere Wege wissen. :)
Wie würde ich es, wie du sagst, mit einem fixen Scale relativ zu einem Vertex machen?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

12.11.2013, 19:02

Naja, texcoord = (vertexcoord - origin) * scale, das geht dann auch im Vertex Shader... ;)

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

15

12.11.2013, 19:05

Ah, ich arbeite hierbei gar nicht mit Shadern. :)
Aber danke für eure Ratschläge. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

12.11.2013, 19:07

Du musst es ja nicht mit Shadern machen... ;)

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

17

12.11.2013, 19:35

Ich hab jetzt meine Methode nochmal überarbeitet und denke die sollte genügen. :)
Falls jemand jemals sowas benötigt, verlinke ich einfach mal auf den Code:
http://codepad.org/kkNf0C9U
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

18

13.11.2013, 00:26

Ich hab da glatt noch eine Frage: Was ist wenn ich meine Texture mit einem gewissen Versatz auf das Shape zeichnen möchte? Sagen wir meine Texture ist 140x140px groß und ich möchte den Ausschnitt (25, 25, 100, 100) zeichnen. Wie mache ich das bei z.B. einem Kreis? Bei einem Quad wäre es ja dann:

tx = 25 / 140 = 0.17857
ty = tx
tw = 100 / 140 = 0.714
th = tw

Doch wie genau mache ich das bei mehreren Texturekoordinaten? Dieses Offset muss ja irgendwie darauf addiert werden. Nur wie genau? Bin vllt. auch nur müde, aber wenn wer was weiß, ich guck hier täglich rein. :search:
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

19

13.11.2013, 00:31

Naja, du hast jetzt die linke obere Ecke (oder linke untere, je nachdem) und Breite/Höhe deines Rechtecks. Die gesuchten Texturkoordinaten beschreiben dagegen die 4 Ecken des Rechtecks...

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

20

13.11.2013, 00:40

Ich kann momentan leider nur erahnen worauf du hinaus willst.^^ Bin echt fertig und werde mich gleich mal ausklinken. Aber ein müder Versuch: Meinst du ich soll dieses Texture Rect als Basis meiner Texturekoordinaten nehmen und dann erst diese an das Shape anpassen?
Deine Punkte machen mich immer noch verrückt. :D
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige