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

21

29.02.2008, 14:05

Zitat von »"Drakon"«

Was die Source angeht. Was willst du sehen? Da gibt es ja vieles. Wie ich die Textur lade, berechne, in den VB schiebe, rendere..

Jou, genau das. Dann kann ich per C&P in einer Testumgebung mal etwas rumprobieren. Die Grafik hab ich ja aus deiner TestApp. :)

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

22

29.02.2008, 14:21

Naja gefüllt wird das so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            m_pData[0+(iSpriteNr*6)].vPos       = vec (posUL.x, posUL.y, posUL.z);
            m_pData[0+(iSpriteNr*6)].vtex       = vec2 (texUL.x, texUL.y);
            m_pData[0+(iSpriteNr*6)].dwColor    = sprite->GetBgColor ();

            m_pData[1+(iSpriteNr*6)].vPos       = vec (posUR.x, posUR.y, posUR.z);
            m_pData[1+(iSpriteNr*6)].vtex       = vec2 (texUR.x, texUR.y);
            m_pData[1+(iSpriteNr*6)].dwColor    = sprite->GetBgColor ();

            m_pData[2+(iSpriteNr*6)].vPos       = vec (posBL.x, posBL.y, posBL.z);
            m_pData[2+(iSpriteNr*6)].vtex       = vec2 (texBL.x, texBL.y    );
            m_pData[2+(iSpriteNr*6)].dwColor    = sprite->GetBgColor ();

            m_pData[3+(iSpriteNr*6)].vPos       = vec (posUR.x, posUR.y, posUR.z);
            m_pData[3+(iSpriteNr*6)].vtex       = vec2 (texUR.x, texUR.y);
            m_pData[3+(iSpriteNr*6)].dwColor    = sprite->GetBgColor ();

            m_pData[4+(iSpriteNr*6)].vPos       = vec (posBL.x, posBL.y, posBL.z);
            m_pData[4+(iSpriteNr*6)].vtex       = vec2 (texBL.x, texBL.y);
            m_pData[4+(iSpriteNr*6)].dwColor    = sprite->GetBgColor ();

            m_pData[5+(iSpriteNr*6)].vPos       = vec (posBR.x, posBR.y, posBR.z);
            m_pData[5+(iSpriteNr*6)].vtex       = vec2 (texBR.x,    texBR.y );
            m_pData[5+(iSpriteNr*6)].dwColor    = sprite->GetBgColor ();


Wobei ich jetzt einfach mal GARANTIERE, dass die Texturkoordinaten stimmen. (Also per Debugger geschaut sind immer schön 0.0, 1.0 oder 0.5) - Also fällt der ganze Rest ja schon mal Weg, wie ich auf diese Daten komme.

Also einfach gesagt wird so ein/mehrere VB's gefüllt und dann werden schlussendlich nur noch die VB's gerendert. Dort kann man ja nicht mehr viel falsch machen.
PS. Wenn du es mit Filter renderst, wird es dynamisch gerendert. Hat zwar nichts mit dem Filter zu tun, aber man sieht, dass es keinen Unterschied macht ob es dynamisch, oder statisch gerendet wird und man sieht zusätzlich noch den Unterschied vom Filter und ohne.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

23

29.02.2008, 16:22

Hab grad mal spaßeshalber in der tilemap.txt die ersten Werte auf

ground_40.bmp
60
60
29
29
39
39
0

geändert - hast du evtl vergessen, dass bei 40 Pixeln Pixel 0 bis 39 deine Freunde sind? (Hab nich den Code dazu angeschaut, also falls man da eindeutig erkennen kann, dass das nicht das Problem ist dann bitte ich um Nachsicht^^

24

29.02.2008, 17:07

Logische (Denk-) Fehler dieser Art vermute ich auch. Ich hab den texturierten Teil der Bitmap mal verbreitert, was ähnliche Ergebnisse liefert wie bei Änderungen in der tilemap.txt.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

25

29.02.2008, 17:19

das hab ich auch schon probiert. bei mir ist der fehler dann aber trozdem noch aufgetreten. allerdings denk ich auch dass es sich um etwas in der art handelt (oder eben um eine fehlende, aber notwendige 0.5 pixel verschiebung). ich hab aber auch schon auf das und ähnliche 1 off fehler getestet: ohne erfolg...

naja, vielleicht hab ich das system auch nicht richtig verstanden und deswegen die falschen dinge verändert. ich denk es wär hilfreich wenn drakon mal seinen ganzen code hochlädt damit ihr euch das evtl. auch genauer anschaun könnt. ich würds sonst auch tun, aber ich will hier nicht einfach so seinen code veröffentlichen ;)

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

26

29.02.2008, 22:55

@grek40 Das wars nicht. Wenn ich das mache, oder irgendwas mit den 0.5 verschieben, dann fehlt mir ein GANZES Pixel (also in beide Richtungen).

Ausserdem hast du die Breite einer "Untertilemap" geändert. ;) (die 29-iger)

Was kann man den noch gross falsch machen, wenn man da:

C-/C++-Quelltext

1
2
3
            m_pData[0+(iSpriteNr*6)].vPos        = vec (posUL.x, posUL.y, posUL.z);
            m_pData[0+(iSpriteNr*6)].vtex        = vec2 (texUL.x, texUL.y); // Die Werte sind exakt 0.0f / 0.5f oder 1.0f

            m_pData[0+(iSpriteNr*6)].dwColor    = sprite->GetBgColor (); 


die richtigen Werte drinne hat. Wenn ich nähmlich genau da das mit den 0.5 Pixel verschieben mache, dann wird effektiv alles um 1 Pixel verschoben.

Aber wenn ihr sonst noch Ideen habt, wie das mit dem 40/39, dann bin ich natürlich dafür offen. ;)

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

27

29.02.2008, 23:42

Also dot hat des Rätsels Lösung. Ich hatte Multisampling angeschaltet, aber warum das so rauskam jetzt so komisch wurde, kann jetzt diskutiert werden. ;)

EDIT: Ohne Filterung ist der Fehler weg, wenn ich jetzt aber den Filter einschalte, kommen die Streifen wieder. :S

Immerhin konnten wir es jetzt eingrenzen. Es scheint also kein Berechnungsfehler von mir zu sein. :D

Ideen, Anregungen bitte hier posten. ;)

28

01.03.2008, 08:47

Würde mich zwar sehr für dich freuen, aber so ganz glauben mag ich das nicht. Multisampling kommt doch erst zum Einsatz, wenn das Vertexbuffer-Initialisieren, Texturemapping usw. erledigt sind, oder? Also dürfte der Multisampler von dem Blau doch nichts wissen. Und wie erklärt ihr euch die blauen Bereiche in dem Screenshot da?


(Link)

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

29

01.03.2008, 12:07

Doch, kannst es glauben, wenn ich das Multisampling ausschalte, dann sind die Streifen (ohne Filter) weg..

Achja, sorry, die blauen FLÄCHEN sind mit Absicht so da. Ist zum testen der Tilemap. Man kann z.B durch ändern der tilemap.txt das ändern. (0 entspricht dem Gras und 1 entspricht dem blauen Teil)

Ich habe einfach zum Vergleich ein paar Flächen eingebaut, damit man es vergleichen kann.

Bei Gelegenheit werde ich eine neue Version der App raufladen.

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

30

02.03.2008, 20:21

So, ich habe jetzt eine neue Version. Man sieht jetzt, dass ohne Filter alles stimmt, aber mit dem Filter (Space) kommen die blauen Streifen wieder.

www.drakon.ch/misc/eng_test.rar

Ich bin ratlos. Wie kann das den sein? - Es scheint mir so, dass der Filter einfach die Texel, die in der Textur sind auch noch nimmt, auch wenn sie gar nicht drauf sind.. :S

Dieses Phänomen müsstet ihr ja theoretisch auch mal gesehen haben bei euch.

Edit:
Was jetzt noch zu erkenn ist, ist, dass die Streifen in einem mehr oder weniger regelmässigem Abstand stärker werden und wieder schwächer. (Jedoch nicht absolut, sondern je nachdem, wo die Kamera ist)


Edit2:

Also langsam gewinne ich den Eindruck, dass ICH nichts falsch mache.

hier
habe ich was gelesen, was micht stutzig gemacht hat.

[quote"patrick"]Beim Tiling ist das sowieso vergessen [/quote]
(Wenn ich mich nicht irre, ist das sogar der patrick, der auch hier war, als unsigned long?)

Naja, auf jeden Fall ist meine jetztige Theorie, dass ich den Linearen Filter nicht einsetzen darf, da der die benachbarten Texel auch noch dazu nimmt. Kann mir das jemand bestätigen? Oder besser noch mit einem Tesprogramm wiederlegen?

Werbeanzeige