| Hi all I'm in the middle of creating my own level creator but I've hit a bit of a problem I can't seem to solve and hoping someone can help.
 
 basic my editor is made of single meshes connected together using AddMesh but to optimize my my level i use Fitmesh and a copy of the original Mesh to create low polygon version but i can't seem to figure out the maths for UV to stay the same size as the Added meshes. and there is the problem.
 
 here is the example.
 
 
Global FPS_Oldtime, FPS_Newtime, FPS_Ticks
Global FPS_Current,FPS_Final
Global FPS_SampleRate   = 5  ;Take a sample every N ticks
Global FPS_Samples      = 10 ;Samples to average (res of the average)
Global FPS_BufferIndex  = 1
Global FPS_Font
Dim FPS_Buffer(10)
Graphics3D 800,600,32,2
cam=CreateCamera()
l=CreateLight()
Type Test2
	Field Count,M,Mode
End Type
Type test
	Field M
	Field ID
	Field X,Y,Z,Yaw
End Type
Tex = LoadBrush("Textures\Default.png") 
Global M1=CreateMyCube()
EntityFX M1,1
HideEntity M1
For A=1 To 15
T.Test = New Test
			T\M = CopyMesh(M1)
			T\ID = 1
			T\X =  A*2
			T\Z =0
			T\Yaw = -90
			TransformEntity T\M,T\X,0,T\Z,T\Yaw 
		EntityPickMode T\M,2
Next
For A=1 To 15
T.Test = New Test
			T\M = CopyMesh(M1)
			T\ID = 1
			T\X =  0
			T\Z = A*2
			T\Yaw =180
			TransformEntity T\M,T\X,0,T\Z,T\Yaw 
		EntityPickMode T\M,2
Next
M2=CreateMesh()
EntityAlpha M2,0.5
Repeat
;SPACE TO OPTIMIZE
If KeyHit(57) OptmizeSelected(M2,Ent):FreeEntity M2:M2=0
If KeyHit(17) wire = 1 - wire :WireFrame wire
CameraPick Cam,MouseX(),MouseY()
;ADDMESH 
If MouseHit(3)
	If PickedEntity()<>0
		Ent = PickedEntity()
		If M2 = 0 Then M2=CreateMesh():EntityAlpha M2,0.5			
		AddMesh(PickedEntity(),M2)
		HideEntity PickedEntity()
	EndIf
EndIf
;PAINT SURFACE
If MouseHit(1)
	If PickedEntity()
		PaintSurface PickedSurface(),Tex
	EndIf
EndIf
If KeyDown(200) MoveEntity Cam,0,0,1
If KeyDown(208) MoveEntity Cam,0,0,-1
If KeyDown(205) MoveEntity Cam,1,0,0
If KeyDown(203) MoveEntity Cam,-1,0,0
If MouseDown(2)
	TurnEntity Cam,MouseYSpeed()/4,-MouseXSpeed()/4,0
	MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
EndIf
	UpdateWorld	
	RenderWorld
	Get_FPS()
	Flip
Until KeyHit(1)
Function TransformEntity(Mesh,X#,Y#,Z#,Yaw#)
	ThisPivot = CreatePivot()
	PositionEntity ThisPivot, X#, Y#, Z#, True
	RotateEntity ThisPivot, 0, yaw#, 0, True
	For S=1 To CountSurfaces(Mesh)
		su=GetSurface(mesh,S)
		For v% = 0 To CountVertices(su)-1
				TFormPoint VertexX#(su, v), VertexY#(su, v), VertexZ#(su, v), ThisPivot, 0
				Vx# = TFormedX#()
				Vy# = TFormedY#()
				Vz# = TFormedZ#()
				TFormNormal VertexNX#(su, v), VertexNY#(su, v), VertexNZ#(su, v), ThisPivot, 0
				Vnx# = TFormedX#()
				Vny# = TFormedY#()
				Vnz# = TFormedZ#()
				VertexCoords(Su,v,Vx#, Vy#, Vz#)
				VertexNormal(Su,v,Vnx#, Vny#, Vnz#)
		Next
	Next
	UpdateNormals(Mesh)
	FreeEntity ThisPivot
End Function
Function OptmizeSelected(Mesh,Source)
For T.Test = Each Test
	If Source = T\M
			M=CopyMesh(M1)				
			TransformEntity M,T\X,T\Y,T\Z,T\Yaw
	EndIf
Next
	
DebugLog "RightMost:"+RightMost(Mesh)
DebugLog "LeftMost:"+LeftMost(Mesh)
DebugLog "TopMost:"+TopMost(Mesh)
DebugLog "BottomMost:"+BottomMost(Mesh)
DebugLog "FrontMost:"+FrontMost(Mesh)
DebugLog "BackMost:"+BackMost(Mesh)
FitMesh M,LeftMost(Mesh),BottomMost(Mesh),BackMost(Mesh),RightMost(Mesh)-LeftMost(Mesh),TopMost(Mesh)-BottomMost(Mesh),FrontMost(Mesh)-BackMost(Mesh)
;///PROBLEM IS HERE
	For S=1 To CountSurfaces(M)
		Su=GetSurface(M,S)
		For V=0 To CountVertices(Su)-1
		TFormPoint VertexX(su,v),VertexY(su,v),VertexZ(su,v),Mesh,0
		
		VertexTexCoords su, v,TFormedX(),TFormedZ()
		Next
	Next
T.Test = New Test
	T\M = M
	T\ID = ID
	UpdateNormals M
	EntityPickMode M,2
End Function
Function LeftMost#(mesh)
    Local LeftX#= 6556856 ,RightX#=-6556856 
    For s = 1 To CountSurfaces(mesh)
        su = GetSurface(mesh,s)
        For v = 0  To CountVertices(su)-1
            If VertexX(su,v)<LeftX# Then LeftX#=VertexX(su,v)
            If VertexX(su,v)>RightX# Then RightX#=VertexX(su,v)
        Next
    Next
    Return LeftX#
End Function
Function RightMost#(mesh)
    Local LeftX# = 6556856   ,RightX# =-6556856       
    For s = 1 To CountSurfaces(mesh)
        su = GetSurface(mesh,s)
        For v = 0  To CountVertices(su)-1
            If VertexX(su,v)<LeftX Then LeftX=VertexX(su,v)
            If VertexX(su,v)>RightX Then RightX=VertexX(su,v)
        Next
    Next
    Return RightX#
End Function
Function TopMost#(mesh)
    Local BottomY#= 6556856,TopY#=-6556856    
    For s = 1 To CountSurfaces(mesh)
        su = GetSurface(mesh,s)
        For v = 0  To CountVertices(su)-1
            If VertexY(su,v)<BottomY Then BottomY=VertexY(su,v)
            If VertexY(su,v)>TopY Then TopY=VertexY(su,v)
        Next
    Next
    Return TopY#
End Function
Function BottomMost#(mesh)
    Local BottomY#= 6556856,TopY#=-6556856 
    For s = 1 To CountSurfaces(mesh)
        su = GetSurface(mesh,s)
        For v = 0  To CountVertices(su)-1
            If VertexY(su,v)<BottomY Then BottomY=VertexY(su,v)
            If VertexY(su,v)>TopY Then TopY=VertexY(su,v)
        Next
    Next
    Return BottomY#
End Function
Function FrontMost#(mesh)
    Local BackZ#= 6556856,FrontZ#=-6556856 
    For s = 1 To CountSurfaces(mesh)
        su = GetSurface(mesh,s)
        For v = 0  To CountVertices(su)-1
            If VertexZ(su,v)<BackZ Then BackZ=VertexZ(su,v)
            If VertexZ(su,v)>FrontZ Then FrontZ=VertexZ(su,v)
        Next
    Next
    Return FrontZ#
End Function
Function BackMost#(mesh)
    Local BackZ#= 6556856,FrontZ#=-6556856 
    For s = 1 To CountSurfaces(mesh)
        su = GetSurface(mesh,s)
        For v = 0  To CountVertices(su)-1
            If VertexZ(su,v)<BackZ Then BackZ=VertexZ(su,v)
            If VertexZ(su,v)>FrontZ Then FrontZ=VertexZ(su,v)
        Next
    Next
    Return BackZ#
End Function
Function Get_FPS(PosX#=10,PosY#=2)
         If FPS_Font = 0 Then
              FPS_Font=LoadFont("New Times Roman",14)
         EndIf
         FPS_Newtime = MilliSecs()
         FPS_Ticks = FPS_Ticks + 1
         If FPS_Ticks > FPS_SampleRate Then
            FPS_Current = FPS_Newtime - FPS_Oldtime
            If FPS_Current = 0 Then FPS_Current = 1000 Else FPS_Current = 1000/FPS_Current
            FPS_Buffer(FPS_BufferIndex) = FPS_Current
            FPS_BufferIndex = FPS_BufferIndex + 1
            If FPS_BufferIndex > FPS_Samples Then
                 For FPS_Count = 1 To FPS_Samples
                     FPS_Master = FPS_Master + FPS_Buffer(FPS_Count)                      
                 Next
                 FPS_Final = FPS_Master / FPS_Samples
                 FPS_BufferIndex = 1
            EndIf
            FPS_Ticks = 0
         EndIf
         FPS_Oldtime = MilliSecs()
         SetFont(FPS_Font)
         Text(PosX#,PosY#,"FPS:"+FPS_Final+" Tris:"+TrisRendered())
         ;Return FPS_Final
End Function
Function ResizeMesh(mesh,width#,height#,depth#)
   
   ScaleMesh mesh,1/MeshWidth#(mesh)*width#,1/MeshHeight#(mesh)*height#,(1/MeshDepth#(mesh))*depth#
End Function
Function CreateMyCube()
		m=CreateMesh()
	;front face
	b=CreateBrush(0,0,255)
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
	AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;right face
	b=CreateBrush(255,0,0)
	s=CreateSurface( m,b )
	AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
	AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;back face
	b=CreateBrush(0,255,255)
	s=CreateSurface( m,b )
	AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
	AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;left face
	b=CreateBrush(255,0,255)
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
	AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;top face
	b=CreateBrush(255,255,0)
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
	AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;bottom face	
	b=CreateBrush(255,255,255)
	s=CreateSurface( m,b )
	AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
	AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	
	Return m
End Function
 Last edited 2012
 
 
 |