Vertex color
Blitz3D Forums/Blitz3D Programming/Vertex color
| ||
| Here is what i'm trying to do : - Load a mesh( with coloured Vertices ) and position a single surface to each vertex of the mesh --> this works - applying the vertex color from the mesh to the single surfaces--->??? (this is just a modification of Rob's single surface stuff:) http://www.blitzbasic.com/Community/posts.php?topic=32064
Global fpsindex#,fpstime#,fpsfold_millisecs#,fpsfps#,time,xyzturn
Type layer
Field mesh
Field count
Field spritebank ; pointer to a type just for holding a list of sprites
End Type
Type sprite
Field x#,y#,z#
Field r,g,b
Field s#,a#
Field verti[3]
Field surf
End Type
;--------------------------------------------------------------------------------------------
Graphics3D 640,480,32,2
SetBuffer BackBuffer()
Global camera=CreateCamera()
CameraRange camera,1,9000
CameraClsColor camera,141,195,245
light=CreateLight(1)
PositionEntity light,1000,1000,-1000
;--------------------------------------------------------------------------------------------
fire=LoadTexture ("fire1.png",2+48)
test=CreateLayer()
EntityTexture test,fire
Mymesh=LoadMesh("cloud1.b3d")
;EntityAlpha Mymesh,0.5
EntityFX Mymesh,2
HideEntity Mymesh
For scount=1 To CountSurfaces(Mymesh)
surface = GetSurface(Mymesh,scount)
numverts=CountVertices(surface)-1
For i=0 To numverts
;Coordinates of the vertices
xv#=VertexX(surface,i)
yv#=VertexY(surface,i)
zv#=VertexZ(surface,i)
;VertexColor
vcr=VertexRed#(surface,i)
vcg=VertexGreen#(surface,i)
vcb=VertexBlue#(surface,i)
temp = AddSprite(test)
PositionSprite temp,xv#,yv#,zv#,vcr,vcg,vcb
Next
Next
;--------------------------------------------------------------------------------------------
HidePointer
While Not KeyHit(1)
MoveEntity camera,0,0,MouseZSpeed()*10
mxspd#=MouseXSpeed()*.2
myspd#=MouseYSpeed()*.2
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
TurnEntity camera,myspd,-mxspd,0
UpdateSprites()
UpdateWorld
RenderWorld
Text 0,0,fps()
Flip 0
Wend
End
;--------------------------------------------------------------------------------------------
Function UpdateSprites()
For s.sprite=Each sprite
TFormPoint s\x,s\y,s\z,0,camera
If TFormedZ#()>0
TFormVector -s\s,-s\s,0,camera,0
VertexCoords s\surf,s\verti[0],s\x+TFormedX#(),s\y+TFormedY#(),s\z+TFormedZ#()
TFormVector s\s,-s\s,0,camera,0
VertexCoords s\surf,s\verti[1],s\x+TFormedX#(),s\y+TFormedY#(),s\z+TFormedZ#()
TFormVector -s\s,s\s,0,camera,0
VertexCoords s\surf,s\verti[2],s\x+TFormedX#(),s\y+TFormedY#(),s\z+TFormedZ#()
TFormVector s\s,s\s,0,camera,0
VertexCoords s\surf,s\verti[3],s\x+TFormedX#(),s\y+TFormedY#(),s\z+TFormedZ#()
EndIf
Next
End Function
;--------------------------------------------------------------------------------------------
Function CreateLayer()
l.layer=New layer
l\mesh=CreateMesh() : surf=CreateSurface(l\mesh)
l\spritebank=CreateBank()
NameEntity l\mesh,Handle(l)
EntityColor l\mesh,255,255,255
EntityFX l\mesh,2
EntityBlend l\mesh,3
Return l\mesh
End Function
;--------------------------------------------------------------------------------------------
Function AddSprite(mesh)
l.layer=Object.layer(EntityName(mesh))
surf=GetSurface(l\mesh,1)
l\count=l\count+1
ResizeBank l\spritebank,l\count*4
;create a new sprite
s.sprite=New sprite
s\verti[0]=AddVertex(surf,0,0,0,0,1) ;topleft
s\verti[1]=AddVertex(surf,0,0,0,1,1) ;topright
s\verti[2]=AddVertex(surf,0,0,0,0,0) ;bottomleft
s\verti[3]=AddVertex(surf,0,0,0,1,0) ;bottomright
AddTriangle(surf,s\verti[1],s\verti[2],s\verti[3])
AddTriangle(surf,s\verti[2],s\verti[1],s\verti[0])
s\s=1 : s\a=1
s\r=255 : s\g=255 : s\b=255
s\x=0 : s\y=0 : s\z=0
s\surf=surf
;put the new sprite into the bank
PokeInt l\spritebank,(l\count*4)-4,Handle(s)
Return Handle(s)
End Function
;--------------------------------------------------------------------------------------------
Function PositionSprite(sprite,x#,y#,z#,vcr,vcg,vcb)
s.sprite = Object.sprite( sprite )
s\x=x
s\y=y
s\z=z
s\r=vcr
s\g=vcg
s\b=vcb
End Function
;--------------------------------------------------------------------------------------------
;--------------------------------------------------------------------------------------------
Function fps()
fpsindex=fpsindex+1
fpstime=fpstime+MilliSecs()-fpsfold_millisecs
If fpstime=>1000
fpsfps=fpsindex
fpstime=0
fpsindex=0
EndIf
fpsfold_millisecs=MilliSecs()
Return fpsfps
End Function
Media(15 Kb): http://www.boteco.de/bolo/upload1/Cloud1.zip |
| ||
| Use Vertexcolor surf,vert,red,green,blue. Bear in mind though that entityblend 3 is enabled for that surface. Depends what effect you are after I suppose. |
| ||
| Thanks ! |