Sichtbarkeit von Sprite prüfen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

funkmaster5000

Betreff: Sichtbarkeit von Sprite prüfen

BeitragSo, Okt 06, 2013 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo an alle,

ich schaffe es einfach nicht zu überprüfen, ob ein Sprite von der Kamera gesehen werden kann oder nicht. Befindet sich das Sprite seitlich der Kamera oder dahinter, erhalte ich das richtige Ergebnis. Aber sobald es in einer Linie mit der Kamera, aber hinter einem Cube/der Wand ist, erhalte ich dennoch die Rückmeldung, dass das Sprite sichtbar ist. Zuerst habe ich gedacht, dass es vielleicht damit zu tun hat, dass die Ecken überprüft werden. Wenn diese sich mit den Maßen des Cubes decken, könnte das vlt als "sichtbar" gewertet werden. Also habe ich das Sprite runterskaliert, aber mit dem selben Ergebnis.

Hier mein Testcode:
Code: [AUSKLAPPEN]
Graphics3D 640,480,32,2
SetBuffer BackBuffer()

cam = CreateCamera()
MoveEntity cam,0,0,-4

cube = CreateCube()

tex = LoadTexture("brix.jpg")
tex2 = LoadTexture("grass.jpg")
EntityTexture cube,tex
ene = LoadSprite("skelett.jpg")
MoveEntity ene,0,0,10

AmbientLight 255,255,255

While Not KeyHit(1)
   If KeyHit(200) Then
      MoveEntity cam,0,0,1
   End If
   
   If KeyHit(208) Then
      MoveEntity cam,0,0,-1
   End If
   
   If KeyHit(205) Then
      rotate = rotate - 90
      RotateEntity cam,0,rotate,0
   End If
   
   If KeyHit(203) Then
      rotate = rotate + 90
      RotateEntity cam,0,rotate,0
   End If
   
   
   UpdateWorld
   RenderWorld
   If EntityInView(ene, cam) = 1 Then Text 0, 0, "Objekt sichtbar"
   Flip
Wend

Xeres

Moderator

BeitragSo, Okt 06, 2013 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
EntityInView Überprüft nicht, ob sich etwas zwischen der Kamera und dem Objekt befindet.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

funkmaster5000

BeitragSo, Okt 06, 2013 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Gibt es denn einen analogen Befehl?

Xeres

Moderator

BeitragSo, Okt 06, 2013 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht hilft dir EntityVisible etwas weiter?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

funkmaster5000

BeitragSo, Okt 06, 2013 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Das tut er mit Sicherheit! Welche Auswirkungen hat EntityPickMode und wie würde der Befehl auf mein Beispiel angewandt ausschauen? Muss ich das für jeden Cube auf der Map einstellen? Also:

Code: [AUSKLAPPEN]
EntityPickmode cube,2,1
?

Xeres

Moderator

BeitragSo, Okt 06, 2013 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Das sind Fragen, die du leicht beantworten kannst, wenn du dir das Beispiel zu den Befehlen ansiehst und etwas herum experimentierst.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

funkmaster5000

BeitragMo, Okt 07, 2013 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Das habe ich, funktioniert auch wunderbar Wink

Allerdings wertet der Befehl das Sprite noch als sichtbar und zwar auch, wenn dieses hinter/neben der Camera ist. Mache ich was verkehrt, oder muss ich eine zusätzliche if-Abfrage nach der Position einbauen?

DAK

BeitragMo, Okt 07, 2013 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe keinen der beiden Befehle verwendet, kann also auch völliger Blödsinn sein: Spricht etwas dagegen, beide Befehle mittels And verknüpft zu verwenden?
Gewinner der 6. und der 68. BlitzCodeCompo
 

funkmaster5000

BeitragMi, Okt 16, 2013 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Das weiß ich nicht, hat jedenfalls bei mir nicht funktioniert!

Jolinah

BeitragMi, Okt 16, 2013 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
EntityVisible ist vermutlich nur ein Raycast (Linien-Test), unabhängig ob die Objekte im Sichtbereich der Kamera sind oder nicht.

EntityInView prüft ob ein Objekt im Sichtbereich der Kamera ist.

Folglich müsste es schon funktionieren wenn man beide Funktionen And-verknüpft:

Code: [AUSKLAPPEN]
If EntityInView(ene, cam) And EntityVisible(cam, ene) Then Text 0, 0, "Objekt sichtbar"

DAK

BeitragMi, Okt 16, 2013 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist das, was ich oben gemeint habe. Ansonsten könnte man noch die Winkel vergleichen, um zu sehen, ob das Objekt zu einem schaut.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group