[Sidesign.MiniB3D] CameraPick-Problem

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Holzchopf

Meisterpacker

Betreff: [Sidesign.MiniB3D] CameraPick-Problem

BeitragMi, Jan 06, 2010 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Fangemeinde =)
(Natürlich meine ich die Fangemeinde von BMax, nicht meine Rolling Eyes )

Folgendes Problem ist bei meinem aktuellen "Projekt", resp. dem Mapeditor davon, aufgetreten:
CameraPick pickt ständig nur die Geometrie, welche ein Mesh beim erstmaligen Aufrufen von EntityPickMode(2) hatte =( Ich finde das nicht so lässig, weil der Boden ganz einfach deformiert werden kann (einfaches Neusetzen der Vertex-Koordinaten) und man dann - man schaut von schräg oben auf das Terrain - die Tiles nicht mehr richtig erwischt, wenn ihre Höhe stark verändert wurde. Das Mesh wird nach der Transformation korrekt angezeigt, nur die CameraPick-Abfrage scheint noch mit der alten Geometrie zu arbeiten.
Ich fand keinen Befehl, der irgendwie darauf hindeuten könnte, dass er die Pickgeometrie updaten würde. Erneutes Aufrufen von EntityPickMode(2) scheint nicht zu klappen...

Damit ihr seht, was ich meine, gibt's hier einen kleinen Beispielcode. Mit der Leertaste deformiert ihr das Mesh. Ihr werdet sehen, dass der Würfel unabhängig von der Form immer gleich gehighlightet (als Reaktion aufs Picken) wird.
BlitzMax: [AUSKLAPPEN]

SuperStrict

Framework Sidesign.MiniB3D

Graphics3D( 800, 600, 0, 60 )

Local cube:TMesh = CreateCube()
cube.EntityPickMode(2)

Local cam:TCamera = CreateCamera()
cam.PositionEntity(0,0,-8)

Local light:TLight = CreateLight()
light.RotateEntity(80,0,0)

Local picked:TEntity
While Not (KeyDown(KEY_ESCAPE) Or AppTerminate())
cube.TurnEntity(0.4, 0.2, 0)

If KeyHit(KEY_SPACE) DeformCube(cube)

picked = CameraPick( cam, MouseX(), MouseY() )
If picked
cube.EntityColor(255,0,0)
Else
cube.EntityColor(255,255,255)
EndIf

RenderWorld
Flip
Wend
End

Function DeformCube(pCube:TMesh)
Global state:Int=0

state = 1 -state
Local f:Float = 0.5 +1.5*state

For Local is:Int = 1 To pCube.CountSurfaces()
Local surface:TSurface = pCube.GetSurface(is)
For Local iv:Int = 0 To Surface.CountVertices()
surface.VertexCoords(iv, surface.VertexX(iv)*f, surface.VertexY(iv)*f, surface.VertexZ(iv)*f)
Next
Next
'pCube.UpdateNormals()
'pCube.EntityPickMode(2)
End Function


Also:
Ist es möglich, den Code so hinzubiegen, dass CameraPick immer korrekt* arbeitet Question

mfG

* Mit korrekt meine ich: So, wie ICH von CameraPick erwarte zu funktionieren.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Goodjee

BeitragMi, Jan 06, 2010 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
mit camerapick hatte ich auchschonmal probleme...die hab ich auch nie lösen können Razz

https://www.blitzforum.de/foru...ht=minib3d
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Holzchopf

Meisterpacker

BeitragMi, Jan 06, 2010 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ich der Schule wegen nicht all zu viel Zeit für Privates vergeuden darf ( Confused ), habe ich mich nun einfach für einen grausigen Workaround entschieden (nachdem ich ein zwei Stunden gnadenlos verloren durch sämtliche bmx/cpp-Includes von MiniB3D irrte):
Ich kopiere das Mesh nach der Transformation, lösche und ersetze das alte Mesh durch das neue und muss dann nur noch die alten Entity-Eigenschaften auf's neue Entity übertragen (mit CopyEntity kämen die zwar mit, aber leider kommt dann auch das CameraPick-Problem mit Rolling Eyes ).
Ob diese Information für dich nützlich ist, weiss ich jetzt nicht. Aber so oder so wäre auch ich froh, wenn noch jemand auftauchen würde, der wüsste, wie man ohne diese Bastelei die Pick-Geometrie auf den neuen Stand bringt Smile

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group