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

30.05.2012, 17:35

Picking

Hallo.
Ich brauche nun für meinen Editor Picking. Ich habe schon Code geschrieben der teilweise funktioniert. Wenn ich mein Objekt jetzt aber verschiebe (BSP -x (links)) dann muss ich weiter Links "Picken" als das Objekt. Das Selbe in die andere Richtung.Wenn mein Objekt an 0|0|0 liegt, sind nur minimale Abweichungen vorhanden. Je mehr es von dem 0|0|0 Punkt entfernt ist desto mehr Abweichungen habe ich.
(RayPos ist falsch?)
Mein Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Vector3 v;

    Matrix Proj = Direct3D::Instance().GetTransform(D3DTS_PROJECTION);

    v.x = ((( 2.0f * ManipulatedMouseposition.x) / Screensize.x ) - 1) / Proj.m11;
    v.y = -( ( ( 2.0f * ManipulatedMouseposition.y ) / Screensize.y ) - 1 ) / Proj.m22;
    v.z =  1.0f;

    Matrix m, View;
    Vector3 rayPos,rayDir;
    View = Direct3D::Instance().GetTransform(D3DTS_VIEW);
    m = MatrixInvert( View );

    rayDir.x  = v.x*m.m11 + v.y*m.m21 + v.z*m.m31;
    rayDir.y  = v.x*m.m12 + v.y*m.m22 + v.z*m.m32;
    rayDir.z  = v.x*m.m13 + v.y*m.m23 + v.z*m.m33;
    rayPos.x = m.m41;
    rayPos.y = m.m42;
    rayPos.z = m.m43;

ManipulatedMouseposition sind die Mauskoordinaten minus Renderpanel-Position. Das mache ich weil mein Rendertarget(Panel) nicht an 0|0 des Fensters liegt.
Screensize ist nicht die Größe des Backbuffers, sonder die des Renderpanels abzüglich Menu, Rahmen und co.
Tutorial:http://www.toymaker.info/Games/html/picking.html

EDIT: Ich kann garantieren, dass die Kollision zwischen Ray und Objekt keine Fehler hat. Ich rechne den Strahl in den ModelSpace um, und mache dann die Kollisionsprüfung.
Danke
MfG

Zitat

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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

30.05.2012, 17:51

Wie machst du die Verschiebung des Objektes?

FSA

Community-Fossil

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

3

30.05.2012, 18:00

Wie meinst du das? Ich setze die Weltmatrix und übergebe die Weltmatrix der Kollisionsfunktion. Ebenso die Inverse Weltmatrix.Die Weltmatrix tue ich so aus rechnen:
Scale*Rotation*Translation. Um genau zu sein sind das die Pfeile die sich mit Skalieren wenn man die Kamera von ihnen weg/zu bewegt.

Zitat

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

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FSA« (30.05.2012, 18:08)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

30.05.2012, 18:11

Und wie berücksichtigst du die Weltmatrix bei deiner Ray/Mesh Intersection?

FSA

Community-Fossil

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

5

30.05.2012, 18:14

C-/C++-Quelltext

1
2
Vector3 NewStart( Vector3TransformCoords( vStart, mInvWorldMat) );
Vector3 NewEnd( Vector3TransformCoords( vEnd, mInvWorldMat) );

So. Aus den zwei neuen Vektoren prüfe ich dann die Kollision.
MfG

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

30.05.2012, 18:15

Du könntest auch alle Objeke die man verschieben kann in unterschiedlichen Farben auf ein FBO rendern und dann den geklickten Pixel auslesen und mit der Farbe vergleichen. Das ist dann Pixel genau und relativ einfach.

FSA

Community-Fossil

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

7

30.05.2012, 18:40

Schlechte Idee. Mein BackBuffer verändert die Größe zwar nicht aber das Panel schon. Außerdem will ich dieses Problem auch lösen :)

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

30.05.2012, 19:13

Hier ein Bild von dem Problem. Der Schwarze Punkt ist die Maus und der Grüne Pfeil ist ausgewählt obwohl die Maus von ihm entfernt ist.
»FSA« hat folgendes Bild angehängt:
  • Picture.jpg

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

9

31.05.2012, 17:03

Keiner eine Idee?

Zitat

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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

31.05.2012, 17:11

Wie genau berechnest du die ManipulatedMouseposition eigentlich?

Werbeanzeige