how to define UV for the following situation?

Blitz3D Forums/Blitz3D Programming/how to define UV for the following situation?

Charrua(Posted 2011) [#1]
hi
i made a simple ramp with 6 vertex and 8 tris, but didn't found a way to define uv's for them. I redifine the ramp with 12 vertex and 8 tris. Redefining the same vertex with different uv to better suit a texture.

is there a more intelligent, tricky aproach?

following is a sample code.

Graphics3D 800,600

Cam = CreateCamera()
PositionEntity Cam, 0,0,-5
Light = CreateLight()


Mesh1 = CreateRamp1()
Mesh2 = CreateRamp2()

MoveEntity Mesh1,-2,0,0
MoveEntity Mesh2, 2,0,0

EntityTexture Mesh1, CreateTexture1()
EntityTexture Mesh2, CreateTexture1()


While Not KeyHit(1)
	RenderWorld
	TurnEntity Mesh1,1, 1, 0
	TurnEntity Mesh2,1, 1, 0
	Flip
Wend


Function CreateRamp1()
	;first version 6 Verts, 8 Tris
	
	Local Mesh, Surface, VertexA,VertexB, VertexC, VertexD, VertexE, VertexF
	Local Triangle1, Triangle2, Triangle3, Triangle4
	Local Triangle5, Triangle6, Triangle7, Triangle8
	
	Mesh=CreateMesh()
	Surface=CreateSurface(Mesh)
	
	VertexA = AddVertex (Surface	, 1	, -1,  1, 0, 1)
	VertexB = AddVertex (Surface	, 1	, -1, -1, 1, 1)
	VertexC = AddVertex (Surface	,-1	, -1, -1, 0, 1)
	VertexD = AddVertex (Surface	,-1	, -1,  1, 1, 1)
	VertexE = AddVertex (Surface	, 1	,  1,  1, 1, 0)
	VertexF = AddVertex (Surface	,-1	,  1,  1, 0, 0)
	
	;    E
	;    /\
	;  F/| \
	;  |\|  \
	;  | \ A \ B
	;  | |\___\
	;  |/  \  /
	;  |____\/
	;  D     C
	
	Triangle1=AddTriangle(Surface,VertexA,VertexC,VertexB)
	Triangle2=AddTriangle(Surface,VertexA,VertexD,VertexC)	
	Triangle3=AddTriangle(Surface,VertexA,VertexB,VertexE)
	Triangle4=AddTriangle(Surface,VertexA,VertexE,VertexF)
	Triangle5=AddTriangle(Surface,VertexF,VertexE,VertexB)
	Triangle6=AddTriangle(Surface,VertexF,VertexB,VertexC)
	Triangle7=AddTriangle(Surface,VertexF,VertexC,VertexD)
	Triangle8=AddTriangle(Surface,VertexF,VertexD,VertexA)
	
	UpdateNormals Mesh
	
	Return Mesh
	
End Function



Function CreateRamp2()
	;Second version, 12 Verts, 8 tris
	Local Mesh, Surface, VertexA,VertexB, VertexC, VertexD, VertexE, VertexF
	Local Triangle1, Triangle2, Triangle3, Triangle4
	Local Triangle5, Triangle6, Triangle7, Triangle8
	
	Mesh=CreateMesh()
	Surface=CreateSurface(Mesh)
	
	VertexA = AddVertex (Surface	, 1	, -1,  1, 0, 0)
	VertexB = AddVertex (Surface	, 1	, -1, -1, 1, 0)
	VertexC = AddVertex (Surface	,-1	, -1, -1, 1, 1)
	VertexD = AddVertex (Surface	,-1	, -1,  1, 0, 1)
	VertexE = AddVertex (Surface	, 1	,  1,  1, 1, 0)
	VertexF = AddVertex (Surface	,-1	,  1,  1, 1, 1)

	;    E
	;    /\
	;  F/| \
	;  |\|  \
	;  | \ A \ B
	;  | |\___\
	;  |/  \  /
	;  |____\/
	;  D     C
	
	Triangle1=AddTriangle(Surface,VertexA,VertexC,VertexB)
	Triangle2=AddTriangle(Surface,VertexA,VertexD,VertexC)
	Triangle3=AddTriangle(Surface,VertexA,VertexE,VertexF)
	Triangle4=AddTriangle(Surface,VertexA,VertexF,VertexD)
	
		
	VertexF = AddVertex (Surface	,-1	,  1,  1, 0, 0)
	VertexE = AddVertex (Surface	, 1	,  1,  1, 1, 0)
	VertexC = AddVertex (Surface	,-1	, -1, -1, 0, 1)
	VertexB = AddVertex (Surface	, 1	, -1, -1, 1, 1)
	VertexA = AddVertex (Surface	, 1	, -1,  1, 0, 0)
	VertexD = AddVertex (Surface	,-1	, -1,  1, 1, 0)
	
	Triangle1=AddTriangle(Surface,VertexF,VertexB,VertexC)
	Triangle2=AddTriangle(Surface,VertexF,VertexE,VertexB)
	Triangle3=AddTriangle(Surface,VertexF,VertexC,VertexD)
	Triangle4=AddTriangle(Surface,VertexA,VertexB,VertexE)
	
	
	
	UpdateNormals Mesh
	
	Return Mesh
	
End Function


Function CreateTexture1()

	For i = 0 To 256/32+1
	For j = 0 To 256/32+1
		c = (i + j) Mod 2 * 255
		Color c, c, c
		Rect i * 32, j * 32, 32, 32
	Next
	Next
	
	tex = CreateTexture(256, 256, 1+8)
	CopyRect 0, 0, 256, 256, 0, 0, BackBuffer(), TextureBuffer(tex)

	Color 255,255,255
	
    Return tex
	
End Function


thank's in advance

Juan


Adam Novagen(Posted 2011) [#2]
For that, you'll need a little trigonometry; I'm cream-crackered right now, so I can't just work the math out for you, but basically, you need Sin()[b] and [b]Cos() to accurately map the UV of the vertices on the ramp's slope. Have a look at the Sin()/Cos() example in the help docs, that should get you going.


Rroff(Posted 2011) [#3]
Starfox's unweld function (second function in the code I quote in the post linked below) might be of use to you?

http://www.blitzbasic.com/Community/posts.php?topic=92901#1064448


Charrua(Posted 2011) [#4]
hi, thank's

i just ask about a simple way of defining uv for this shape, if a simple one exist.

i thought that there were no need for a uv mapping software, probably one knows a way of do it simply. Reordering the tris definition may be or some thing not so obvious at first.

in the second Ramp definition i manually unweld part of the shape, duplicating vertex and so, reaching the posibility of define diferent uv coords for different vertex placed in the same point of the 3d space.

i just thought that being the shape so simple, there would be a simple way for doing it and i was overcomplicating the thing!

Juan