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

29.08.2003, 11:35

Terrain für Editor

Hi!

Also ich möchte mir einen kleinen Terraineditor schreiben, indem ich mir zuerst mal das Terrain als große ebene Fläche erstelle. DIese Fläche soll dann von mir im Editor durch Mauseingaben in der Höhe verändert werden können. Wie kann ich das ganze realisieren? (also nicht das Terrain erstellen, sondern die Mauskoordinaten abfragen, und die Höhe des Terrains in "Echtzeit" zu manipulieren)
So in der Art des Morrowind Editors!
Mfg
IronMike

Jens

Treue Seele

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

2

29.08.2003, 11:57

wie jetzt?

das willst Du doch wohl nicht mit DX im 3-D-Modus machen, oder?

Im 2D-Modus:

POINT ptCursor;
case WM_MOUSEMOVE:

GetCursorPos(&ptCursor);
ScreenToClient(m_hWnd, &ptCursor );
m_pd3dDevice->SetCursorPosition(ptCursor.x, ptCursor.y, 0);
m_ptCursor = ptCursor;
break;

Die Messages MOUSEDOWN und MOUSEUP mit beachten.
Das sind übrigens die 2D-Koordinaten des Mauszeigers.
Kannst sie ja auch nach 3D transformieren.
Na dann viel Erfolg. Wird sicher nicht leicht werden, mit Deinem Vorhaben.
Bis später...

3

29.08.2003, 13:25

Warum denn nicht in 3D? Man brauch ja nicht unbedingt Direct3D dafür. Aber es macht es einfach viel einfacher.

Wozu gibt es denn das Picking? Du musst nur eine gewisse tolleranz einbauen. Das Picking wird immer durchgeführt wenn du den Cursor bewegst. Also mit der WM_MOUSEMOVE Message. Hier noch nen Tipp. Diese Message gibt auch an ob eine der drei Mousetasten gedrück wurde. Diese Information wird in dem Parameter wParam gespeichert.

Wenn eine Mousetaste gedrückt wurde, musst du das zwischenspeichern. In diesem fall wird dann nicht mehr das Picking durchgeführt, sondern nur die Y-Achse der Mouse beachtet, die dann die Höhe angibt.

Nur das schwierige wird sein, das wenn du einen Vertex anhebst, dann müssen die umliegenden Vertice mit angehoben werden, und das in einer ganz bestimmten Form. Diese Berechnung werden nicht leicht sein.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

4

29.08.2003, 13:40

Hi!

@Jens
Klar in 3D mit DX9.

@DragonMaster
Die linke und die rechte Maustaste kann ich ja über wParam abfragen, aber wie komm ich ans Mausrad (drücken, und scrollen!)?
Mfg
IronMike

5

29.08.2003, 16:07

Einfach mal in der MSDN nach schauen. Stichwort WM_MOUSEWHEEL
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

6

01.09.2003, 08:00

Hi!

Das mit WM_MOUSEWHEEL funktioniert in der MFC, aber nicht in der WinAPI! Habs bereits versucht!
Mfg
IronMike

Jens

Treue Seele

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

7

01.09.2003, 16:55

ääh, wie jetzt MFC?

Hättest Du doch mal ins MSDN geschaut, würdest Du was finden.
Diese API-Messages sind völlig unabhängig von MFC.

hier noch ein kleiner Auszug aus MSDN, damit Du merkst, dass es sich lohnt, nachzusehen ;-)

fwKeys = GET_KEYSTATE_WPARAM(wParam);
zDelta = GET_WHEEL_DELTA_WPARAM(wParam);

MSH_MOUSEWHEEL
zDelta = (int) wParam; // wheel rotation
xPos = LOWORD(lParam); // horizontal position of pointer
yPos = HIWORD(lParam); // vertical position of pointer
Bis später...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

16.05.2004, 14:30

*gräbt*

Ich habe das selbe Problem, aber ich weigere mich jetzt auch noch die ZMouse.h einzubinden, aber auch die GET_WHEEL_DELTA_WPARAM funzt bei mir nicht und die WM_MOUSEWHEEL kennt er nicht.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

16.05.2004, 15:52

ich hab Spy++ gefragt.
und es hat mir erzählt, dass du einfach

#define WM_MOUSEWHEEL 0x20A

in deinen code einfügen musst.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

10

16.05.2004, 15:58

Genau den Wert wollte ich wissen ;D danke!

Werbeanzeige