Page 1 of 2

Re: Texture coordinates

Posted: Fri Sep 28, 2012 3:35 pm
by Comtois
A quick test using MeshManual.pb example, added MeshVertexTextureCoordinate(u, v) for the base of pyramid.
And i use this materialScript

Code: Select all

material MeshManual
{
	technique
	{
		pass
		{
			texture_unit
			{
				texture Clouds.jpg
				tex_coord_set 0
			}
			texture_unit
			{
				texture Dirt.jpg
				tex_coord_set 1
			}
		}
	}
} 

Code: Select all

;
; ------------------------------------------------------------
;
;   PureBasic - Manual Mesh
;
;    (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;

#CameraSpeed = 1

IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY

Define.f x, y, z, nx, ny, nz, u, v
Define.l Co
Define.w t1, t2, t3

If InitEngine3D()
  
  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Scripts", #PB_3DArchive_FileSystem)
  Parse3DScripts()
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    ; Create a pyramid, manually.. See the DataSection, for more precisions
    ;
    
    Restore Pyramid
    
    CreateMesh(0)
    
    ;Base
    AddSubMesh()
    For i = 0 To 3
      Read.f x : Read.f y : Read.f z
      Read.l Co
      Read.f u : Read.f v
      AddMeshVertex(x, y, z)
      MeshVertexNormal(0, 0, 0)
      MeshVertexColor(Co)
      MeshVertexTextureCoordinate(u, v)
      MeshVertexTextureCoordinate(u, v)
    Next
    
    For i = 0 To 1
      Read.w t1 : Read.w t2 : Read.w t3
      AddMeshFace(t1, t2, t3)
    Next
    
    ;Side
    For k=0 To 3
      
      AddSubMesh()
      For i = 0 To 2
        Read.f x : Read.f y : Read.f z
        Read.l Co
        Read.f u : Read.f v
        AddMeshVertex(x, y, z)
        MeshVertexNormal(0, 0, 0) 
        MeshVertexColor(Co)
        MeshVertexTextureCoordinate(u, v)
      Next i
      Read.w t1 : Read.w t2 : Read.w t3
      AddMeshFace(t1, t2, t3)
      
    Next
    
    FinishMesh()
    NormalizeMesh(0) 
    
    UpdateMeshBoundingBox(0)
    
    GetScriptMaterial(0, "MeshManual")
 
    CreateEntity(0, MeshID(0), MaterialID(0))
    ScaleEntity(0, 400, 200, 400)
    
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0, 0, 0, 1000)
    
    CreateLight(0, RGB(255,255,255), 300, 600, -100)
    AmbientColor(RGB(80, 80, 80))
    
    Repeat
      Screen3DEvents()
      
      If ExamineMouse()
        MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
        MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
      EndIf
      
      If ExamineKeyboard()
        
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf
        
      EndIf
         
      RotateEntity(0, 1, 0, 0, #PB_Relative)
      
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()      
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized", 0)
EndIf

End

DataSection
  Pyramid:
  ;Base
  Data.f -0.5,-0.5,0.5  ; position
  Data.l $FF            ; color
  Data.f 0,0            ; UVCoordinate
  
  Data.f 0.5,-0.5,0.5   ; position
  Data.l $FF            ; color 
  Data.f 0,1            ; UVCoordinate
  
  Data.f 0.5,-0.5,-0.5  ; position
  Data.l $FF            ; color
  Data.f 1,1            ; UVCoordinate
  
  Data.f -0.5,-0.5,-0.5 ; position
  Data.l $FF            ; color
  Data.f 1,0            ; UVCoordinate
  
  Data.w 2,1,0          ; Face 
  Data.w 0,3,2          ; Face 
  
  ;-Front
  Data.f 0.5,-0.5,0.5   ; position
  Data.l $FFFFFF        ; color
  Data.f 1,0            ; UVCoordinate
  
  Data.f 0.0,0.5,0.0
  Data.l $FFFFFF
  Data.f 0.5,0.5
  
  Data.f -0.5,-0.5,0.5
  Data.l $FFFFFF
  Data.f 0,0
 
  Data.w 0,1,2         ; Face
  
  ;-Back
  Data.f -0.5,-0.5,-0.5
  Data.l $FFFFFF
  Data.f 0,1
  
  Data.f 0.0,0.5,0.0
  Data.l $FFFFFF
  Data.f 0.5,0.5
  
  Data.f 0.5,-0.5,-0.5
  Data.l $FFFFFF
  Data.f 1,1
  
  Data.w 0,1,2
  
  ;-Left
  Data.f -0.5,-0.5,0.5
  Data.l $FFFFFF
  Data.f 0,0
  
  Data.f 0.0,0.5,0.0
  Data.l $FFFFFF
  Data.f 0.5,0.5
  
  Data.f -0.5,-0.5,-0.5
  Data.l $FFFFFF
  Data.f 0,1
  
  Data.w 0,1,2
  
  ;-Right
  Data.f 0.5,-0.5,-0.5
  Data.l $FFFFFF
  Data.f 1,1
  
  Data.f 0.0,0.5,0.0
  Data.l $FFFFFF
  Data.f 0.5,0.5
  
  Data.f 0.5,-0.5,0.5
  Data.l $FFFFFF
  Data.f 1,0
  
  Data.w 0,1,2
  
EndDataSection

Re: Texture coordinates

Posted: Fri Sep 28, 2012 4:07 pm
by Polo
Thanks for your answers - any chance this could be possible using a command instead of a material file?

Re: Texture coordinates

Posted: Fri Sep 28, 2012 4:14 pm
by Fred
To do advanced stuffs, scripts are probably mandatory as we can't map all the script features with PB commands, it would be too much. Using scripts allows to leverage most of OGRE without hassle.

Re: Texture coordinates

Posted: Fri Sep 28, 2012 4:18 pm
by Polo
Fred wrote:To do advanced stuffs, scripts are probably mandatory as we can't map all the script features with PB commands, it would be too much. Using scripts allows to leverage most of OGRE without hassle.
True, though using multiple texture coordinates is not that advanced stuff ;)

Re: Texture coordinates

Posted: Fri Sep 28, 2012 7:48 pm
by J. Baker
Polo wrote:
Fred wrote:To do advanced stuffs, scripts are probably mandatory as we can't map all the script features with PB commands, it would be too much. Using scripts allows to leverage most of OGRE without hassle.
True, though using multiple texture coordinates is not that advanced stuff ;)
You add multiple textures to a single mesh in your 3D editor, such as Wings3D or whatever you may use. I did this a few years ago with PB. So PB/OGRE does support this, even years ago. You just need to learn how to create multiple textures in your 3D app. ;)

Re: Texture coordinates

Posted: Fri Sep 28, 2012 8:16 pm
by Polo
Probably but I want to add them using functions, not through a .mesh ;)

Re: Texture coordinates

Posted: Sat Sep 29, 2012 12:19 am
by J. Baker
Polo wrote:Probably but I want to add them using functions, not through a .mesh ;)
Well all you have to do then is see how a 3D editor does it and/or read the OGRE specs, then just write a procedure for it. ;)

Re: Texture coordinates

Posted: Sat Sep 29, 2012 10:56 am
by Polo
If there's no PB procedure to set a texture to use the second set of texcoords then there's no way I can write a procedure to do it (unless messing around with material script, but i'm definitely not doing that for a simple task like this :) )

Re: Texture coordinates

Posted: Sat Sep 29, 2012 11:55 am
by PMV
As long as you just need to load it at beginning, there is no need to
make it with commands at runtime. The commands are just needed
if there is a dynamic needed. There are not for your laziness. ;-)

And by the way: If you really use OOGRE3D you have to work with
materials. :) There is still much that PB can not access with
commands.

MFG PMV

Re: Texture coordinates

Posted: Sat Sep 29, 2012 12:27 pm
by Polo
PMV wrote:As long as you just need to load it at beginning, there is no need to
make it with commands at runtime. The commands are just needed
if there is a dynamic needed. There are not for your laziness. ;-)
I want it to be dynamic, hence the need for a command.
PMV wrote:And by the way: If you really use OOGRE3D you have to work with
materials. There is still much that PB can not access with
commands.
Indeed, that's why I'm asking for a command ;)