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

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

25.03.2012, 18:54

Linie "hüpft"

Hallo. Ich wollte für mein Editor ein Achsenkreuz aus 3 Linien Zeichnen. Mein Code ist Folgender:

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
D3DXVECTOR3 vertex[2];
    vertex[0].x = vStart.x;
    vertex[0].y = vStart.y;
    vertex[0].z = vStart.z;
    vertex[1].x = vEnd.x;
    vertex[1].y = vEnd.y;
    vertex[1].z = vEnd.z;

    D3DXCreateLine(Direct3D::Instance().GetDevice(), &line);

    Matrix View;
    Matrix Proj;
    Matrix Final;
    View = Direct3D::Instance().GetTransform(D3DTS_VIEW);
    Proj = Direct3D::Instance().GetTransform(D3DTS_PROJECTION);
    Final = World * View * Proj;

    line->SetWidth(fWidth);
    line->SetAntialias(true);

    line->Begin();
    line->DrawTransform(vertex, 2, (D3DXMATRIX*)&Final, LineColor);
    line->End();

Jetzt ist es so, dass meine Linie zwar gezeichnet wird aber wenn ich nach unten sehe, die Linie auch nach unten hüpft. (Bilder im Anhang)
Wie löse ich das? Danke
»FSA« hat folgende Bilder angehängt:
  • Line.jpg
  • Line_Down.jpg

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

25.03.2012, 19:13

Sind vStart und vEnd konstant oder ändern sich diese zwischendurch?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

3

25.03.2012, 19:34

Konstant.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

25.03.2012, 20:23

Dann musst du die Linie ja auch nicht jeden Frame neu erzeugen. Sehe jetzt aber auch keinen Fehler. Bin aber auch absolut nicht fit in DirectX.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

5

25.03.2012, 20:54

Dann musst du die Linie ja auch nicht jeden Frame neu erzeugen. Sehe jetzt aber auch keinen Fehler. Bin aber auch absolut nicht fit in DirectX.

Die Transformationsmatrizen sind ja nicht konstant.

Woher kommt eigentlich World?
Lieber dumm fragen, als dumm bleiben!

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

25.03.2012, 20:57

Das ist mir soweit bewusst. Aber folgendes müsste doch reichen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
    Matrix View;
    Matrix Proj;
    Matrix Final;
    View = Direct3D::Instance().GetTransform(D3DTS_VIEW);
    Proj = Direct3D::Instance().GetTransform(D3DTS_PROJECTION);
    Final = World * View * Proj;

    line->Begin();
    line->DrawTransform(vertex, 2, (D3DXMATRIX*)&Final, LineColor);     line->End();



Den Rest kann er sich aber sparen. Muss halt nur ein mal vorher gemacht werden.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

7

26.03.2012, 16:49

Habe es jetzt so gelöst:

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
struct line_vertex
{
    float x, y, z;
    DWORD color;
};

const DWORD line_fvf = D3DFVF_XYZ | D3DFVF_DIFFUSE;

// Render
line_vertex line_vertices[2];

    line_vertices[0].x = vStart.x;
    line_vertices[0].y = vStart.y;
    line_vertices[0].z = vStart.z;
    line_vertices[0].color = LineColor;

    line_vertices[1].x = vEnd.x;
    line_vertices[1].y = vEnd.y;
    line_vertices[1].z = vEnd.z;
    line_vertices[1].color = LineColor;

    Direct3D::Instance()->SetFVF(line_fvf);
    Direct3D::Instance()->DrawPrimitiveUP(D3DPT_LINELIST, 1, line_vertices, sizeof(line_vertex));

Allerdings weiß ich nicht wie ich die Linie dicker machen soll. Einfach zu der Position immer 1 Hinzuzählen? Was ist wenn man die Linie von der Seite anguckt? Dann ist sie wieder ein Pixel breit. Wie löse ich das?
Danke

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

8

26.03.2012, 21:11

Keiner ne Idee? Ich habe schon drüber nachgedacht ein Viereck zu Zeichnen aber ich will die Breite ja in Pixel angeben :/

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige