Single Mesh using UV2 for Advanced Multi-texturing


Attention! 👉Starting November 2024, BlitzCoder.org will now be BlitzBasic.org.

 

Tweet blitz3d code-archives tutorials mesh
BlitzCoder

I noticed a lot of effects like this by fredborg rely on at least 2 meshes on top using copymesh and entity blending to achieve their results.

This is still a proof of concept and simple demo to use UV2 and masking to just use a single mesh to achieve the same effect.

Image

; Multi-Mesh vs Single (using UV2) for Advanced Multi-texturing Capabilities
; By RonTek @blitzcoder.org

Graphics3D 640,480,0,2 

; Mask
size = 64
Global mask = CreateTexture(size,size,1+2)
ScaleTexture mask,.25,.25 ; let's do stripes
TextureBlend mask,3 ; inverts black to white for multiply

SetBuffer(TextureBuffer(mask))

Color 255,255,255
For y = 0 To size-1 
    For x = 0 To size-1
        If y = (size/2)-1 Then Color 0,0,0
        Plot x,y
    Next 
Next

SetBuffer BackBuffer()

Type MatMesh
    Field mesh
    Field submesh
End Type

camera=CreateCamera() 
CameraClsColor camera,100,150,250
light=CreateLight() 
RotateEntity light,45,45,0 

cube1 = mat(CreateSphere(32))
cube2 = mat2(CreateSphere(32))

PositionEntity cube1,-2,0,5
PositionEntity cube2,2,0,5

Color 255,255,255

While Not KeyDown( 1 )

    TurnEntity cube1,.5,.5,.5
    TurnEntity cube2,.5,.5,.5
    WireFrame KeyDown(17)

    RenderWorld

    Text 10,FontHeight()*1,"Tris: "+TrisRendered()
    Text 10,FontHeight()*2.5,"Left: Multi-Mesh"
    Text 10,FontHeight()*4,"Right: Single Mesh (UV2)"
    Flip 

Wend 

End

; Proof of Concept, Single Mesh using UV2
Function mat2(mesh)

    EntityFX mesh,1

    red = CreateTexture(2,2)
    SetBuffer(TextureBuffer(red))
    Color 255,0,0
    Oval 0,0,2,2,1
    SetBuffer BackBuffer()  
    TextureCoords red,0 ; set to default UV1
    EntityTexture mesh,red,0,0

    yel = CreateTexture(2,2)
    SetBuffer(TextureBuffer(yel))
    Color 255,255,0
    Oval 0,0,2,2,1
    SetBuffer BackBuffer()  

    TextureCoords mask,1 ; now setting to UV2
    EntityTexture mesh,mask,0,1

    EntityTexture mesh,yel,0,2

    Return mesh

End Function

; Old Method using another mesh (CopyMesh) on top with Blending
Function mat(mesh)
    entity.MatMesh = New MatMesh

    EntityFX mesh,1

    entity\mesh = mesh
    EntityColor entity\mesh,255,255,0

    entity\submesh = CopyMesh(mesh,mesh)
    ;entity\submesh = CreateSphere(8,mesh) Lower resolution option
    EntityFX entity\submesh,1   
    EntityColor entity\submesh,255,0,0
    mask2 = mask    
    EntityBlend entity\submesh,2 ; multiply to hide white
    EntityTexture entity\submesh,mask2
    EntityFX    entity\submesh,1

    Return entity\mesh
End Function

Reply To Topic (minimum 10 characters)

Please log in to reply