Ich sehe an einem Objekt vorbei, es ist also nicht auf dem Bildschirm zu sehen, weil es sich ein stückchen weiter rechts befindet. Wie kann ich feststellen, ob das Objekt mich "sieht", oder ob die Sicht des Objektes durch eine Wand versperrt wird?
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Steve,
das ist eigentlich garnicht so schwer.
Du mußt die OpenGL-Szene (am besten nur die Geometrie; in niedrigster Detailstufe und geringer Auflösung ) aus der "Sicht" deines Objektes rendern und mit Hilfe von Occlusion Queries überprüfen ob "du" sichtbar bist.
Falls das "Objekt" keinen speziellen Blickwinkel hat, mußt du dessen Perspektive noch so ausrichten, dass seine Blickrichtung genau auf dich zeigt.
Ich habe noch eine kleine Frage zu den Occlusion Queries.
Und zwar ist ein Quad, dass ich auf Sichtbarkeit prüfen will zwar sichtbar, allerdings gibt mir der pixelcounter 0 zurück. Hier ein bisschen code(Die 'Renderpass-Textur' ist nur für mich zur kontrolle gedacht):
Code:
procedure Tworld.renderpass;
var
angle:double;
vec:TGLVectorD3;
query,count:gluint;
begin
//Erster Renderpass
glClearColor(0.0,0.0,0.0,0);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
Es gibt aber kurioserweise einige ATI-Karten, die zwar GL_NV_occlusion_query unterstützen, dafür aber weder die ARB- noch die Core-Extension. ATI hat sich disbezüglich auch geäußert und angekündigt, daran nichts ändern zu wollen.
ATI scheint echt ein Problem mit seiner Einstellung zu Treibersupport zu haben, denn diese Extensions sind ja eigentlich gleichwertig und würden für die Treiberprogrammierer nur einen minimalen Aufwand bedeuten.
Mhh, jetzt wird gezählt..., aber die ganze Zeit (auch wenn das quad durch eine wand verdeckt wird). Nur wenn ich weit genug weg bin hört er auf zu zählen.
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
stimmt, lars hat recht, du musst depth testing doch aktiviert lassen.
dann darfst du dein player-quad aber nicht zweimal zeichnen.
du kannst die occlusion query schon beim ersten zeichnen ausführen.
du solltest dein player-quad auch erst zum schluss rendern, (wenn alle anderen Objekte im Tiefenpuffer gelandet sind), sonst kannst du nicht prüfen ob dein quad verdeckt wird.
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.