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

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

1

31.12.2004, 14:18

Frage zu WorldEditor!

Hallo!

Also ich abeite seit ein paar Tagen an einem eigenen Editor mit Dx und der TriBase Engine, da ich das initalisieren von Input, Sound, etc.. einfach hasse..
Am Besten zeige ich euch zuerst mal einen Screenshot:

(Link)


Wie man sieht habe ich schon mal die 4 Ansichtsfenster erstellt..Menüs, Objekte erstellen, usw.. fehlt noch alles! Mein Problem ist die Maus, da man das Gitter zoomen kann, weiß ich leider nicht wie ich mit der normalen Maus die Koordinaten eines Schnittpunktes zweier Geraden herausfinde! Zur Zeit habe ich das Problem so gelöst, das einfach jedes Ansichtsfenster eine eigene Maus besitzt und man mit den Tasten F1-F5 die Ansichtsfenster auswählen kann und die Maus mit dem Gitter mitgezoomt wird. Also nicht gerade die beste Lösung...
Die Geraden befinden sich alle in einem Abstand von 0.1f! Ich würde jetzt gerne mit der normalen Windowsmaus die Schnittpunkte herausfinden! Wie geht man da am besten vor? Oder gibt es da vielleicht schon eine Funktion von der TriBase Engine??

Ich freue mich über jede Antwort! thx

cya,
Stefan

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

2

31.12.2004, 15:35

Du solltest selber einen 3D Cursor programmieren, der in allen Ansichten sichtbar ist. Wenn Du nur eine Maus in einem Fenster haben würdest und keinen Cursor, hätte der Anwender ja nur 2 Koordinaten! Worum würde dann z.B. gedreht?

Nimmst Du einen vorhandenen Editor als Vorbild?
"Games are algorithmic entertainment."

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

3

31.12.2004, 15:56

Zitat von »"Osram"«

Du solltest selber einen 3D Cursor programmieren, der in allen Ansichten sichtbar ist. Wenn Du nur eine Maus in einem Fenster haben würdest und keinen Cursor, hätte der Anwender ja nur 2 Koordinaten! Worum würde dann z.B. gedreht?

Nimmst Du einen vorhandenen Editor als Vorbild?


Tut mir leid, ich habe dich jetzt leider nicht ganz verstanden.. Also ich hab ja in jedem Ansichtsfenster einen Cursor! Das Problem ist, ich möchte einen normalen verwenden, wie den z.B. von Windows, nur weiß ich nicht wie ich dann die Kollisionsabfrage machen soll? Wenn der Cursor mitgezoomt wird ist das ja kein Problem! Also einfach einen der nicht mitgezoomt wird!

Naja, ich habe eigentlich kein Vorbild, ich habe nur mal mit dem vom 3D Gamestudio 2-3 Welten gemacht...

cya,
Stefan

4

01.01.2005, 14:24

Kannst de mal sagen ob du den Editor mit MFC oder rein DX mit Engine gamcht hast? Ich bin gerade einen mit MFC mit DX am schrieben.

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

5

01.01.2005, 16:33

nur Dx!

cya,
Stefan

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

01.01.2005, 16:38

Hmmm also ich habe es mit 2D WinApiMaus gemacht und dann den 2D punkt auf die vordere ClipEbene transferiert, um dann den 2.Punkt zu bekommen.

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

7

02.01.2005, 01:09

Zitat von »"Nox"«

Hmmm also ich habe es mit 2D WinApiMaus gemacht und dann den 2D punkt auf die vordere ClipEbene transferiert, um dann den 2.Punkt zu bekommen.


hm, klingt interessant, aber ich verstehe es noch nicht so ganz..könntest du es mir vielleicht bitte noch genauer erklären, wie du das gelöst hast?
thx


Ach ja, ich habe leider noch ein neues Problem und zwar mit den Geforce Grafikkarten, ich verwende für die Geraden beim Rendern D3DPT_LINELIST, auf meiner Ati Radeon 9800Pro läuft es ohne Probleme, auf einer Geforce jedoch, sieht man keine einzige Gerade, aber es wird auch kein Error in die Log-File geschrieben!!
Hier mal die Render-Funktion(init sollte ja fix stimmen, oder?):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    tbDirect3D::GetDevice()->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE);
        tbDirect3D::GetDevice()->SetRenderState(D3DRS_LIGHTING, FALSE);


tbDirect3D::GetDevice()->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld)); 
tbDirect3D::GetDevice()->BeginScene();

tbDirect3D::GetDevice()->SetTexture(0,NULL);
tbDirect3D::GetDevice()->DrawPrimitiveUP(D3DPT_LINELIST,
                                         Anz_Gitter/2,
                                         VertexGitter,
                                         sizeof(SVertex4));

tbDirect3D::GetDevice()->DrawPrimitiveUP(D3DPT_LINELIST,
                                         Anz_Gitter/2,
                                         VertexGitterY,
                                         sizeof(SVertex4));

tbDirect3D::GetDevice()->EndScene();


Ein Array VertexGitterX enthält die vertikalen Geraden und VertexGitterY die Senkrechten!
An was kann es den liegen, das es auf einer Geforce nicht geht, bis jetzt getestet mit einer Geforce 2ti und einer 4 Mx mit aktuellen Treibern!?

Und danke schon mal für alle bisherigen Antworten!

cya,
Stefan

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

8

02.01.2005, 15:06

hm, ok das zweite Problem mit den Linien wäre gelöst... jetzt fehlt nur noch die Maus, da habe ich aber echt keine Ahnung :rolleyes:


cya,
Stefan

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

02.01.2005, 15:41

Mein Lösungsweg wäre so:
1. clippingebene errechnen und zwar aus der Sichtrichtung(normal-vektor) und der KameraPos und der Sichtentfernung. Also:
EbenePos=KameraPos+Sichtrichtung * Entfernung;
plane = EbeneausnormaleundPunkt(Sichtrichtung, EbenePos);

2. die Mauspos auf die Ebene übertragen:
BreiteTeilwinkel = SichtwinkelfürdieBreite * MausPos.X / GesamtBreitedesFensters ;
HöhenTeilwinkel = SichtwinkelfürdieHöhe * MausPos.Y / GesamtHöhedesFensters ;

RotationumdieZfürdieXAchse= BreiteTeilwinkel - SichtwinkelfürdieBreite/2;
RotationumdieXfürdieYAchse= HöhenTeilwinkel - SichtwinkelfürdieHöhe/2;

RichtungsVektorfürPunktobenlinks = Sichtwinkel*RotationsMatrix(RotationumdieXfürdieYAchse, 0, RotationumdieZfürdieXAchse);

Jetzt nur noch überprüfen wo der Schnittpunkt für die Ebene mit diesem Vektor ist (wobei man den 2. Punkt bekommt, indem man den ersten mit großen Zahl mutlipliziert, damit die Strecke lange genug ist).

Und nun hätte man den Startpunkt(KameraPos) und einen Endpunkt(MausPosaufderEbene) und mit diesen könnte man wiederum ein LinehitModel Test durchführen, vorrausgesetzt ich habe hier nicht totalen Müll erzähl :angel: 8)

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

10

02.01.2005, 16:03

Aus den Namen "Top" Front" und "Side" entnehme ich mal, du hast orthografische Ansichten, d.h. keine perpetkivische Verkürzung in die Tiefe?

Dann müsste es einfach so gehen:

xWelt = (xMaus - xUrsprung) * Faktor.
y analog.

Zu dem 3D Cursor:
Stell Dir vor, Du willst die Kiste um den Eckpunkt links unten vorne drehen. In jeder Ansicht kannst Du mit der Maus aber nur zwei Dimensionen festlegen. Daher haben die meisten Editoren einen 3D Cursor, der z.B. als Kreuz in allen Ansichten gemalt wird. Dann kann man z.B. im Grundriss den Cursor auf "links vorne" setzen und geht dann in die Frontansicht und setzt Ihn auf die untere Fläche der Kiste. Danach rufst Du den Rotieren Befehl auf. Es gibt sicher auch leicht andere Möglichkeiten, aber nur einen Cursor für alle Ansichten zu haben ist Standard.
"Games are algorithmic entertainment."

Werbeanzeige