ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4440653
Jetzt (Chat):
26 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
DirectX API
{DX9} Auf sichtbarkeit testen...
Normal
AutorThema
DomiOh Offline
ZFX'ler


Registriert seit:
08.10.2002

Nordrhein-Westfalen
{DX9} Auf sichtbarkeit testen...Nach oben.
Hallo,

als Beispiel: Ich habe eine Szene. Dort gibt es Kameras, die sobald der Spieler in den Sichtbereich kommen Alarm auslösen. Ansich kein Problem, denn ein Test, ob der Spieler sich im Kamera-Frustum befindet ist ja nun eher unproblematisch.
Was aber nun, wenn der Spieler sich hinter einer Wand, einem Regal, einem Getränkeautomat oder sonstwas versteckt.
Wie könnte man sowas am besten testen?
Eine Bounding-Box ist für sowas dann doch nicht genau genug...
13.01.2009, 10:04:13 Uhr
Psycho Offline
ZFX'ler


Registriert seit:
16.09.2002

Hamburg
Re: {DX9} Auf sichtbarkeit testen...Nach oben.
mit nem strahl?
13.01.2009, 10:32:40 Uhr
6SidedDice Offline
Job-Moderator


Registriert seit:
16.10.2002

Nordrhein-Westfalen
161010163
Re: {DX9} Auf sichtbarkeit testen...Nach oben.
Auf die gleiche Art wie du auch nach Kollisionen für Projektile testen würdest ... Das liegt dann allerdings schwer an der Art wie deine Geometrie gespeichert ist. Octree, BSPTree etc. es gibt auch die Möglichkeit das über wirkliche Sichtbarkeitstests zu realisiern ... Rendere die Szene aus sicht der Kamera so das bspw. alles eine gewisse Farbe hat, rendere jetzt den Spieler in einer erkennbar anderen Farbe (natürlich mit ZBuffer) übersteigt nun die Anzahl an greller Farbe einem bestimmten Schwellen wert, erkennt die Kamera den Spieler.
Gab hier schonmal irgendwo einen Thread über das Thema. Ging da glaube ich um eine Art Commandos like erkennungs verfahren.

1 Mal gendert, zuletzt am 13.01.2009, 10:56:22 Uhr von 6SidedDice.
13.01.2009, 10:55:34 Uhr
DomiOh Offline
ZFX'ler


Registriert seit:
08.10.2002

Nordrhein-Westfalen
Re: {DX9} Auf sichtbarkeit testen...Nach oben.
Nunja, auf Kollisionen von Projektilen würde ich per Ray-Box-Intersection testen, das würde aber so hier dann doch nicht funktionieren.

Aber wenn ich jetzt die Szene auf Farben testen muss, kann ich das doch nur über die CPU realisieren... Das wäre doch grottenlangsam oder?

13.01.2009, 12:45:56 Uhr
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: {DX9} Auf sichtbarkeit testen...Nach oben.
das wäre es.

du kannst allerdings occlusion queries dafür einsetzen, welche seit Geforce3 generell unterstützt werden. sobald also die bounding box das jewilige kamera frustum schneidet bzw sich darin befindet, könntest du eine niedrig aufgelöste szene aus dieser perspektive rendern und dann mittels occlusion queries erfragen wie viele pixel von dem spieler mesh sichtbar sind. ab einem bestimmten schwellwert (oder wenn der wert zu stark über die zeit variiert (bewegungsmelder)) könnte man dann alarm auslösen.
13.01.2009, 13:43:11 Uhr
DirectX 10
DomiOh Offline
ZFX'ler


Registriert seit:
08.10.2002

Nordrhein-Westfalen
Re: {DX9} Auf sichtbarkeit testen...Nach oben.
Nunja, ich habe mal ein wenig nach Occlusion Queries gegoogelt und dabei mehrfach gelesen, dass von diesen abgeraten wird, weil diese z.B. nicht immer zeitnah verfügbar sind.
Außerdem unterstützt die GeForce FX 5200, die ich in meinem alten Rechner habe, diese queries scheinbar nicht.
Wie sieht es mit ATI aus? Ich nehme mal an diese werden auch von ATI unterstützt oder?
13.01.2009, 13:47:43 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: {DX9} Auf sichtbarkeit testen...Nach oben.
Warum nicht einen Strahl für Anfangs- und Endpunkt jedes Bones des Spielermodells?
13.01.2009, 13:53:45 Uhr
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: {DX9} Auf sichtbarkeit testen...Nach oben.
sie stehen ein oder zwei frames später zur verfügung, was in deinem fall nicht so problematisch wäre, da der alarm sicher sowieso nicht sofort ausgelöst werden soll, schließlich sitzen menschen dahinter die den spieler erstmal entdecken sollen oder? und selbst wenn nicht, dann wäre solch eine 50ms verzögerung nicht wirklich für den menschen bemerkbar (auch für quaker ).

die geforce5200 unterstützt diese auch, der grafiktreiber sollte allerdings nicht original sein, sondern etwas aktueller. ATI grafikkarten unterstützen occlusion queries seit der 9X00 serie, also zeitgleich zur Geforce3.
13.01.2009, 13:58:08 Uhr
DirectX 10
Schrompf Offline
ZFX'ler


Registriert seit:
04.04.2006

Sachsen
Re: {DX9} Auf sichtbarkeit testen...Nach oben.
Würde ich ebenso über Strahltests machen. Allerdings vielleicht gestreut, also pro Frame nur zwei drei Strahlen und die aber von der Kamera zu zufällig über den Spielercharakter verstreuten Zielpunkten. Dann über die letzten x Frames den Durchschnitt bilden und Alarm auslösen, wenn z.B. von den letzen 5x3 Strahlen mindestens 5 zum Spieler durchkamen.

Das Ausrendern des Bildes aus Sicht der Kamera wäre statistisch wahrscheinlich zuverlässiger, aber dafür die komplette Szene nochmal zu rendern wäre mir die Rechenzeit nicht wert. Man müsste die Szene schon heftig vereinfachen und viel zusätzliche Arbeit reinstecken, damit man eine Szene hat, die sowohl schnell rendert als auch in Sachen Sichtbarkeit halbwegs an die tatsächliche Szene rankommt.
13.01.2009, 23:55:07 Uhr
Dreamworlds Development
marcjulian Offline
ZFX'ler


Registriert seit:
12.09.2004

Sachsen-Anhalt
Re: {DX9} Auf sichtbarkeit testen...Nach oben.
Du könntest das in zwei Teile splitten,

a) Testen ob die BoundingBox des Spielers im ViewFrustum der Kamera ist
b) Wenn ja - mit drei oder vier Raycasts schauen ob der Kopf, der Körper oder die Beine sichtbar sind. Wenn einer dieser Tests wahr zurück gibt wird der Alarm ausgelöst. (Test gegen andere Objekte im Viewfrustum der Kamera und den Spieler)

Das sollte technisch sehr einfach machbar sein und nicht
zu viel CPU Zeit verbraten.

Marc

Edit: Ist natürlich nicht perfekt so, aber in welchem Spiel ist das schon so? Und man kann natürlich auch noch mehr Raycasts machen

2 Mal gendert, zuletzt am 14.01.2009, 13:52:40 Uhr von marcjulian.
14.01.2009, 13:50:43 Uhr
Mein Blog
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel