Du bist nicht angemeldet.

Werbeanzeige

1

11.01.2008, 18:29

Frage zu Direct3D

Hi!

Ich kompletter Anfänger, was das Zeichnen in Direct3D angeht, daher folgende Frage:

Ich möchte gerne ein Koordinatensystem entlang der X, und Y - Achse zeichnen und in diesem zweidimensionalen Koordinatensystem möchte ich ein einfaches Rechteck zeichnen.
Übrigens wär es super, wenn die Linienenden des Koordinatensystems einen Pfeil hätten.

Mir ist nun nicht klar, wie ich das Rechteck und das Koordiantensystem voneinander unabhängig zeichnen kann. Muss ich hierbei zwei Vertexbuffer deklarieren, einen für das Rechteck und noch einen für das Koordinatensystem oder geht das irgendwie anders.

Danke im Voraus für die Hilfe :)

lg enne

2

11.01.2008, 20:40

Hi auch! 2 Vertexbuffer ist ein guter Ansatz. Einen für die Linien X und Y (ggf. die Pfeile), und einen für die Dreiecke (das Rechteck). Dann Vertexbuffer setzen mit SetStreamSource, DrawPrimitive Linelist und DrawPrimitive Trianglestrip (oder Trianglelist) und ab dafür. Frage mich, warum du es noch nicht probiert hast? :)

3

12.01.2008, 19:43

Zitat von »"TrikkieMikkie"«

Hi auch! 2 Vertexbuffer ist ein guter Ansatz. Einen für die Linien X und Y (ggf. die Pfeile), und einen für die Dreiecke (das Rechteck). Dann Vertexbuffer setzen mit SetStreamSource, DrawPrimitive Linelist und DrawPrimitive Trianglestrip (oder Trianglelist) und ab dafür. Frage mich, warum du es noch nicht probiert hast? :)


Hi und danke für die rasche Antwort :) Wie gesagt, ich bin ziemlich Anfänger was das Programmieren mit Direct3D angeht und deswegen dachte ich mir, dass zwei VertexBuffer übertrieben wären.

Kannst du mir noch zufällig sagen, wie ich die Strichstärke bzw. die Strichart beeinflussen kann? Beispielsweise hätte ich gerne manche Linien dicker als andere oder strichpunktiert.

Vielen Dank :)

lg enne

Bugger

Frischling

Beiträge: 66

Wohnort: Bezirk Freistadt

Beruf: EDVO HTL Schüler

  • Private Nachricht senden

4

13.01.2008, 01:02

Dicke Linien kann man soweit ich weiß mit etweder indem man ID3DXLine benutzt und ID3DXLine::SetWidth() setzt, Mehrere Linien nebeneinander zeichnet oder die Linien mit Rechtecken zeichnet. Am 'leichtesten' wär die 2. Option. Ich würde aber auf dicke Linien verzichten wenns nicht unbedingt notwendig ist

Gestrichelt Linien kannst du auch wieder (soweit es mir bekannt ist) nur durch mehre hintereinander gesetzt Linien erreichen bzw. Strichpunktiert eine Linie und ein Punkt(POINTLIST oder so).

Wenn du nicht drum herum kommst würd ich dir gestrichelte Linien empfehlen, die könnest du mit einer entsprechenden Funktion am einfachsten und wahrscheinlich auch am schnellsten Zeichnen ;).
Hältst du nicht den Bug in Ehren, wird er dich noch manches Lehren.

Ein Gespräch setzt voraus, dass der andere Recht haben könnte.

5

14.01.2008, 21:02

Vielen Dank

6

15.01.2008, 13:48

Eine Frage hätte ich nun noch:

Ist es eigentlich möglich, zweidimensionale Objekte wie Beispielsweise ein Rechteck zu Spiegeln? Ich würde nämlich gerne ein paar solcher Objekte vom 1. Quadranten in den 4. Quadranten im Koordinatensystem spiegeln.

Danke nochmals für die Hilfe :)

Faule Socke

Community-Fossil

Beiträge: 1 917

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

7

15.01.2008, 14:03

Die frage ist, ob du hinterher ein zweites dreieck haben willst, oder ob es nur ein "effekt" sein soll. Die erste methode ist ganz einfach:
Angenommen du willst entlang der Y-Achse spiegeln, dann erstellst du einfach nen 2. vertexbuffer und kopierst den inhalt des alten. Nun musst du nur noch das vorzeichen der X koordinate umkehren(solltest du am besten gleich beim copy machen kostet dann weniger leistung) - Fertig!

// Edit: Hier noch ne funktion, die nen Vector entlang der YS Achse spiegelt.
Das ergebnis wird in einem neuen Vector zurückgeliefert.
Ich gehe davon aus, das die Vectorklasse einen Init-construktor hat, der x- und y-komponente erwartet.

C-/C++-Quelltext

1
2
3
4
const CVector2D &ReflexY(const CVector2D &src)
{
    return CVector2D(-(src.GetX()), src.GetY);
}


Den rest will ich mal noch nicht verraten, für ganze Dreiecke musste also noch etwas experimentieren.

Socke

8

15.01.2008, 15:40

Supi, werd ich gleich testen, vielen Dank Socke ;)

Werbeanzeige