durch CameraPick die DimNummer erfahren ?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

StarGazer

Betreff: durch CameraPick die DimNummer erfahren ?

BeitragMo, Dez 15, 2003 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Ich habe da ein Problem mit CameraPick.
Ich habe mehrere Objekte im einem DimFeld erstellt, und möchte durch das CameraPick erfahren welches Objekt welchem DimFeld angehört. (die entsprechende DimNummer)
Ich hoffe das geht irgend wie, und jemand von kann mir helfen.

Der Code ist flasch, eigentlich sollte es nur ein Beisspiel sein, indem das entsprechende Objekt eines Dimfeldes durch CameraPick leuchtet.
Es geht mir nicht darum das entsprechende Objekt zu picken/leuchten lassen, sondern herauszufinden welche DimNummer ein bestimmtes Objekt hat.
Ich hoffe ihr könnt mir zeigen wie es richtig geht.


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

Dim Box(16)
For i = 1 To 16
   Box(i)=CreateCube()
   EntityPickMode Box(i),2
   EntityColor Box(i),Rnd(255),Rnd(255),Rnd(255)
   PositionEntity Box(i),Rnd(-10,10),Rnd(-10,10),10
Next
   

While Not KeyDown(1)

   mx=MouseX()
   my=MouseY()
   entity=CameraPick(camera,mx,my)
 
   For i = 1 To 16
      If entity=0 Then EntityAlpha Box(i),1
      If entity<>0 Then EntityAlpha Box(i),Sin( MilliSecs() )*.5+.5
   Next

UpdateWorld
RenderWorld
   Text 0,0,"DimNummer "+entity
Flip
Wend
End



Danke
StarGazer

DC

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragMo, Dez 15, 2003 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm versuch das mal nach dem picken:
Code: [AUSKLAPPEN]

for i=0 to 16
   if Box(i)=entity then runtimeerror("Entity mit Index "+i+" gewählt")
Next
 

INpac

BeitragMo, Dez 15, 2003 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
hi.
CameraPick() liefert das Handle des gepickten Entities zurück. Das Handle ist die Kennziffer / ID, die zuvor in deine Dim gespeichert wird, in Form von:

for i = 0 to ...
cube(i) = CreateCube()
next

in Cube(i) wird dann immer das Handle gespeichert, mit dem du das Entity später weiter behandeln kannst.

So.
Gehe nun so vor:

speichere in eine Variable das Handle des gepickten En. und gehe danach jedes Field inder Dim wo das Handle jedes Entities gepsichert ist durch, und prüfe ob dieses mit dem gepickten übereinstimmt:
Code: [AUSKLAPPEN]

entity=CameraPick(camera,mx,my)
for i = 1 To 16
     if entity = box(i) then
       ; Box(i) ist gepickt, setze jetzt Alpha zB auf 0.5
     else
      ; setze alpha wenn nicht gepickt ist auf 1
     endif
Next


um zu speichern, ob es gepickt wurde, kannst du ne 2diemsionale Array nehmen, bei der der 1. eintrag den Index wie eben darstellt und der 2. eintrag 1 für gepickt oder 0 für nicht gepickt speichert.

Code: [AUSKLAPPEN]

Dim Box(16,1)

StarGazer

BeitragDi, Dez 16, 2003 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke
da hätte ich selbst drauf zu können, dumm von mir Embarassed

Shodan

BeitragMi, Dez 17, 2003 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
es gibt noch einen Trick, um den for-next suchlauf zu umgehen.

gib jedem entity als namen die nummer im dim-feld.:
dim cube(100,1)
For a=1 to 100
cube(a,0)=createCube()
NameEntity cube(a,0),str$(a)
next

beim Abfragen mit Pick erhälst du auch den Namen, und damit die nummer im dim-Feld.
test=entityPick
name$=entityName(test)
nummer=val(name$)

das spart Rechenzeit. vor allem bei grossen Feldern.
Man kann es erweitern, wenn man mehrere Felder hat.
NameEntity cube(a,0),"cube"+str$(a)

StarGazer

BeitragDo, Dez 18, 2003 0:32
Antworten mit Zitat
Benutzer-Profile anzeigen
COOL danke,
gleich mal ausprobieren Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group