Texture coordinates

Everything related to 3D programming
User avatar
Comtois
Addict
Addict
Posts: 1431
Joined: Tue Aug 19, 2003 11:36 am
Location: Doubs - France

Re: Texture coordinates

Post 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
Please correct my english
http://purebasic.developpez.com/
Polo
Addict
Addict
Posts: 2422
Joined: Tue May 06, 2003 5:07 pm
Location: UK

Re: Texture coordinates

Post by Polo »

Thanks for your answers - any chance this could be possible using a command instead of a material file?
Fred
Administrator
Administrator
Posts: 18162
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Re: Texture coordinates

Post 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.
Polo
Addict
Addict
Posts: 2422
Joined: Tue May 06, 2003 5:07 pm
Location: UK

Re: Texture coordinates

Post 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 ;)
User avatar
J. Baker
Addict
Addict
Posts: 2181
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: Texture coordinates

Post 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. ;)
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef


Even the vine knows it surroundings but the man with eyes does not.
Polo
Addict
Addict
Posts: 2422
Joined: Tue May 06, 2003 5:07 pm
Location: UK

Re: Texture coordinates

Post by Polo »

Probably but I want to add them using functions, not through a .mesh ;)
User avatar
J. Baker
Addict
Addict
Posts: 2181
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: Texture coordinates

Post 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. ;)
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef


Even the vine knows it surroundings but the man with eyes does not.
Polo
Addict
Addict
Posts: 2422
Joined: Tue May 06, 2003 5:07 pm
Location: UK

Re: Texture coordinates

Post 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 :) )
PMV
Enthusiast
Enthusiast
Posts: 727
Joined: Sat Feb 24, 2007 3:15 pm
Location: Germany

Re: Texture coordinates

Post 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
Polo
Addict
Addict
Posts: 2422
Joined: Tue May 06, 2003 5:07 pm
Location: UK

Re: Texture coordinates

Post 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 ;)
Post Reply