Turn child brush transparant

Blitz3D Forums/Blitz3D Beginners Area/Turn child brush transparant

Sph!nx(Posted 2009) [#1]
Another question from me! :) I have this map loading code:

Function LoadWorld(file$)

	map=LoadAnimMesh(file) 
	If Not map Return
	
	
	world=CreatePivot() 
	meshes=CreatePivot(world)
	renderbrushes=CreateMesh(world) 
	collisionbrushes=CreatePivot(world)
	pointentities=CreatePivot(world) 
	solidentities=CreatePivot(world)
	 
	EntityType collisionbrushes,COLLISIONTYPE_BRUSH
		
	For c=1 To CountChildren(map) 
	
		node=GetChild(map,c) 
		
		classname$=Lower(KeyValue(node,"classname")) 
		DebugLog "Loading "+Chr(34)+classname+Chr(34)+"..." 
		
		Select classname 
				
			; world
			Case "mesh" 
				EntityParent node,meshes 
				EntityType node,COLLISIONTYPE_MESH 
				c=c-1
	
			Case "terrain" 
				EntityParent node,collisionbrushes 
				EntityType node,COLLISIONTYPE_BRUSH, True
				c=c-1
				
			Case "brush" 
				AddMesh node,renderbrushes 
				EntityType node,COLLISIONTYPE_BRUSH 
				EntityAlpha node,0 
				EntityParent node,collisionbrushes 
				c=c-1


			Case "func_wall" 
				AddMesh node,renderbrushes 
				EntityType node,COLLISIONTYPE_BRUSH
				EntityParent node,collisionbrushes
				EntityAlpha node,0.5 
				c=c-1
			

			; info_dev_cam
			Case "info_devcam" 
				
				angles$=keyvalue(node,"angles","0 0 0") 
				pitch#=piece(angles,1," ") 
				yaw#=piece(angles,2," ") 
				roll#=piece(angles,3," ") 
				If cam 
					PositionEntity cam,EntityX(node),EntityY(node),EntityZ(node) 
					RotateEntity cam,pitch,yaw,roll 
				EndIf
			
				
			; item_test 
			Case "item_test" 
				
				angles$=keyvalue(node,"angles","0 0 0") 
				pitch#=piece(angles,1," ") 
				yaw#=piece(angles,2," ") 
				roll#=piece(angles,3," ") 
				
				; Laad de models
				item_test_model = LoadAnimMesh("content\models\item_score\item_score.b3d")
				PositionEntity item_test_model,EntityX(node),EntityY(node),EntityZ(node) 
				RotateEntity item_test_model,pitch,yaw,roll 

				; create the entity
				create_item_test(item_test)	
				
				
			
		End Select				

		Next
	 
	FreeEntity map 
	Return world 
	
End Function 


When you look at the case "info_wall" you see that I am trying to make it partially transparent. It's basically a brush structure turned into a child in 3D world studio.

Obviously, it does not work. I figured I need to get his surface first somehow and turn that alpha to 0.5. I tried to find more info, but could not find any.

Can anyone help me with this? Thanks!


Warner(Posted 2009) [#2]
				AddMesh node,renderbrushes 
				EntityType node,COLLISIONTYPE_BRUSH
				EntityParent node,collisionbrushes
				EntityAlpha node,0.5 
				c=c-1


That is not the way to use AddMesh. AddMesh copies the mesh and adds it to another mesh. Changing it afterwards has no effect on the added copy.
I'm not working on a PC now, but maybe you can try to first apply alpha:
				'EntityType node,COLLISIONTYPE_BRUSH
				'EntityParent node,collisionbrushes
				EntityAlpha node,0.5 
				AddMesh node,renderbrushes
                                FreeMesh node 'since node is not added to renderbrushes
				c=c-1

In order to get the brush, you'll need to get the meshes surfaces. Each surface has a brush assigned to it. A mesh could contain hierarchy, then the mesh has child entities. If memory serves me well, and say, the mesh has no childs, you should be able to do something like this:
For i = 1 To CountSurfaces(mesh)
  surf = GetSurface(mesh, i)
  brush = GetSurfaceBrush(surf)
  BrushAlpha brush, 0.5
  PaintSurface surf, brush '<--not sure if you need to do this
  FreeBrush brush '<---and this
Next



Sph!nx(Posted 2009) [#3]
Thanks Warner! I've tried applying alpha first. It does not work.

I do need it with this setup, cause the alpha thing is just a test. I would like to use brushes (child/limb) for many things so I would like to have it working in my current code.

Anymore ideas?


Warner(Posted 2009) [#4]
Maybe this?
For i = 1 To CountSurfaces(mesh)
  surf = GetSurface(mesh, i)
  brush = CreateBrush(0, 127, 0)
  BrushAlpha brush, 0.5
  PaintSurface surf, brush
Next



Sph!nx(Posted 2009) [#5]
Forgive my ignorance but I've tried to incorporate that code into my own, but I must be doing something wrong.

			Case "func_wall" 
				AddMesh node,renderbrushes 


				For i = 1 To CountSurfaces(node)
				surf = GetSurface(node, i)
				brush = CreateBrush(0, 127, 0)
				BrushAlpha brush, 0.5
				PaintSurface surf, brush
				Next


This is part of the code posted in the first post.


Warner(Posted 2009) [#6]
Well, what does AddMesh do there? AddMesh makes a copy of a mesh, and attaches/merges it with another mesh. After using AddMesh, you should free the original mesh. So maybe remove that line there for now.
It could be a good idea to try it in a separate program. I can't do that right now (working on my Mac), but it would be a good approach. Just create a sphere or a cube, and try making it transparent with the above method. If that works, try using a loaded mesh instead of the cube/sphere. If that works, incorporate it in your original program.


Sph!nx(Posted 2009) [#7]
Thanks Warner, I will give it a shot. I will first take a look at how it will look without the add mesh. If that fail, I try the experiment.