Auslesen von Oberflächen und Dreicken-Anzahl bei Camerapick?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Specht

Betreff: Auslesen von Oberflächen und Dreicken-Anzahl bei Camerapick?

BeitragDo, März 09, 2006 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,,

habe folgendes kleines Programm geschrieben.

Hier wird an Hand von Gitterpunkten und Dreiecken ein Würfel erstellt.

Danach per Camerapick ausgewählt. Wieso kann ich vom ausgewählten Objekt nicht die Surfaces auslesen? B3D sagt dann: "Entity does not exist." Aber bei CameraPick wird eine Nummer zurückgegeben...

Code: [AUSKLAPPEN]

brush=CreateBrush(0,255,0)
mesh=CreateMesh()

Dim surface(6)
surface(1)=CreateSurface(mesh,brush)
v0=AddVertex(surface(1),0,0,-1)
v1=AddVertex(surface(1),0,1,-1)
v2=AddVertex(surface(1),1,1,-1)
v3=AddVertex(surface(1),1,0,-1)
AddTriangle(surface(1),v0,v1,v3)
AddTriangle(surface(1),v3,v1,v2)

surface(2)=CreateSurface(mesh,brush)
v0=AddVertex(surface(2),1,0,-1)
v1=AddVertex(surface(2),1,1,-1)
v2=AddVertex(surface(2),1,1,0)
v3=AddVertex(surface(2),1,0,0)
AddTriangle(surface(2),v0,v1,v3)
AddTriangle(surface(2),v3,v1,v2)

surface(3)=CreateSurface(mesh,brush)
v0=AddVertex(surface(3),1,0,0)
v1=AddVertex(surface(3),1,1,0)
v2=AddVertex(surface(3),0,1,0)
v3=AddVertex(surface(3),0,0,0)
AddTriangle(surface(3),v0,v1,v3)
AddTriangle(surface(3),v3,v1,v2)

surface(4)=CreateSurface(mesh,brush)
v0=AddVertex(surface(4),0,0,0)
v1=AddVertex(surface(4),0,1,0)
v2=AddVertex(surface(4),0,1,-1)
v3=AddVertex(surface(4),0,0,-1)
AddTriangle(surface(4),v0,v1,v3)
AddTriangle(surface(4),v3,v1,v2)

surface(5)=CreateSurface(mesh,brush)
v0=AddVertex(surface(5),0,1,-1)
v1=AddVertex(surface(5),0,1,0)
v2=AddVertex(surface(5),1,1,0)
v3=AddVertex(surface(5),1,1,-1)
AddTriangle(surface(5),v0,v1,v3)
AddTriangle(surface(5),v3,v1,v2)

surface(6)=CreateSurface(mesh,brush)
v0=AddVertex(surface(6),0,0,0)
v1=AddVertex(surface(6),0,0,-1)
v2=AddVertex(surface(6),1,0,-1)
v3=AddVertex(surface(6),1,0,0)
AddTriangle(surface(6),v0,v1,v3)
AddTriangle(surface(6),v3,v1,v2)

UpdateNormals mesh
EntityPickMode mesh, 2

fntArial =LoadFont("Arial",24,False,False,False)
SetFont fntArial
Color 255,255,255

While Not KeyHit(1)
RenderWorld
ent = CameraPick(camera,MouseX(),MouseY())
Text 0,0,ent
Text 20,0,CountSurfaces(ent)
Flip
Wend
End
 

HW

BeitragDo, März 09, 2006 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest auf jeden Fall eine Prüfung einbauen, ob die mit CameraPick zurückgegebene Zahl gleich 0 ist. Wenn ja, dann soll nichts weiter mit dieser Entity gemacht werden, d.h. dann sollen die beiden Textbefehle nicht ausgeführt werden.
Der Code sähe dann so aus (ohne den Anfang):
Code: [AUSKLAPPEN]
While Not KeyHit(1)
RenderWorld
ent = CameraPick(camera,MouseX(),MouseY())
If ent<>0 Then
Text 0,0,ent
Text 20,0,CountSurfaces(ent)
EndIf
Flip
Wend

Ich habe es allerdings nicht getestet.
 

Specht

BeitragDo, März 09, 2006 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das stimmt natürlich.

Aber das ist nicht mein Problem. Die Zahl ist nicht 0 sondern 93385994. Mein Problem liegt hier bei:

Code: [AUSKLAPPEN]
Text 20,0,CountSurfaces(ent)


Irgendwie wird "ent" nicht als Mesh angesehen bzw. erkannt.

TheProgrammer

BeitragDo, März 09, 2006 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir funzt alles, nachdem ich eine Kamera eingefügt habe Wink

Code: [AUSKLAPPEN]

Graphics3D 640,480,32,2
SetBuffer BackBuffer()

camera = CreateCamera()
PositionEntity camera,0,0,-10

brush=CreateBrush(0,255,0)
mesh=CreateMesh()

Dim surface(6)
surface(1)=CreateSurface(mesh,brush)
v0=AddVertex(surface(1),0,0,-1)
v1=AddVertex(surface(1),0,1,-1)
v2=AddVertex(surface(1),1,1,-1)
v3=AddVertex(surface(1),1,0,-1)
AddTriangle(surface(1),v0,v1,v3)
AddTriangle(surface(1),v3,v1,v2)

surface(2)=CreateSurface(mesh,brush)
v0=AddVertex(surface(2),1,0,-1)
v1=AddVertex(surface(2),1,1,-1)
v2=AddVertex(surface(2),1,1,0)
v3=AddVertex(surface(2),1,0,0)
AddTriangle(surface(2),v0,v1,v3)
AddTriangle(surface(2),v3,v1,v2)

surface(3)=CreateSurface(mesh,brush)
v0=AddVertex(surface(3),1,0,0)
v1=AddVertex(surface(3),1,1,0)
v2=AddVertex(surface(3),0,1,0)
v3=AddVertex(surface(3),0,0,0)
AddTriangle(surface(3),v0,v1,v3)
AddTriangle(surface(3),v3,v1,v2)

surface(4)=CreateSurface(mesh,brush)
v0=AddVertex(surface(4),0,0,0)
v1=AddVertex(surface(4),0,1,0)
v2=AddVertex(surface(4),0,1,-1)
v3=AddVertex(surface(4),0,0,-1)
AddTriangle(surface(4),v0,v1,v3)
AddTriangle(surface(4),v3,v1,v2)

surface(5)=CreateSurface(mesh,brush)
v0=AddVertex(surface(5),0,1,-1)
v1=AddVertex(surface(5),0,1,0)
v2=AddVertex(surface(5),1,1,0)
v3=AddVertex(surface(5),1,1,-1)
AddTriangle(surface(5),v0,v1,v3)
AddTriangle(surface(5),v3,v1,v2)

surface(6)=CreateSurface(mesh,brush)
v0=AddVertex(surface(6),0,0,0)
v1=AddVertex(surface(6),0,0,-1)
v2=AddVertex(surface(6),1,0,-1)
v3=AddVertex(surface(6),1,0,0)
AddTriangle(surface(6),v0,v1,v3)
AddTriangle(surface(6),v3,v1,v2)

UpdateNormals mesh
EntityPickMode mesh, 2

fntArial =LoadFont("Arial",24,False,False,False)
SetFont fntArial
Color 255,255,255

While Not KeyHit(1)
RenderWorld
ent = CameraPick(camera,MouseX(),MouseY())
If ent <> 0 Then
Text 0,0,ent
Text 0,20,CountSurfaces(ent)
EndIf
Flip
Wend
End
aktuelles Projekt: The last day of human being

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group