Difference between revisions of "3D Plane"

From GiderosMobile
 
Line 2: Line 2:
  
 
Here you will find various resources to help you create 3D games and apps in Gideros Studio.
 
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, …).
 
'''note''': you may have to provide your own assets (fonts, gfx, …).
 
  
 
=== 3D Plane (Mesh) ===
 
=== 3D Plane (Mesh) ===

Latest revision as of 22:41, 18 November 2023

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