A bit old ,non complete ,not tested and unsupported (sorry for that ) wrap for jPCT3d library
Reference is very long it needs many posts you can generate it yourself from here http://b4a.martinpearman.co.uk/xml2bb/
A small sample (library is very huge ) worked for me on Windows 7 64bit
Dependencies
https://drive.google.com/file/d/1qOWb5i_Kne2pRhiw3rne3K8sLjUzi4LK/view?usp=sharing
Reference is very long it needs many posts you can generate it yourself from here http://b4a.martinpearman.co.uk/xml2bb/
A small sample (library is very huge ) worked for me on Windows 7 64bit
B4X:
Sub Process_Globals
Private fx As JFX
Private MainForm As Form
Dim jpct As SMMjPCT3d
Private world As World
Private boxtex As Texture
' Private obj As Object3D
Private buffer As FrameBuffer
Dim irender As IRenderer
Private imagebuffer As ImageView
Private Primitives As Primitives
Dim yRot As Float = 0
Dim loader As Loader
Dim body , rightFront,leftFront,rightRear,leftRear As Object3D
End Sub
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
'MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
imagebuffer.Initialize("imagebuffer")
MainForm.Show
MainForm.RootPane.AddNode(imagebuffer,0,0,MainForm.Width,MainForm.Height)
'
jpct.Initialize("jpct",File.DirApp&"\lwjgl64.dll")
world.Initialize("world")
irender.Initialize("",MainForm.Width,MainForm.Height,32,32,60)
If Not(File.Exists(File.DirApp,"box.jpg")) Then
File.Copy(File.DirAssets,"box.jpg",File.DirApp,"box.jpg")
End If
If Not(File.Exists(File.DirApp,"rocks.jpg")) Then
File.Copy(File.DirAssets,"rocks.jpg",File.DirApp,"rocks.jpg")
End If
If Not(File.Exists(File.DirApp,"spot.jpg")) Then
File.Copy(File.DirAssets,"spot.jpg",File.DirApp,"spot.jpg")
End If
If Not(File.Exists(File.DirApp,"terascene.3ds")) Then
File.Copy(File.DirAssets,"terascene.3ds",File.DirApp,"terascene.3ds")
End If
boxtex.Initialize("boxtex","box.jpg")
jpct.addTexture2("boxte" ,boxtex)
boxtex.Initialize("car", "spot.jpg")
jpct.addTexture2("car" ,boxtex)
boxtex.Initialize("rocks", "rocks.jpg")
jpct.addTexture2("rocks" ,boxtex)
Dim objz() As Object3D =loader.load3DS("terascene.3ds", 8)
world.addObjects(objz)
' Log(objz.Length)
objz(0).rotateY(360)
objz(0).SetTexture("rocks")
' obj= car
' obj.SetTexture("boxte")
'
' obj.SetEnvmapped(True)
' obj.build
world.setWorldAmbientLight(0,255,255)
' world.addObject( car)
body= Primitives.getBox(8, 0.25f)
Log(body.isSelectable)
rightFront=Primitives.getSphere2(5, 4)
leftFront=Primitives.getSphere2(5, 4)
rightRear=Primitives.getSphere2(5, 4)
leftRear=Primitives.getSphere2(5, 4)
' /**
' * The wheels are parts, i.e. children of the car
' */
body.addChild(rightFront)
body.addChild(leftFront)
body.addChild(rightRear)
body.addChild(leftRear)
' /**
' * Initialize the car And the wheels
' */
body.setTexture("car")
rightFront.setTexture("car")
leftFront.setTexture("car")
rightRear.setTexture("car")
leftRear.setTexture("car")
body.setEnvmapped(True)
rightFront.setEnvmapped(True)
leftFront.setEnvmapped(True)
rightRear.setEnvmapped(True)
leftRear.setEnvmapped(True)
' /**
' * We need To offset the wheels a little...
' */
Dim SimpleVector As SimpleVector
SimpleVector.Initialize("",-8, 4, 8)
Dim dropDown As SimpleVector
dropDown.Initialize("",0, 1, 0)
rightFront.translate( SimpleVector)
SimpleVector.Initialize("",-8, 4, -8)
rightRear.translate( SimpleVector)
SimpleVector.Initialize("",8, 4, 8)
leftFront.translate(SimpleVector)
SimpleVector.Initialize("",8, 4, -8)
leftRear.translate(SimpleVector)
rightFront.translateMesh()
rightRear.translateMesh()
leftFront.translateMesh()
leftRear.translateMesh()
Dim matrix As Matrix
matrix.Initialize("")
rightFront.setTranslationMatrix( matrix)
rightRear.setTranslationMatrix( matrix)
leftFront.setTranslationMatrix( matrix)
leftRear.setTranslationMatrix(matrix)
' /**
' * ...the wheels are now in place. We can now build the car.
' */
body.build()
rightRear.build()
rightFront.build()
leftRear.build()
leftFront.build()
Dim ground As Object3D
ground = Primitives.GetPlane(8 ,8)
ground.rotatey(90)
world.addObject(ground)
world.addObject(body)
world.addObject(rightFront)
world.addObject(rightRear)
world.addObject(leftFront)
world.addObject(leftRear)
body.rotateY(yRot)
body.translate2(0, -10, 0)
Dim rotMat As Matrix
Dim rightFrontHeight As Float =ground.calcMinDistance2( rightFront.getTransformedCenter(), dropDown, 4*30)
body.translate2(0 , 10, 0)
rotMat=body.getRotationMatrix()
' rotMat.setIdentity()
body.setRotationMatrix(rotMat)
world.GetCamera.setposition(10, -80, -30)
world.GetCamera.lookAt(body.getTransformedCenter)
' world.GetCamera.rotateCameraAxis(body.getTransformedCenter, 0)
buffer.Initialize("frame",640,480,buffer.SAMPLINGMODE_NORMAL)
' buffer.disableRenderer(irender.RENDERER_SOFTWARE)
' buffer.enableRenderer(irender.RENDERER_OPENGL)
Do While MainForm.Showing
buffer.clear2( fx.Colors.To32Bit(fx.Colors.Magenta))
world.renderScene( buffer)
world.draw(buffer)
buffer.update
imagebuffer.SetImage(jpct.toFXImage( buffer.GetOutputBuffer,Null))
Sleep(10)
Loop
buffer.disableRenderer(irender.RENDERER_OPENGL)
buffer.dispose()
End Sub
Dependencies
https://drive.google.com/file/d/1qOWb5i_Kne2pRhiw3rne3K8sLjUzi4LK/view?usp=sharing