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

1

18.01.2008, 14:43

Problem mit Zeichnen eines Quadrates

Hi!

Ich hab folgendes Problem: Ich würde gerne mittels eines VertexBuffers ein einfaches Quadrat zeichnen.

Dabei hab ich folgenden Code verwendet:

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
24
25
26
27
28
29
30
31
32
33
34
35
36
 public void VertexDeclaration(Device device)
        {

            if (device == null)
                throw new ArgumentNullException("Device is null");


            vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionColored), 5, device, Usage.None,
                  CustomVertex.PositionColored.Format, Pool.Managed);

            CustomVertex.PositionColored[] oVerts = new CustomVertex.PositionColored[5];

            oVerts[0].Y = (float)0.0f;
            oVerts[0].X = (float)0.0f;
            oVerts[0].Color = Color.Silver.ToArgb();

            oVerts[1].Y = (float)0.0f;
            oVerts[1].X = (float)25.0f;
            oVerts[1].Color = Color.Silver.ToArgb();

            oVerts[2].Y = (float)25.0f;
            oVerts[2].X = (float)25.0f;
            oVerts[2].Color = Color.Silver.ToArgb();

            oVerts[3].Y = (float)25.0f;
            oVerts[3].X = (float)0.0f;
            oVerts[3].Color = Color.Silver.ToArgb();

            oVerts[4].Y = (float)0.0f;
            oVerts[4].X = (float)0.0f;
            oVerts[4].Color = Color.Silver.ToArgb();

            vertexBuffer.SetData(oVerts, 0, LockFlags.None);


        }


Der Code ist übrigens in C# geschrieben.

Das Problem ist nun, dass Direct3D kein Quadrat, sondern ein Rechteck zeichnen, weil die Höhe des Rechtecks kleiner ist als die Länge.
Den Koordinaten der Vertices zufolge sollte doch aber eigentlich ein Quadrat gezeichnet werden, oder ??

lg enne

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

18.01.2008, 15:18

Re: Problem mit Zeichnen eines Quadrates

Zitat von »"enne87"«

Den Koordinaten der Vertices zufolge sollte doch aber eigentlich ein Quadrat gezeichnet werden, oder ??

Klingt nach einer verkehrten Projektionsmatrix. Da musst du doch irgendwo das Bildseitenverhältnis angeben.

3

18.01.2008, 15:35

Hm, keine Ahnung wie das funktionieren soll...

4

18.01.2008, 15:47

Wäre es eventuell möglich, dass mir jemand bitte den Code postet, mit dem man ein Quadrat zeichen kann?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

18.01.2008, 16:04

Wie wär's, wenn du stattdessen deinen kompletten Code zeigst?!

6

18.01.2008, 16:33

Ok, ich weiß nun zumindest, dass das Zielfenster, indem das Quadrat gerendert werden muss, gleich hoch wie breit sein muss.

Problematisch wird das ganze nur, sobald man anfängt das Fenster zu vergrößern bzw. zu verkleinern oder wenn man die Bildschirmauflösung verändert.

Gibts da eine Möglichkeit, dass sich die Seitenverhältnisse des Rechtecks irgendwie an die Fenstergröße anpasst?

Vielen Dank übrigens für die Hilfe :)

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

7

18.01.2008, 16:52

In jedem Frame die Projektionsmatrix an die Höhe und Breite des Fensters anpassen wäre da meine spontane Idee.
Signaturen werden überbewertet

8

18.01.2008, 17:21

Klingt nicht schlecht, werd ich auch gleich probieren, thx :)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

18.01.2008, 17:26

Genau das habe ich dir auch gesagt.

10

18.01.2008, 18:24

Zitat von »"GR-PA"«

In jedem Frame die Projektionsmatrix an die Höhe und Breite des Fensters anpassen wäre da meine spontane Idee.

Dürfte eigentlich genügen, wenn man das einmalig, beim Empfang der Nachrichten WM_SIZE und WM_EXITSIZEMOVE erledigt.

Werbeanzeige