# PureBasic Forum

 It is currently Sun May 31, 2020 7:36 am

 All times are UTC + 1 hour

 Page 1 of 1 [ 11 posts ]
 Print view Previous topic | Next topic
Author Message
 Post subject: [Solved]: Get X or Y reference from camera frontal viewPosted: Mon Mar 04, 2019 1:43 pm

Joined: Wed Jun 11, 2003 9:33 pm
Posts: 4623
Location: Spa, relaxing and thinking, and learning...
Hi,
So, we can get the front (Z) vector.

Is there any native function, trick or workaround to get also its 'X' and/or its 'Y' vector?

_________________
http://www.zeitgeistmovie.com

Last edited by Psychophanta on Sun Mar 10, 2019 12:01 am, edited 1 time in total.

Top

 Post subject: Re: Question: Get X or Y reference from camera frontal viewPosted: Fri Mar 08, 2019 6:30 pm

Joined: Tue Aug 19, 2003 11:36 am
Posts: 1418
Location: Doubs - France
AxisX = orientation * UnitX
AxisY = orientation * UnitY
AxisZ = orientation * -UnitZ

Code:
#CameraSpeed = 2

IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY

Structure Vector3
x.f
y.f
z.f
EndStructure

Structure quaternion Extends Vector3
w.f
EndStructure

Declare QmV(*R.Vector3, *Q.Quaternion, *V.Vector3)

Define.Vector3 UnitX, UnitY, UnitZ,AxisX, AxisY, AxisZ
Define.quaternion q

UnitX\x=1 : UnitX\y=0 : UnitX\z=0
UnitY\x=0 : UnitY\y=1 : UnitY\z=0
UnitZ\x=0 : UnitZ\y=0 : UnitZ\z=-1

If InitEngine3D()

InitSprite()
InitKeyboard()
InitMouse()

If Screen3DRequester()

Parse3DScripts()

; First create materials
;

MaterialBlendingMode(GrassMaterial, #PB_Material_AlphaBlend)

; Then create the billboard group and use the previous material
;
;-Billboard

Billboard = CreateBillboardGroup(#PB_Any, MaterialID(GrassMaterial), 96, 96, 0, 0, 0, -1, 1)
BillboardGroupCommonDirection(Billboard, 0, 1, 0)

For i = 0 To 600
AddBillboard(Billboard, Random(2000)-1000, Random(18) + 30, Random(2000) - 1000)
Next i

; create ground

MeshPlane = CreatePlane(#PB_Any, 2000, 2000, 40, 40, 4, 4)
CreateEntity(#PB_Any, MeshID(MeshPlane), MaterialID(DirtMaterial))

House = CreateEntity(#PB_Any, MeshID(MeshHouse), #PB_Material_None, 0, 280, 0)
ScaleEntity(House, 0.5, 0.5, 0.5)

; SkyBox
SkyBox("stevecube.jpg")

; create camera
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(Camera, 200, 400, 900, #PB_Absolute)
CameraLookAt(Camera, 0, 100, 0)

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

RotateCamera(Camera, MouseY, MouseX, 0, #PB_Relative)
MoveCamera  (Camera, KeyX, 0, KeyY)

FetchOrientation(CameraID(Camera))
q\x = GetX()
q\y = GetY()
q\z = GetZ()
q\w = GetW()

Qmv(@AxisX, @q, @UnitX)
Qmv(@AxisY, @q, @UnitY)
Qmv(@AxisZ, @q, @UnitZ)

Debug "--"
Debug AxisZ\x
Debug AxisZ\Y
Debug AxisZ\Z
Debug "*****"

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

Macro CROSS_PRODUCT(N, V1, V2)
N\x = ((V1\y * V2\z) - (V1\z * V2\y))
N\y = ((V1\z * V2\x) - (V1\x * V2\z))
N\z = ((V1\x * V2\y) - (V1\y * V2\x))
EndMacro

; Vector3 = Quaternion * Vector3
Procedure QmV(*R.Vector3, *Q.Quaternion, *V.Vector3)
; nVidia SDK implementation
Protected.Vector3 uv, uuv
CROSS_PRODUCT(uv, *Q, *V)
CROSS_PRODUCT(uuv, *Q, uv)
uv\x * (2.0 * *Q\w)
uv\y * (2.0 * *Q\w)
uv\z * (2.0 * *Q\w)
uuv\x * 2.0
uuv\y * 2.0
uuv\z * 2.0
*R\x = *V\x + uv\x + uuv\x
*R\y = *V\y + uv\y + uuv\y
*R\z = *V\z + uv\z + uuv\z
EndProcedure

_________________
http://purebasic.developpez.com/

Top

 Post subject: Re: Question: Get X or Y reference from camera frontal viewPosted: Fri Mar 08, 2019 7:14 pm

Joined: Wed Jun 11, 2003 9:33 pm
Posts: 4623
Location: Spa, relaxing and thinking, and learning...
@Comtois, you again retrieve the 'Z' vector.

Question is:
Quote:
Is there any native function, trick or workaround to get also its 'X' and/or its 'Y' vector?

_________________
http://www.zeitgeistmovie.com

Top

 Post subject: Re: Question: Get X or Y reference from camera frontal viewPosted: Fri Mar 08, 2019 8:07 pm

Joined: Tue Aug 19, 2003 11:36 am
Posts: 1418
Location: Doubs - France

AxisX = orientation * UnitX
AxisY = orientation * UnitY
AxisZ = orientation * -UnitZ

May be i should write

Vector X = orientation * UnitX
Vector Y = orientation * UnitY
Vector Z = orientation * -UnitZ

_________________
http://purebasic.developpez.com/

Top

 Post subject: Re: Question: Get X or Y reference from camera frontal viewPosted: Sat Mar 09, 2019 9:55 am

Joined: Wed Jun 11, 2003 9:33 pm
Posts: 4623
Location: Spa, relaxing and thinking, and learning...
Question is not that.
Is not about front vector, nor back vector, but "up" and "right" vectors of the object.

_________________
http://www.zeitgeistmovie.com

Top

 Post subject: Re: Question: Get X or Y reference from camera frontal viewPosted: Sat Mar 09, 2019 11:18 am

Joined: Tue Aug 19, 2003 11:36 am
Posts: 1418
Location: Doubs - France
you are disturbed by the debug, it was to control the result of the Qmv() Procedure.

Either, I modified my code to highlight the 3 axes.

Code:
#CameraSpeed = 2

IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY

Structure Vector3
x.f
y.f
z.f
EndStructure

Structure quaternion Extends Vector3
w.f
EndStructure

Declare QmV(*R.Vector3, *Q.Quaternion, *V.Vector3)

Define.Vector3 UnitX, UnitY, UnitZ,AxisX, AxisY, AxisZ
Define.quaternion q

UnitX\x=1 : UnitX\y=0 : UnitX\z=0
UnitY\x=0 : UnitY\y=1 : UnitY\z=0
UnitZ\x=0 : UnitZ\y=0 : UnitZ\z=-1

If InitEngine3D()

InitSprite()
InitKeyboard()
InitMouse()

If Screen3DRequester()

Parse3DScripts()

; First create materials
;

MaterialBlendingMode(GrassMaterial, #PB_Material_AlphaBlend)

; Then create the billboard group and use the previous material
;
;-Billboard

Billboard = CreateBillboardGroup(#PB_Any, MaterialID(GrassMaterial), 96, 96, 0, 0, 0, -1, 1)
BillboardGroupCommonDirection(Billboard, 0, 1, 0)

For i = 0 To 600
AddBillboard(Billboard, Random(2000)-1000, Random(18) + 30, Random(2000) - 1000)
Next i

; create ground

MeshPlane = CreatePlane(#PB_Any, 2000, 2000, 40, 40, 4, 4)
CreateEntity(#PB_Any, MeshID(MeshPlane), MaterialID(DirtMaterial))

House = CreateEntity(#PB_Any, MeshID(MeshHouse), #PB_Material_None, 0, 280, 0)
ScaleEntity(House, 0.5, 0.5, 0.5)

; SkyBox
SkyBox("stevecube.jpg")

; create camera
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(Camera, 200, 400, 900, #PB_Absolute)
CameraLookAt(Camera, 0, 100, 0)

; create camera
Camera2 = CreateCamera(#PB_Any, 0, 0, 20, 20)
MoveCamera(Camera2, 280, 240, 90, #PB_Absolute)
CameraLookAt(Camera2, 0, 100, 0)

d=100
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

RotateCamera(Camera, MouseY, MouseX, 0, #PB_Relative)
MoveCamera  (Camera, KeyX, 0, KeyY)

FetchOrientation(CameraID(Camera2))
q\x = GetX()
q\y = GetY()
q\z = GetZ()
q\w = GetW()

Qmv(@AxisX, @q, @UnitX)
Qmv(@AxisY, @q, @UnitY)
Qmv(@AxisZ, @q, @UnitZ)

CreateLine3D(0, CameraX(Camera2), CameraY(Camera2), CameraZ(Camera2), RGB(255,0,0), CameraX(Camera2) + AxisX\x*d, CameraY(Camera2) + AxisX\y*d, CameraZ(Camera2) + AxisX\z*d, RGB(255,0,0))
CreateLine3D(1, CameraX(Camera2), CameraY(Camera2), CameraZ(Camera2), RGB(0,255,0), CameraX(Camera2) + AxisY\x*d, CameraY(Camera2) + AxisY\y*d, CameraZ(Camera2) + AxisY\z*d, RGB(0,255,0))
CreateLine3D(2, CameraX(Camera2), CameraY(Camera2), CameraZ(Camera2), RGB(0,0,255), CameraX(Camera2) + AxisZ\x*d, CameraY(Camera2) + AxisZ\y*d, CameraZ(Camera2) + AxisZ\z*d, RGB(0,0,255))

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

Macro CROSS_PRODUCT(N, V1, V2)
N\x = ((V1\y * V2\z) - (V1\z * V2\y))
N\y = ((V1\z * V2\x) - (V1\x * V2\z))
N\z = ((V1\x * V2\y) - (V1\y * V2\x))
EndMacro

; Vector3 = Quaternion * Vector3
Procedure QmV(*R.Vector3, *Q.Quaternion, *V.Vector3)
; nVidia SDK implementation
Protected.Vector3 uv, uuv
CROSS_PRODUCT(uv, *Q, *V)
CROSS_PRODUCT(uuv, *Q, uv)
uv\x * (2.0 * *Q\w)
uv\y * (2.0 * *Q\w)
uv\z * (2.0 * *Q\w)
uuv\x * 2.0
uuv\y * 2.0
uuv\z * 2.0
*R\x = *V\x + uv\x + uuv\x
*R\y = *V\y + uv\y + uuv\y
*R\z = *V\z + uv\z + uuv\z
EndProcedure

_________________
http://purebasic.developpez.com/

Top

 Post subject: Re: Question: Get X or Y reference from camera frontal viewPosted: Sat Mar 09, 2019 11:58 pm

Joined: Wed Jun 11, 2003 9:33 pm
Posts: 4623
Location: Spa, relaxing and thinking, and learning...
I see now, nice.

Anyway, I can see that the way i am using now for it is easier, perhaps uglier, BUT more efficient, because looks like it makes use of less computing resources (less CPU speed resource and less memory for variables).
Code:
#CameraSpeed = 2

IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY

Structure Vector3
x.f
y.f
z.f
EndStructure

Define.Vector3 AxisX, AxisY, AxisZ

If InitEngine3D()

InitSprite()
InitKeyboard()
InitMouse()

If Screen3DRequester()

Parse3DScripts()

; First create materials
;

MaterialBlendingMode(GrassMaterial, #PB_Material_AlphaBlend)

; Then create the billboard group and use the previous material
;
;-Billboard

Billboard = CreateBillboardGroup(#PB_Any, MaterialID(GrassMaterial), 96, 96, 0, 0, 0, -1, 1)
BillboardGroupCommonDirection(Billboard, 0, 1, 0)

For i = 0 To 600
AddBillboard(Billboard, Random(2000)-1000, Random(18) + 30, Random(2000) - 1000)
Next i

; create ground

MeshPlane = CreatePlane(#PB_Any, 2000, 2000, 40, 40, 4, 4)
CreateEntity(#PB_Any, MeshID(MeshPlane), MaterialID(DirtMaterial))

House = CreateEntity(#PB_Any, MeshID(MeshHouse), #PB_Material_None, 0, 280, 0)
ScaleEntity(House, 0.5, 0.5, 0.5)

; SkyBox
SkyBox("stevecube.jpg")

; create camera
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(Camera, 200, 400, 900, #PB_Absolute)
CameraLookAt(Camera, 0, 100, 0)

; create camera
Camera2 = CreateCamera(#PB_Any, 0, 0, 20, 20)
MoveCamera(Camera2, 280, 240, 90, #PB_Absolute)
CameraLookAt(Camera2, 0, 100, 0)
Macro CROSS_PRODUCT(N, V1, V2)
N\x = ((V1\y * V2\z) - (V1\z * V2\y))
N\y = ((V1\z * V2\x) - (V1\x * V2\z))
N\z = ((V1\x * V2\y) - (V1\y * V2\x))
EndMacro
Macro getbase()
RotateCamera(Camera2,90,0,0,#PB_Relative)
RotateCamera(Camera2,270,0,0,#PB_Relative)
CROSS_PRODUCT(AxisX,AxisZ,AxisY)
EndMacro
d=100
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
RotateCamera(Camera2, MouseY, MouseX, 0, #PB_Relative)
MoveCamera  (Camera2, KeyX, 0, KeyY)
getbase()
CreateLine3D(0, CameraX(Camera2), CameraY(Camera2), CameraZ(Camera2), RGB(255,0,0), CameraX(Camera2) + AxisX\x*d, CameraY(Camera2) + AxisX\y*d, CameraZ(Camera2) + AxisX\z*d, RGB(255,0,0))
CreateLine3D(1, CameraX(Camera2), CameraY(Camera2), CameraZ(Camera2), RGB(0,255,0), CameraX(Camera2) + AxisY\x*d, CameraY(Camera2) + AxisY\y*d, CameraZ(Camera2) + AxisY\z*d, RGB(0,255,0))
CreateLine3D(2, CameraX(Camera2), CameraY(Camera2), CameraZ(Camera2), RGB(0,0,255), CameraX(Camera2) + AxisZ\x*d, CameraY(Camera2) + AxisZ\y*d, CameraZ(Camera2) + AxisZ\z*d, RGB(0,0,255))

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

_________________
http://www.zeitgeistmovie.com

Top

 Post subject: Re: [Solved]: Get X or Y reference from camera frontal viewPosted: Sun Mar 10, 2019 10:49 am

Joined: Tue Aug 19, 2003 11:36 am
Posts: 1418
Location: Doubs - France
Maybe it's better like that

Code:
Macro getbase()
AxisY\x=0:AxisY\y=1:AxisY\z=0
AxisZ2\x=-AxisZ\x : AxisZ2\y=-AxisZ\y : AxisZ2\z=-AxisZ\z
CROSS_PRODUCT(AxisX,AxisY,AxisZ2)
CROSS_PRODUCT(AxisY,AxisZ2,AxisX)
EndMacro

note that the function Qmv() allows to obtain the position in the world of a local point. It's a more general function.

Code:
Procedure ConvertLocalToWorld(*WorldPosition.Vector3, *LocalPoint.Vector3)
Protected.Vector3 p
Protected.quaternion q

FetchOrientation(CameraID(Camera2)) ; Or Node or Entity
q\x = GetX()
q\y = GetY()
q\z = GetZ()
q\w = GetW()

QmV(@p, *q, *LocalPoint)

*WorldPosition\x = p\x + CameraX(Camera2)
*WorldPosition\y = p\y + CameraY(Camera2)
*WorldPosition\z = p\z + CameraZ(Camera2)
EndProcedure

_________________
http://purebasic.developpez.com/

Top

 Post subject: Re: [Solved]: Get X or Y reference from camera frontal viewPosted: Sun Mar 10, 2019 10:59 pm

Joined: Wed Jun 11, 2003 9:33 pm
Posts: 4623
Location: Spa, relaxing and thinking, and learning...
Comtois wrote:
Maybe it's better like that

Code:
Macro getbase()
AxisY\x=0:AxisY\y=1:AxisY\z=0
AxisZ2\x=-AxisZ\x : AxisZ2\y=-AxisZ\y : AxisZ2\z=-AxisZ\z
CROSS_PRODUCT(AxisX,AxisY,AxisZ2)
CROSS_PRODUCT(AxisY,AxisZ2,AxisX)
EndMacro

This one does not work well. Just try yourself and you will see.
And by the way, AxisZ2 creation is nonsense, so the equivalent of that macro is:
Code:
Macro getbase()
AxisY\x=0:AxisY\y=1:AxisY\z=0
CROSS_PRODUCT(AxisX,AxisZ,AxisY)
CROSS_PRODUCT(AxisY,AxisX,AxisZ)
EndMacro

_________________
http://www.zeitgeistmovie.com

Top

 Post subject: Re: [Solved]: Get X or Y reference from camera frontal viewPosted: Mon Mar 11, 2019 9:37 am

Joined: Tue Aug 19, 2003 11:36 am
Posts: 1418
Location: Doubs - France
what is nonsense is to try to answer you.

_________________
http://purebasic.developpez.com/

Top

 Post subject: Re: [Solved]: Get X or Y reference from camera frontal viewPosted: Mon Mar 11, 2019 2:46 pm

Joined: Wed Jun 11, 2003 9:33 pm
Posts: 4623
Location: Spa, relaxing and thinking, and learning...
Comtois wrote:
what is nonsense is to try to answer you.

Well, the thing I told is a true; the use of that variable is absurd, nonsense. If it is not true, demonstrate it.

Also this Macro is a nonsense. Else check it and tell us if is or not:
Code:
Macro getbase1(); <- Does not work correct !
Base\y\x=0:Base\y\y=1:Base\y\z=0
ProductoVectorial(Base\z,Base\y,Base\x):m.f=getmodulo(Base\x):Base\x\x/m:Base\x\y/m:Base\x\z/m
ProductoVectorial(Base\x,Base\z,Base\y)
EndMacro

Tip to test 3 'getbase' different functions: 2 of them work correct, the other one does not (use wheelmouse to test in the tip), so, it is nonsense while nobody demonstrates at least 1 only sense for it.
Code:
#CameraSpeed = 2
#Camara=2
IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY, MouseZ
Structure D3DXVECTOR3
x.f
y.f
z.f
EndStructure
Structure Vector3D Extends D3DXVECTOR3
m.f;<-length(modulo)
EndStructure
Structure cuaternio Extends D3DXVECTOR3
w.f
EndStructure
Structure Vector9D
x.D3DXVECTOR3
y.D3DXVECTOR3
z.D3DXVECTOR3
EndStructure
Macro ProductoEscalar(a,b,ax=x,ay=y,az=z,bx=x,by=y,bz=z)
(a#\ax#*b#\bx#+a#\ay#*b#\by#+a#\az#*b#\bz#)
EndMacro
Macro getmodulo(v,vx=x,vy=y,vz=z)
(Sqr#ProductoEscalar(v#,v#,vx#,vy#,vz#,vx#,vy#,vz#))
EndMacro
Macro ProductoVectorial(in1,in2,out,in1x=x,in1y=y,in1z=z,in2x=x,in2y=y,in2z=z,outx=x,outy=y,outz=z); <- Calculates the vectorial product of two 3D vectors. Just modify this procedure to get the vectorial product for 4D,5D,6D or any dimension you need.
out#\outx#=in1#\in1y#*in2#\in2z#-in1#\in1z#*in2#\in2y#
out#\outy#=in1#\in1z#*in2#\in2x#-in1#\in1x#*in2#\in2z#
out#\outz#=in1#\in1x#*in2#\in2y#-in1#\in1y#*in2#\in2x#
EndMacro
Procedure QmV(*Q.cuaternio,*V.Vector3D,*R.Vector3D)
; Vector3=Quaternion*Vector3
Protected uv.Vector3D,uuv.Vector3D
ProductoVectorial(*Q,*V,uv)
ProductoVectorial(*Q,uv,uuv)
uv\x*(2.0**Q\w)
uv\y*(2.0**Q\w)
uv\z*(2.0**Q\w)
uuv\x*2.0
uuv\y*2.0
uuv\z*2.0
*R\x=*V\x+uv\x+uuv\x
*R\y=*V\y+uv\y+uuv\y
*R\z=*V\z+uv\z+uuv\z
EndProcedure
Procedure ConvertLocalToWorld(*WorldPosition.Vector3D,*LocalPoint.Vector3D)
Protected p.Vector3D,q.cuaternio
FetchOrientation(CameraID(#Camara)):q\x=GetX():q\y=GetY():q\z=GetZ():q\w=GetW()
QmV(*q,*LocalPoint,@p)
*WorldPosition\x=p\x+CameraX(#Camara):*WorldPosition\y=p\y+CameraY(#Camara):*WorldPosition\z=p\z+CameraZ(#Camara)
EndProcedure
Base.Vector9D
q.cuaternio
Unit.Vector9D
Unit\x\x=1:Unit\x\y=0:Unit\x\z=0
Unit\y\x=0:Unit\y\y=1:Unit\y\z=0
Unit\z\x=0:Unit\z\y=0:Unit\z\z=-1

If InitEngine3D()

InitSprite()
InitKeyboard()
InitMouse()

If Screen3DRequester()

Parse3DScripts()

; First create materials
;

MaterialBlendingMode(GrassMaterial, #PB_Material_AlphaBlend)

; Then create the billboard group and use the previous material
;
;-Billboard

Billboard = CreateBillboardGroup(#PB_Any, MaterialID(GrassMaterial), 96, 96, 0, 0, 0, -1, 1)
BillboardGroupCommonDirection(Billboard, 0, 1, 0)

For i = 0 To 600
AddBillboard(Billboard, Random(2000)-1000, Random(18) + 30, Random(2000) - 1000)
Next i

; create ground

MeshPlane = CreatePlane(#PB_Any, 2000, 2000, 40, 40, 4, 4)
CreateEntity(#PB_Any, MeshID(MeshPlane), MaterialID(DirtMaterial))

House = CreateEntity(#PB_Any, MeshID(MeshHouse), #PB_Material_None, 0, 280, 0)
ScaleEntity(House, 0.5, 0.5, 0.5)

; SkyBox
SkyBox("stevecube.jpg")

; create camera
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(Camera, 200, 400, 900, #PB_Absolute)
CameraLookAt(Camera, 0, 100, 0)

; create camera
CreateCamera(#Camara, 0, 0, 20, 20)
MoveCamera(#Camara, 280, 240, 90, #PB_Absolute)
CameraLookAt(#Camara, 0, 100, 0)

d=100
Repeat
Screen3DEvents()
If ExamineMouse()
MouseX = MouseDeltaX() * #CameraSpeed * 0.05
MouseY = MouseDeltaY() * #CameraSpeed * 0.05
MouseZ = MouseWheel()*10
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
RotateCamera(#Camara, MouseY, MouseX,MouseZ, #PB_Relative)
MoveCamera(#Camara, KeyX, 0, KeyY)
Macro getbase(); <- works correct !
Pitch(CameraID(#Camara),90,#PB_Local)
Pitch(CameraID(#Camara),270,#PB_Local)
ProductoVectorial(Base\z,Base\y,Base\x)
EndMacro
Macro getbase1(); <- Does not work correct !
Base\y\x=0:Base\y\y=1:Base\y\z=0
ProductoVectorial(Base\z,Base\y,Base\x):m.f=getmodulo(Base\x):Base\x\x/m:Base\x\y/m:Base\x\z/m
ProductoVectorial(Base\x,Base\z,Base\y)
EndMacro
Macro getbaseq(); <- works correct !
FetchOrientation(CameraID(#Camara)):q\x=GetX():q\y=GetY():q\z=GetZ():q\w=GetW()
Qmv(@q,@Unit\x,@Base\x)
Qmv(@q,@Unit\y,@Base\y)
Qmv(@q,@Unit\z,@Base\z)
EndMacro
getbase()
CreateLine3D(0, CameraX(#Camara), CameraY(#Camara), CameraZ(#Camara), RGB(255,0,0), CameraX(#Camara) + Base\x\x*d, CameraY(#Camara) + Base\x\y*d, CameraZ(#Camara) + Base\x\z*d, RGB(255,0,0))
CreateLine3D(1, CameraX(#Camara), CameraY(#Camara), CameraZ(#Camara), RGB(0,255,0), CameraX(#Camara) + Base\y\x*d, CameraY(#Camara) + Base\y\y*d, CameraZ(#Camara) + Base\y\z*d, RGB(0,255,0))
CreateLine3D(2, CameraX(#Camara), CameraY(#Camara), CameraZ(#Camara), RGB(0,0,255), CameraX(#Camara) + Base\z\x*d, CameraY(#Camara) + Base\z\y*d, CameraZ(#Camara) + Base\z\z*d, RGB(0,0,255))

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

_________________
http://www.zeitgeistmovie.com

Top

 Display posts from previous: All posts1 day7 days2 weeks1 month3 months6 months1 year Sort by AuthorPost timeSubject AscendingDescending
 Page 1 of 1 [ 11 posts ]

 All times are UTC + 1 hour

#### Who is online

Users browsing this forum: No registered users and 25 guests

 You cannot post new topics in this forumYou cannot reply to topics in this forumYou cannot edit your posts in this forumYou cannot delete your posts in this forum

Search for:
 Jump to:  Select a forum ------------------ PureBasic    Coding Questions    Game Programming    3D Programming    Assembly Programming    The PureBasic Editor    The PureBasic Form Designer    General Discussion    Feature Requests and Wishlists    Tricks 'n' Tips Bug Reports    Bugs - Windows    Bugs - Linux    Bugs - Mac OSX    Bugs - IDE    Bugs - Documentation OS Specific    AmigaOS    Linux    Windows    Mac OSX Miscellaneous    Announcement    Off Topic Showcase    Applications - Feedback and Discussion    PureFORM & JaPBe    TailBite