CameraPick Ausgabewert

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Flausch96

Betreff: CameraPick Ausgabewert

BeitragFr, Jan 04, 2013 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist es möglich bei dem Befehl CameraPick einen Namen des Objektes bzw. eine eindeutige id zu bekommen ?

Ich habe mich an dem beispiel in der Hilfe orientiert:

Code: [AUSKLAPPEN]
Graphics3D 640, 480, 0, 2
SetBuffer BackBuffer()
camera = CreateCamera()
light = CreateLight()
cube = CreateCube()
PositionEntity camera, 0, 0, 0
RotateEntity light, 90, 0, 0
PositionEntity cube, 0, 0, 10
EntityPickMode cube, 2

While Not KeyDown(1)
   TurnEntity cube, .5, 1, 2
   mx = MouseX()
   my = MouseY()
   entity = CameraPick(camera, mx, my)
   If entity = 0 Then EntityColor cube, 255, 255, 255
   If entity<>0 Then EntityColor cube, 0, 255, 0
   RenderWorld
   If entity = 0 Then Text 0, 0, "Nicht ausgewählt"
   If entity<>0 Then Text 0, 0, "Ausgewählt:" + entity
   Oval mx - 5, my - 5, 10, 10, 1
   Flip
Wend
End



Wenn man mit der Maus über den Würfel geht, bekommt man eine Zahl ausgegeben. Diese ist jedoch bei jedem Programmstart anders. (Wenn ich mich nicht irre nennt man diese Zahl entity Handle ?) Diese Zahl bringt mir nichts, denn ich kann das Objekt nicht identifizieren. Währe es möglich das irgendwie hinzubekommen ?

Also so z.b

Code: [AUSKLAPPEN]
Graphics3D 640, 480, 0, 2
SetBuffer BackBuffer()
camera = CreateCamera()
light = CreateLight()
cube = CreateCube()
PositionEntity camera, 0, 0, 0
RotateEntity light, 90, 0, 0
PositionEntity cube, 0, 0, 10
EntityPickMode cube, 2

//so stelle ich mir das vor:

blablabla = handledesobjekts(cube)
 



While Not KeyDown(1)
   TurnEntity cube, .5, 1, 2
   mx = MouseX()
   my = MouseY()
   entity = CameraPick(camera, mx, my)
   If entity = 0 Then EntityColor cube, 255, 255, 255
   If entity<>0 Then EntityColor cube, 0, 255, 0
   RenderWorld
   If entity = 0 Then Text 0, 0, "Nicht ausgewählt"
   If entity<>0 Then Text 0, 0, "Ausgewählt:" + entity
   Oval mx - 5, my - 5, 10, 10, 1
 
   //und hier dann die "Identifizierung" :

   if blablabla = entity then
      mach was
   end if
 

  Flip
Wend
End


Viele Grüße
Flausch

Midimaster

BeitragFr, Jan 04, 2013 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
doch!

"Cube" ist ja auch ein Handle, also so eine Zahl. Und wenn du mit der Maus draufgehst nennt dir CameraPick() genau die Zahl von Cube.

BlitzBasic: [AUSKLAPPEN]
SuchEntity = CameraPick(camera, mx, my)
If SuchEntity=Cube Then
Print "aja! der gute alte cube"
SetEntityColor SuchEntity, 255,0,0
EndIf


...und tatsächlich wird der Cube rot!
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

PhillipK

BeitragFr, Jan 04, 2013 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun, ich rate einfach mal ins grüne und sage, das du mit der Zahl tatsächlich die identität erhälst.

Hast du denn schonmal versucht, in deinem unteren beispiel "if cube = entity" zu prüfen?
Alternativ versuchs mal mit dem entityname, wie in diesem beispiel:
BlitzBasic: [AUSKLAPPEN]
 Graphics3D 800, 600, 16, 0
SetBuffer BackBuffer()

cube1 = CreateCube()
EntityPickMode cube1, 2, 0
NameEntity cube1, "Cube1"

cube2 = CreateCube()
EntityPickMode cube2, 2, 0
NameEntity cube2, "Cube2"

sphere = CreateSphere(8)
EntityPickMode sphere, 2, 0
TurnEntity sphere, 0, - 90, 0 ;< - - - DREHEN!!!

camera = CreateCamera()
PositionEntity camera, 0, 20, - 20
PointEntity camera, sphere

light = CreateLight(1)
TurnEntity light, 45, 45, 45

While Not KeyHit(1)
count# = count# + 1
PositionEntity cube1, 10, 0, Sin#(count) * 10
PositionEntity cube2, 20, 0, Cos#(count) * 10
picked = EntityPick(sphere, 100)
If picked Then
txt$ = EntityName$(picked)
Else
txt$ = "nichts"
EndIf
UpdateWorld
RenderWorld
Text 10, 10, txt$
Flip
Wend
End

Flausch96

BeitragFr, Jan 04, 2013 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, danke. mit if entity = cube klappts.

Very Happy Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group