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

dot

Supermoderator

  • »dot« ist der Autor dieses Themas

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

1

13.08.2004, 23:33

texturkoordinaten

hi @ll

ich will einfach nur ein animiertes sprite rendern.

aber irgendwas stimmt mit meinen texturkoordinaten nicht...

die animationsframes sind nebeneinander in einer großen textur.

ich berechne meine u texcoords folgendermaßen ( beispiel mit 5 frames ):


(Link)


was mach ich falsch!¿

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

13.08.2004, 23:38

Is richtig, der Fehler muss woanders sein.

dot

Supermoderator

  • »dot« ist der Autor dieses Themas

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

14.08.2004, 00:10

irgendwie muss es an den texcoords liegen, hier mal ein screenshot:


(Link)

Stefan

Alter Hase

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

4

14.08.2004, 00:42

hm, sieht komisch aus, kannst Du eventuell einen Codeausschnitt mit den textccords und deiner Render-Funktion herzeigen!
Ansonsten würde ich von deiner Abildung her, wenn ich z.B das 2 Viereck(Nr.1) zeichnen möchte solche Koords verwenden!
Für den Vertex oben links = 0.2f,0.0f
für den oben rechts = 0.4f,0.0f
unten links = 0.2f,1.0f
rechts unten = 0.4f,1.0f


naja, ansonsten kann ich ohne Code nicht mehr sagen!


cya,
Stefan

dot

Supermoderator

  • »dot« ist der Autor dieses Themas

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

14.08.2004, 16:48

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SpriteVertex v[4];

v[0].pos.x = -0.5f;
v[0].pos.y = -0.5f;
v[0].u = 0.0f;
v[0].v = 1.0f;
v[1].pos.x = -0.5f;
v[1].pos.y = 0.5f;
v[1].u = 0.0f;
v[1].v = 0.0f;
v[2].pos.x = 0.5f;
v[2].pos.y = -0.5f;
v[2].u = 0.1f;
v[2].v = 1.0f;
v[3].pos.x = 0.5f;
v[3].pos.y = 0.5f;
v[3].u = 0.1f;
v[3].v = 0.0f;

v[0].pos.z = v[1].pos.z = v[2].pos.z = v[3].pos.z = 0.0f;


das macht mir 4 vertices für ein quad ( D3DPT_TRIANGLESTRIP ).

es gibt 10 frames in der animation und ich wollte testhalber nur mal den 1. anzeigen...

Stefan

Alter Hase

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

6

14.08.2004, 17:06

hm, wieso gehst du bei den Vertex 2 und 3 um 0.1 in - x-Richtung, auf deiner Zeichnung wäre es ja 0.2f! Ansonsten würde alles stimmen!
...
Edit: Du musst doch D3DPT_TRIANGLELIST verwenden?


cya,
Stefan

dot

Supermoderator

  • »dot« ist der Autor dieses Themas

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

14.08.2004, 17:17

Zitat von »"Stefan"«

hm, wieso gehst du bei den Vertex 2 und 3 um 0.1 in - x-Richtung, auf deiner Zeichnung wäre es ja 0.2f! Ansonsten würde alles stimmen!
...
Edit: Du musst doch D3DPT_TRIANGLELIST verwenden?


cya,
Stefan


0.1f weil ich eben 10 frames hab ( die 5 waren nur fürs beispiel ).

würde ich trianglelist verwenden, bräuchte ich entweder 6 vertices oder einen indexbuffer. mit tristrip kann ich mit 4 vertices in einem einzigen DrawPrimitive call ein quad zeichnen ohne indexbuffer...

also so:

Quellcode

1
pdev->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );


angenommen mein sprite vertex hat 32 bytes

also entweder * 6 gibt 192 bytes für ein quad.
oder * 4 + 4 * 2 ( 4 indices a 16 bit ) für den indexbuffer gibt 136 bytes für ein quad
oder mit als tristrip nur * 4 gibt 128 bytes für ein quad.

ist ein wenig speicherschonender ;)


zum rendern verwend ich folgende shader:

VertexShader:

Quellcode

1
2
3
4
5
6
7
8
9
10
vs_1_1

dcl_position    v0
dcl_normal      v1
dcl_texcoord    v2


m4x4 oPos, v0, c0

mov oT0, v2


VertexDeclaration:

Quellcode

1
2
3
4
5
D3DVERTEXELEMENT9 decl[] = {
    { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
    { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
    { 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
    D3DDECL_END() };


PixelShader:

Quellcode

1
2
3
4
5
ps_1_1

tex t0

mov r0, t0


ganz einfache shader also.

im prinzip will ich bei meinem normalmapping sample die lichquellen durch ein paar schöne sprites anstatt der farbigen kugeln sichtbar machen...

leider erschließt sich mir immer noch nicht was ich falsch mach ???

Stefan

Alter Hase

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

8

17.08.2004, 21:48

hm, und Du bist dir sicher, dass das mit D3DPT_TRIANGLESTRIP funktionieren kann? Weil DirectX doch nur Dreiecke texturieren kann..glaub ich halt mal...


cya,
Stefan

dot

Supermoderator

  • »dot« ist der Autor dieses Themas

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

17.08.2004, 23:16

???

mit nem tristrip zeichnest du auch nur dreiecke...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

10

18.08.2004, 09:20

@Stefan das funzt 100% da ich es sogut wie nur benutze...

Mir scheint das ganze nur verruscht zu sein. Wie groß ist die textur?

Werbeanzeige