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

07.12.2011, 14:19

Editor: Objekt mit Maus positionieren

Hallo
Ich würde gerne mal wissen, wie ich die Mausbewegung so deuten kann, dass ich meine Objekte in meine Editor bewegen kann.
Alles im 3D Raum. Hat da jemand ne Idee?
MfG

Zitat

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

Saik0

Treue Seele

Beiträge: 171

Beruf: Anwendungsentwickler

  • Private Nachricht senden

2

07.12.2011, 14:53

Wenn ich mich nicht täusche musst du doch nur die Position der Maus mit den Koordinaten der Objekte vergleichen

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

07.12.2011, 15:03

Stichwort: Picking.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

07.12.2011, 15:14

Ich werf mal als weitere Hilfe ray picking in den Raum.
„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

5

07.12.2011, 18:33

Ok nun das habe ich hinbekommen. Allerdings nur 2D. Den Abstnd zur Kamera lege ich willkürlich fest.
Mein Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
D3DXVECTOR3 g_v1, g_v2; 
//...
float x = ((float) xPos) / g_screenWidth;
        float y = ((float) yPos) / g_screenHeight; // y + x Pos ist die Mausposition
        ComputePickRay(2 * x - 1, 1 - 2 * y);   

 //a)Objekt an der Position anzeigen, wo der Spieler mit der Maus geklickt hat
    D3DXVECTOR3 n = g_v2 - g_v1; 
    D3DXVec3Normalize(&n, &n);     
    D3DXVECTOR3 pickPt = *g_Camera.GetEyePt() + 5 * n; //willkürlicher Abstand
    D3DXMatrixTranslation(&mWorld, pickPt.x, pickPt.y, pickPt.z);

    g_pmWorld->SetMatrix( ( float* )&mWorld );
//...

und:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void ComputePickRay(float xPos, float yPos)
{
    D3DXMATRIX mViewProj; 
    D3DXMatrixMultiply(&mViewProj, g_Camera.GetViewMatrix(), 
        g_Camera.GetProjMatrix()); 

    D3DXMATRIX Inverse; 
    D3DXMATRIX invProj, invView; 

    D3DXMatrixInverse(&invView, NULL, g_Camera.GetViewMatrix()); 
    D3DXMatrixInverse(&invProj, NULL, g_Camera.GetProjMatrix()); 
    D3DXMatrixInverse(&Inverse, NULL, &mViewProj); 

    D3DXVECTOR3 nearPoint(xPos, yPos, 0); 
    D3DXVECTOR3 farPoint (xPos, yPos, 1); 
    D3DXVec3TransformCoord(&g_v1, &nearPoint, &Inverse);
    D3DXVec3TransformCoord(&g_v2, &farPoint,  &Inverse);
}

Ist nicht ganz mein eigener Code ;) Aber ich kann nun mein Objekt noch nicht in die Tiefe bewegen... Also eigentlich ist meine Frage: Wie bewege ich mein Objekt auf Z Achse?
Ich verwende vorerst nicht meine Engine sonder das DirectX SDK ;)
Danke für die Hilfe

Zitat

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

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

07.12.2011, 18:41

Ray erstellen, gucken welches Objekt als erstes auf dem Ray liegt.

FSA

Community-Fossil

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

7

07.12.2011, 18:54

Öhmm und was bringt mir das denn? Ich habe erstmal nur ein Objekt welches ich gerne einfach nur bewegen möchte. Deshalb kann ich mit deiner Antort gerade nichts anfangen sry ;)

Zitat

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

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

8

07.12.2011, 19:20

Ja, aber später willst du ja vielleicht mal mehr Objekte in deiner Szene haben. Wenn du das Objekt nur bewegen willst kannst du es doch einfach über die Koordinaten verschieben, musst dann halt nur die Fensterkoordinaten in Weltkoordinaten umrechnen. Beides kann ich übrigens (noch nicht), aber so müsste es gehen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

07.12.2011, 19:31

Is doch eigentlich einfach, eine Maus hat zwei Achsen, dein System hat drei. Dann musst Du wohl eine simulieren mit Pfeiltasten oder durch Drücken einer zusätzlichen Taste, die eine Achse der Maus in Z ändert. Oder das Mausrad nehmen für Verschiebungen in Z.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

07.12.2011, 19:43

Schau dir doch einfach mal an wie das in entsprechenden Modellierprogrammen/Editoren gelöst ist. Normalerweise hat man irgendwelche Gizmos die man mit der Maus anfassen und ziehen kann. Und deren Bewegungen sind dann eben auf entsprechende Ebenen beschränkt (z.B. einer für x, einer für y, einer für z und einer für die Ebene parallel zur Nearplane).

Werbeanzeige