Hallo!
Mit DirectDraw ist es ja kein Problem, ein Tileset zu machen.
Nun würde ich gerne das mittels Direct3D realisieren, wegen diverser Vorteile.
Aber wie mache ich das?
Ich lade eine Textur, und möchte dann einen Teil aus dieser Textur auf den Bildschirm bringen.
Zuerst der Code, mit dem das Vertex erzeugt wird:
Private Sub SquareVertices(ByVal vertices As _
Direct3D.CustomVertex.TransformedTextured(), ByVal X As Single, ByVal Y _
As Single, _
ByVal Width As Integer, ByVal Height As Integer, ByVal ProzX1 As _
Single, _
ByVal ProzY1 As Single, ByVal ProzX2 As Single, ByVal ProzY2 As _
Single)
'ProzX1 = 0
'ProzY1 = 0
'ProzX2 = 1
'ProzY2 = 1
vertices(0) = CreateVertex(X, Y, 0, 1, ProzX1, ProzY1) '
' Left-Top
vertices(1) = CreateVertex(X + Width, Y, 0, 1, ProzX2, ProzY1) '
' Right-Top
vertices(2) = CreateVertex(X, Y + Height, 0, 1, ProzX1, ProzY2) '
' Bottom-Left
vertices(3) = CreateVertex(X + Width, Y + Height, 0, 1, ProzX2, ProzY2) _
' Bottom-Right
End Sub ' SquareVertices
Private Function CreateVertex(ByRef X As Single, ByRef Y As Single, ByRef Z _
As Single, _
ByVal rhw As Single, ByRef tu As Single, ByRef tv As Single) _
As Direct3D.CustomVertex.TransformedTextured
CreateVertex.X = X
CreateVertex.Y = Y
CreateVertex.Z = Z
CreateVertex.Rhw = rhw
CreateVertex.Tu = tu
CreateVertex.Tv = tv
End Function ' CreateFlexVertex Hier mein Ansatz:
Ich rechne mit dem TU und TV Wert. Das klappt auch fast gut:
Ich denke mich erinnern zu können, daß ich wo gelesen habe, daß diese Werte dem Prozentwert entsprechen müssen, wo was als Textur verwendet werden soll.
Leider zeigt Direct3D dieses "Textur-Schnipsel" nicht 100% korrekt an, und verzerrt es irgendwie. Im groben stimmt die Darstellung schon, es ist unschön.
Das ist schwer zu erklären. Ich versuchs mal so: Stellt euch den Buchstaben H vor. Die Dicke der 3 Striche sind 2 Pixel dick und 10 Pixel Lang - im Idealfall. Bei meiner Ausgabe erscheint das H dann auch so - aber z.B. der Querstrich ist nur ein Pixel dick - aber alle ist sauber 10 Pixel lang.
Nu aber meine Fragen
1) gibt es eine bessere Lösung, als das, was ich mache?
2) was mache ich falsch?
3) gibt es einen Beispiel-Code, wo ich was daraus lernen kann?
Vielen Dank!!! |