AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem mit gestrechten DirectX-Textur-teilen
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit gestrechten DirectX-Textur-teilen

Ein Thema von c113plpbr · begonnen am 7. Nov 2005 · letzter Beitrag vom 9. Nov 2005
 
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Problem mit gestrechten DirectX-Textur-teilen

  Alt 7. Nov 2005, 21:58
Zitat von Oxmyx:
Texturkoordinaten werden doch nicht in Pixel angegeben. Das heißt, du musst einfach einen gewissen Wert (irgendwas mit 0 komma irgendwas) abziehen, bis der Streifen verschwunden ist.
Ich bezweifle, dass ich in halben pixeln rechnen kann ...
Zitat von Oxmyx:
Ich verstehe auch nicht, was du mit "Wenn ich den Vertex mehr als 3 mal so groß mache, wie die Größe des Bereichs aus der Texturmap" meinst. Erstens hat ein Vertex keine Größe und zweitens haben die 3D-Koordinaten rein garnichts mit den Pixeln der Textur zu tun, sowas wie "3 mal so groß" kann es also gar nicht geben. Zeig doch mal ein Stückchen von deinem Code.
Naja, wenn der Vertex direkt "auf den Bildschirm" gezeichnet wird, (also mit RHW Parameter,) dann sind Texturgröße und "Vertices-größe" (also, quasi den platz den alle miteinander einnehmen, is nen bissl dumm auszudrücken; edit#3: jetzt hab ich das richtige wort gefunden: Polygongröße ) direkt vergleichbar.

Hier die wichtigsten Auschnitte aus dem Code:
Delphi-Quellcode:
type
  PVertex = ^TVertex;
  TVertex = record
    x, y, z, rhw : single; // Position des Vertex
    c : DWORD; // Farbe des Vertex
    tu, tv : single; // Texturkoordinaten des Vertex
  end;

const
  FVF = D3DFVF_XYZRHW or D3DFVF_TEX1 or D3DFVF_DIFFUSE;

procedure AddTriangleToVB(x1, y1 : Real; tu1, tv1 : single; c1 : DWORD;
                          x2, y2 : Real; tu2, tv2 : single; c2 : DWORD;
                          x3, y3 : Real; tu3, tv3 : single; c3 : DWORD);
begin
  AddVertexToVB(x1, y1, tu1, tv1, c1);
  AddVertexToVB(x2, y2, tu2, tv2, c2);
  AddVertexToVB(x3, y3, tu3, tv3, c3);

  Inc(fVBTriangles);
end;

procedure AddVertexToVB(x, y : Real; tu, tv : single; c : DWORD);
var
  pVertices : Pointer;
  Vertex : TVertex;
begin
  Vertex.x := x;
  Vertex.y := y;
  Vertex.z := 1;
  Vertex.rhw := 1;
  Vertex.tu := tu;
  Vertex.tv := tv;
  Vertex.c := c;

  fVB.Lock(fVBOffset * SizeOf(TVertex), SizeOf(TVertex), pVertices, D3DLOCK_DISCARD);
    Move(Vertex, pVertices^, SizeOf(TVertex));
  fVB.Unlock;
  Inc(fVBOffset);
end;

procedure Render;
begin
  Device.SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
  Device.SetRenderState(D3DRS_ZENABLE, 0);

  Device.SetFVF(FVF);
  Device.SetStreamSource(0, fVB, 0, sizeof(TVertex));
  Device.SetTexture(0, fAtlas);

  Device.DrawPrimitive(D3DPT_TRIANGLELIST, 0, fVBTriangles);
end;

//Hinzufügen von 2 Dreiecken zum VertexBuffer:
  AddTriangleToVB(32, 32, 64/256, 32/256, $00FFFFFF, //Links oben
                  128, 128, 96/256, 64/256, $00FFFFFF, //Rechts unten
                  32, 128, 64/256, 64/256, $00FFFFFF); //Links unten

  AddTriangleToVB(32, 32, 64/256, 32/256, $00FFFFFF, //Links oben
                  128, 32, 96/256, 32/256, $00FFFFFF, //Rechts oben
                  128, 128, 96/256, 64/256, $00FFFFFF); //Rechts unten
Aus den angegebenen Dreiecksgrößen lässt sich herauslesen, dass die Textur auf 2 Dreiecke gestrecht wird, die insgesamt, von den Maßen genau 3x so groß sind wie die Fläche der Textur.
Wären diese nur 2x so groß, würde dieses Problem nicht auftreten.

ciao, Philipp
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz