Create a room with bottom texture different?
Blitz3D Forums/Blitz3D Beginners Area/Create a room with bottom texture different?
| ||
| Hi, I'm trying to make a room out of just a cube, I use the flipMesh code to make it my room. How do I Make the walls and ceiling a stone texture, and then have the ground a wood texture. Here is the code I use to make the room... room=CreateCube() FitMesh room,-250,0,-250,500,500,500 FlipMesh room tex=LoadTexture("wall.jpg") ScaleTexture tex, 0.5, 0.5 EntityTexture room,tex EntityFX room,1 In the code, I've loaded the texture for the walla but not for the ground. How would I use both Textures? Thanks for the help! |
| ||
| You'll need to either: - Build your own cube making the bottom a separate surface so that you can texture it with a separate texture. or - Combine your ground and wall textures into a single texture and then alter the UV coords so that the walls map to the wall portion of the texture, and the ground maps to the ground portion. |
| ||
| How would I combine the Textures then alter the UV coords? |
| ||
| Combine the textures in a painting program. For an example on how to alter the UV coords, look up the "createskybox" function in the "castle" sample in Blitz. It uses that technique. |
| ||
You sure can work with UV Coords and a single texture and you also will learn a lot in this area. As a simple solution you could also use more primitives for the room. Example given one additional cube as the floor.
room=CreateCube()
FitMesh room,-250,0,-250,500,500,500
FlipMesh room
tex=LoadTexture("wall.jpg")
ScaleTexture tex, 0.5, 0.5
EntityTexture room,tex
floor=CreateCube()
FitMesh floor,-250,-1,-250,500,2,500
tex2=LoadTexture("ground.jpg")
ScaleTexture tex2, 0.5, 0.5
EntityTexture floor,tex2
If you really want to use more than one texture on a single mesh, then you need more than one surface with this mesh. Triangles are assigned to surfaces. Meshes are built this way: -Create a mesh (still empty, only a handle) -create and assign a surface to the mesh -assign texture (in fact: brush) to this surface -assign Vertices and Triangles to this surface -Create and apply more surfaces, each with it's own triangles ... So adding a new texture to the floor of a flipped box means: rebuild the box, but this time use two surfaces. A bit complicated for what you want. Personally I would build this in a modeler and load it in Blitz, as an extended primitive so to say. BTW: using too much surfaces can slow down the machine, so big10p has a good point with the single surface suggestion. Understanding the mesh structure may however be useful. |
| ||
This should work for you ..
Graphics3D 1024,768,32,1
Global light = CreateLight()
Global camera = CreateCamera()
Global room = CreateRoom()
;use this to test without media
;brush1 = CreateBrush( 255,0,0 )
;brush2 = CreateBrush( 0,0,255 )
brush1 = CreateBrush()
brush2 = CreateBrush()
tex1 = LoadTexture("floor.jpg")
tex2 = LoadTexture("wall.jpg")
ScaleTexture tex2, .5, .5
BrushTexture brush1, tex1
BrushTexture brush2, tex2
PaintSurface GetSurface( room, 1 ) , brush1
PaintSurface GetSurface( room, 2 ) , brush2
EntityFX room,4
PositionEntity camera, 0,750,-250
PointEntity camera, room
While Not KeyHit(1)
TurnEntity room, 0, 1, 0
RenderWorld()
Color 255,255,255
Text 0,0,"Surfaces: "+CountSurfaces( room )
Flip
Wend
;==================================================================
;==================================================================
;==================================================================
Function CreateRoom( Width# = 500 , Height# = 500 , Depth# = 500 )
;create temporary cube mesh
tmp = CreateCube()
FitMesh tmp,-Width*.5 , 0 , -Depth*.5 , Width , Height , Depth
FlipMesh tmp
s = GetSurface( tmp, 1 )
;create room mesh + 2 surfaces
mesh = CreateMesh()
ns1 = CreateSurface( mesh )
ns2 = CreateSurface( mesh )
For t = 0 To CountTriangles( s )-1
v0 = TriangleVertex( s , t , 0 )
v1 = TriangleVertex( s , t , 1 )
v2 = TriangleVertex( s , t , 2 )
;if the normal is > 0 it's the floor
If VertexNY( s , v0 ) > 0
ns = ns1
Else
ns = ns2
EndIf
;add vertices
Nv0 = AddVertex( ns , VertexX( s , v0 ) , VertexY( s, v0 ) , VertexZ( s, v0 ) , VertexU( s , v0 ) , VertexV( s, v0 ) )
Nv1 = AddVertex( ns , VertexX( s , v1 ) , VertexY( s, v1 ) , VertexZ( s, v1 ) , VertexU( s , v1 ) , VertexV( s, v1 ) )
Nv2 = AddVertex( ns , VertexX( s , v2 ) , VertexY( s, v2 ) , VertexZ( s, v2 ) , VertexU( s , v2 ) , VertexV( s, v2 ) )
;copy normals
VertexNormal ns , Nv0 , VertexNX( s, v0 ) , VertexNY( s, v0 ) , VertexNZ( s, v0 )
VertexNormal ns , Nv1 , VertexNX( s, v1 ) , VertexNY( s, v1 ) , VertexNZ( s, v1 )
VertexNormal ns , Nv2 , VertexNX( s, v2 ) , VertexNY( s, v2 ) , VertexNZ( s, v2 )
;add triangle
AddTriangle ns, Nv0, Nv1, Nv2
Next
;free tmp mesh as we don't need it
FreeEntity tmp
;return new 2 surface mesh
Return mesh
End Function
|