3D Plane

From GiderosMobile
Revision as of 22:41, 18 November 2023 by MoKaLux (talk | contribs)

Here you will find various resources to help you create 3D games and apps in Gideros Studio.


note: you may have to provide your own assets (fonts, gfx, …).


3D Plane (Mesh)

This function is an helper to create 3D planes.

file: Media:3D_Plane_Helper.lua

function PLANE_3D(xworld, params)
	-- params
	local params = params or {}
	local xposx = params.posx or 0
	local xposy = params.posy or 0
	local xposz = params.posz or 0
	local xsizex = params.sizex or 1
	local xsizey = params.sizey or 1
	local xsizez = params.sizez or xsizex
	local xrotx = params.rotx or 0
	local xroty = params.roty or 0
	local xrotz = params.rotz or 0
	local xtexpath = params.texpath or nil
	local xtexw = params.texw or 8 * 64
	local xtexh = params.texh or 8 * 64
	-- plane mesh
	local mesh = D3.Mesh.new()
	mesh:setVertexArray{ -xsizex,xsizey,-xsizez,	xsizex,xsizey,-xsizez,	xsizex,xsizey,xsizez,	-xsizex,xsizey,xsizez }
	-- texture coordinates -- make it big (3200, 3200)
	mesh:setTextureCoordinateArray	{	0, 0,	xtexw, 0,	xtexw, xtexh,	0, xtexh	}
	-- normal array
	mesh:setGenericArray( 3, Shader.DFLOAT, 3, 4, { 0,1,0, 0,1,0, 0,1,0, 0,1,0 } )
	mesh:setIndexArray { 1,2,3,	1,3,4 }
	if xtexpath == nil then
		mesh:setTexture( Texture.new( nil, xsizex, xsizez ) )
	else
		mesh:setTexture( Texture.new( xtexpath, true, { wrap = TextureBase.REPEAT } ) )
	end
	-- lighting, shadows, and texture. setTexture doesn't automatically do it
	mesh:updateMode( D3.Mesh.MODE_LIGHTING | D3.Mesh.MODE_SHADOW | D3.Mesh.MODE_TEXTURE )
	-- put it in a viewport so we can matrix it
	local planeview = Viewport.new()
	planeview:setContent(mesh)
	-- transform
	local matrix = planeview:getMatrix()
	matrix:setPosition(xposx, xposy, xposz)
	matrix:setRotationX(xrotx)
	matrix:setRotationY(xroty)
	matrix:setRotationZ(xrotz)
	planeview:setMatrix(matrix)
	-- body
	planeview.body = xworld:createBody(planeview:getMatrix())
	planeview.body:setType(r3d.Body.STATIC_BODY)
	planeview.shape = r3d.BoxShape.new(xsizex, xsizey, xsizez)
	local fixture = planeview.body:createFixture(planeview.shape, nil, 0) -- shape, transform, weight
--	fixture:setCollisionCategoryBits(NONDESTRUCTIBLES)
--	fixture:setCollideWithMaskBits(PLAYER1+MISSILES+DESTRUCTIBLES)
--	xworld.staticbodies[#xworld.staticbodies + 1] = planeview
end