Cannot CameraPick() with loadAnimMesh?

Blitz3D Forums/Blitz3D Programming/Cannot CameraPick() with loadAnimMesh?

Jeroen(Posted 2003) [#1]
Hi!

I tried to cameraPick animMeshes and meshes.
Meshes work fine, but animMeshes not.

I use:

Function targetbox(ent)
	If ent=0 Return 0
	If EntityInView(ent,camera)=0 Return 0
	CameraProject camera,EntityX(ent),EntityY(ent),EntityZ(ent)
	leftmost#=ProjectedX()
	rightmost#=ProjectedX()
	topmost#=ProjectedY()
	bottommost#=ProjectedY()
	;RuntimeError (leftmost#+" "+rightmost#+" "+topmost#+" "+bottommost#)
	For i=1 To CountSurfaces(ent)
		s=GetSurface(ent,1)
		For v=0 To CountVertices(s)-1
			TFormPoint VertexX(s,v),VertexY(s,v),VertexZ(s,v),ent,0
			CameraProject camera,TFormedX(),TFormedY(),TFormedZ()
			If ProjectedX()<leftmost leftmost=ProjectedX()
			If ProjectedX()>rightmost rightmost=ProjectedX()
			If ProjectedY()<topmost topmost=ProjectedY()
			If ProjectedY()>bottommost bottommost=ProjectedY()
		Next
	Next
	Rect leftmost,topmost,rightmost-leftmost,bottommost-topmost,0
End Function



...to draw a box around the objects, as feedforward.

Can't I pick animMeshes at all?


IPete2(Posted 2003) [#2]
Jeroen,

Just a thought but you may have to make them pickable. There is a code archive for this I believe, I'd check the archives out.

[Sorry about this I always seem to suggest you start there, but the place is full of excellent little nuggets of information and examples.]

I think you may also have to find all the children and make them picakble too.

Have a route about, look for parent/children items and pickable items, you'll find it there somewhere I hope.


IPete2.


Jeroen(Posted 2003) [#3]
Hey iPete2,

Thanks for your suggestions so far.
I did made it pickable. I tried option 2 and 3 (cube and polygon).

Secondly I used countChildren/getChild to make them pickable as well, but it seems not to be working (unlike using this trick for entityAlpha and so on).


IPete2(Posted 2003) [#4]
Hmm,

Then I'm out of suggestions for now, perhaps someone else can be of assistance?

Did you check out the bug forum to see its not a noted bug of some kind?

Keep asking, someone will know why. I seem to remember something about animmeshs having collision problems on frames other than the first frame too, I wonder if that's connected.

IPete2.


fredborg(Posted 2003) [#5]
Is it a skinned or segmented mesh?


jfk EO-11110(Posted 2003) [#6]
I works, somehow. You need to make the children pickable and it will return the handle of the picked child. Using getparent you can find the used entity. Using EntityClass$() can be used to test if the children are meshes or bones, and of course, only use it with meshes. Skinned ones (usually B3D) normaly have bones-children, segmeted eg. 3ds or .x have mesh children.


Neo Genesis10(Posted 2003) [#7]
Take a look at your code is my advice - its likely the problem lies there. I created a mock 'lobby' scene using a 3DS mesh loaded in using LoadAnimMesh and set the destructable areas to be pickable. Worked fine.


Jeroen(Posted 2003) [#8]
Thanks!

I can't find anything on EntityClass in the docs or forum....what does it return?


Jeremy Alessi(Posted 2003) [#9]
EntityClass$() should return "Mesh" or "Bone" maybe some others ... "Camera". I haven't actually used it yet but just guessing.


Michael Reitzenstein(Posted 2003) [#10]
What it returns is listed in the updates file in your Blitz3D directory.


Jeroen(Posted 2003) [#11]
[code]
For N = 1 To CountChildren(m\entity)
If Lower$(EntityClass$(GetChild(m\entity,N))) = "mesh"
EntityPickMode GetChild(m\entity,N),2
Next
[code]

I tried the above and it partially works:
the rectangle around the mesh is sized wrong, and on entities that actually animate, there is no rectangle at all :(