compass question

Blitz3D Forums/Blitz3D Beginners Area/compass question

stayne(Posted 2010) [#1]
I'm trying to code a compass. Not the round type but the horizontal type that slides left and right. The closest I can get with this task is to use Draw3D2's DrawRect3D command, utilizing UVW (in this case 'U' with the entities Yaw:

DrawRect3D(FDrawHandle%,FDrawX#,FDrawY#,FDrawUSet#,FDrawVSet#,FDrawWSet#,FDrawHSet#,FDrawButton%=0,FDrawAngle#=0,FDrawScale#=1)


Any ideas? Here's what I've tried. My compassimage is a jpg I created in PS. It's 256px wide, 32px high and contains N | E | S | W |.

DrawRect3D(compassimage,0,360,-EntityYaw(cube),0,180,32,0,0)


Doesn't work of course since the cube's yaw flips from 180 to -180. Anyone have an idea on this one?


stanrol(Posted 2010) [#2]
flip it based on a variable.


Matty(Posted 2010) [#3]
Can you adjust the UVs of the texture so that it scrolls left or right?


6(Posted 2010) [#4]
I would offset the uv coordinates too. Check out the PositionTexture function as that sounds like what you need.


stayne(Posted 2010) [#5]
That did it guys, thanks a bunch!


stayne(Posted 2010) [#6]
Very crude example of what I ended up with...

Graphics3D 640,480,0,2
SetBuffer BackBuffer() 

camera=CreateCamera() 

light=CreateLight() 
RotateEntity light,90,0,0 

cube=CreateCube() 
PositionEntity cube,0,0,5 

compass = CreateSprite()
ScaleSprite compass,1,.1
PositionEntity compass,0,2,3

tex=CreateTexture(128,18) 
SetBuffer TextureBuffer(tex) 
ClsColor 50,50,50 
Cls
font=LoadFont("verdana",19) 
SetFont font 
Color 255,255,255
Text 0,0,"N | E | S | W |"

EntityTexture compass,tex 
SetBuffer BackBuffer()

While Not KeyDown(1)
	
	compassrot# = EntityYaw(cube)
		
	If compassrot# < 0 Then compassrot# = compassrot# + 360
		
	PositionTexture tex,compassrot#/360,0
		
	TurnEntity cube,0,-MouseXSpeed(),0
		
	MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

	RenderWorld()
		
	Flip
	
Wend 

End