Quick Links: Download Gideros Studio | Gideros Documentation | Gideros Development Center | Gideros community chat
React Physics 3D - Gideros Forum

React Physics 3D

MoKaLuxMoKaLux Member
edited December 2020 in Game & application design
Let me create this post to share my progress with gideros and react physics 3d and animations.
What I have done:
-imported a 3d model from mixamo to blender to gideros
-animated it in gideros
-built a level with Tiled (from a top down view perspective)
-you control the player with arrow keys

What is left:
-"writing" a class for each type of shape I would like (plane, cube, circle, ...)
-"writing" a class to import obj or fbx
-adding other characters (why always enemies)
-I don't want to make it an FPS (I am a peaceman)
-but he needs to throw something (pebbles?)
-...
-always having fun :)

I try to keep GH up to date: https://github.com/mokalux/gideros-3D-FP

my growING GIDEROS github repositories: https://github.com/mokalux?tab=repositories
Tiled.png
1920 x 1040 - 103K
r3ddebug02.png
601 x 411 - 386K
+1 -1 (+2 / -0 ) Share on Facebook

Comments

  • hgy29hgy29 Maintainer
    Great to see 3D projects progressing with Gideros. I am progressing on my own lander game too, I'll post another video soon. While looking for tools to create terrains for 3D games, I discovered a great free tool: TerreSculptor. http://www.demenzunmedia.com/home/terresculptor/
    It is usable with any engine, even Gideros of course.

    Likes: MoKaLux

    +1 -1 (+1 / -0 ) Share on Facebook
  • great I am downloading it see what I can do to help building my world :) Thank you hgy29 <3
    my growING GIDEROS github repositories: https://github.com/mokalux?tab=repositories
  • MoKaLuxMoKaLux Member
    edited December 2020
    I can't seem to use materials anymore in gideros r3d. According to the r3d 0.8 official doc this should still work:
    Now we need to call get and set material on the fixture:
    -- materials
    --local mat = view.body:getMaterial() -- default: bounciness = 0.5, frictionCoefficient = 0.3, rollingResistance = 0
    local mat = fixture:getMaterial() -- default: bounciness = 0.5, frictionCoefficient = 0.3, rollingResistance = 0
    mat.bounciness = 0.1
    mat.frictionCoefficient = 0.5
    mat.rollingResistance = 0.1 -- 0 = no resistance, 1 = max resistance
    fixture:setMaterial(mat)
    Will try to update wiki asapDONE.
    my growING GIDEROS github repositories: https://github.com/mokalux?tab=repositories
    +1 -1 (+2 / -0 ) Share on Facebook
  • MoKaLuxMoKaLux Member
    edited December 2020
    I have a problemSOLVED :) How can I apply 2 matrices to 1 object? 1 matrix to apply position/rotation and the other matrix to apply scale?
    function LevelX:onEnterFrame(e)
    	local matrix2
    	for k, v in pairs(self.world.dynamicbodies) do
    		matrix2 = v.body:getTransform()
    		k:setMatrix(matrix2)
    --		k:setPosition(v.matrix:getPosition())
    --		k:setRotation(v.matrix:getRotation())
    		k:setScale(v.matrix:getScale()) -- PROBLEM
    	end
    end
    The code above almost works but:
    -when I comment the line PROBLEM the ball rolls but has wrong scale
    -when I uncomment the line PROBLEM the ball doesn't roll but has correct scale

    How would you go about it please?

    One solution would be to implement R3d.Body:getTransform() to return the scale of the body along the position and rotation values. That would be cool! https://wiki.gideros.rocks/index.php/R3d.Body:getTransform

    Another solution was to modify the sphere class to add a radius to it:
    local Sphere3Db=Core.class(Mesh3Db)
     
    function Sphere3Db:init(radius, steps)
    	local va,ia={},{}
    	local rs=(2*3.141592654)/steps
    	local i,ni=4,1
    	--Vertices
    	va[1]=0 va[2]=1 va[3]=0
    	for iy=1,(steps//2)-1 do
    		local y=math.cos(iy*rs) * radius
    		local r=math.sin(iy*rs) * radius
    		for ix=0,steps do
    			local x=r*math.cos(ix*rs)
    			local z=r*math.sin(ix*rs)
    			va[i]=x i+=1
    			va[i]=y i+=1
    			va[i]=z i+=1
    		end
    	end
    	va[i]=0	va[i+1]=-1 va[i+2]=0
    	local lvi=i//3+1
    	--Indices
    	--a) top and bottom fans
    	for i=1,steps do
    		ia[ni]=1 ni+=1 ia[ni]=i+1 ni+=1 ia[ni]=i+2 ni+=1
    		ia[ni]=lvi ni+=1 ia[ni]=lvi-i ni+=1 ia[ni]=lvi-i-1 ni+=1
    	end
    	--b) quads
    	for iy=1,(steps//2)-2 do
    		local b=1+(steps+1)*(iy-1)
    		for ix=1,steps do
    			ia[ni]=b+ix ni+=1 ia[ni]=b+ix+1 ni+=1 ia[ni]=b+ix+steps+1 ni+=1
    			ia[ni]=b+ix+steps+1 ni+=1 ia[ni]=b+ix+1 ni+=1 ia[ni]=b+ix+steps+2 ni+=1
    		end
    	end
    	self:setGenericArray(3,Shader.DFLOAT,3,lvi,va)
    	self:setVertexArray(va)
    	self:setIndexArray(ia)
    	self._steps=steps
    	self._va=va self._ia=ia
    end
    There is a little "hole" at the bottom of my spheres but that's ok, now my spheres roll like gideros rocks.
    image.png
    601 x 411 - 429K
    my growING GIDEROS github repositories: https://github.com/mokalux?tab=repositories
  • MoKaLuxMoKaLux Member
    edited December 2020
    I have a problem ;) I have some fbx files with apparently more than one textures embeded. They produce:
    "attributes": [
    "POSITION", "NORMAL", "COLOR", "TEXCOORD0", "TEXCOORD1", "TEXCOORD2", "TEXCOORD3", "TEXCOORD4",
    "TEXCOORD5", "TEXCOORD6", "TEXCOORD7"
    , "BLENDWEIGHT0", "BLENDWEIGHT1", "BLENDWEIGHT2", "BLENDWEIGHT3"
    ],

    only TEXCOORD0 is recognised by gideros 3DGdxLoader. I tried to add the other TEXCOORD but that doesn't seem to work (I don't see my fbx in the scene).
    	for _,a in ipairs(gm.attributes) do		
    		if a=="POSITION" then as=3 an="v"
    		elseif a=="NORMAL" then as=3 an="n"
    		elseif a=="COLOR" then as=4 an="c"
    		elseif a=="TEXCOORD0" then as=2 an="t"
    -- fix?
    		elseif a=="TEXCOORD1" then as=2 an="t"
    		elseif a=="TEXCOORD2" then as=2 an="t"
    		elseif a=="TEXCOORD3" then as=2 an="t"
    		elseif a=="TEXCOORD4" then as=2 an="t"
    		elseif a=="TEXCOORD5" then as=2 an="t"
    		elseif a=="TEXCOORD6" then as=2 an="t"
    		elseif a=="TEXCOORD7" then as=2 an="t"
    -- fix?
    		elseif a:sub(1,11)=="BLENDWEIGHT" then as=2 an="bw"..a:sub(12,12)
    		else assert(false, "Attribute not handled:"..a) end
    		attrs[an]={ ab=ds, al=as, d={} }
    		ds+=as
    	end
    Do you know if the above code is valid?
    EDIT: that seems to work :) I have lost my texture though will try to find where the texture is (ps: it is animated too).

    GH updated
    r3d03.png
    601 x 411 - 360K
    my growING GIDEROS github repositories: https://github.com/mokalux?tab=repositories
  • MoKaLuxMoKaLux Member
    edited December 2020
    ok that was all fun and stuff but I am stuck building my levels :o
    I tried to look at some programs to build them but found Tiled to be the best so far. I build my level from a top down view but that's not a problem at all.

    The biggest issue I have is attaching collision shapes to my meshes. For example I have some houses scattered around the level and I would like the player to be able to enter those.

    My process was placing the mesh houses with no collision in a Tiled layer then on another level layer I was adding the collision for the walls, that works but it takes tooooo long to do.

    Another solution would be to build the houses from parts (walls, roof, doors, ...) and build them by hand but that seems complicated too :p

    I need to give it some time and get back to it later. In the meantime I had the idea to make a 3d platformer B) That seems feasible, it should be a mario like 2d platformer but in 3d :)

    I think I have everything I need: gideros - Tiled - reactphysics3d - animation

    Wish me luck and a nice YT serie should I succeed.

    Viva gideros!
    my growING GIDEROS github repositories: https://github.com/mokalux?tab=repositories
    +1 -1 (+3 / -0 ) Share on Facebook
Sign In or Register to comment.