Skip to content

Instantly share code, notes, and snippets.

def isOnGround(self):
result= self.world.contactTest(self.physic_node)
if result.getNumContacts()>0:
for contact in result.getContacts():
n = contact.getManifoldPoint().getNormalWorldOnB()
a = Vec3(0,0,1).angleDeg(Vec3(n))
if abs(a-180.0)<60.0 or a < 60.0:
self.last_know_ground_pos=self.node.getPos(render)
return True
return False
from direct.showbase import ShowBase
from collections import deque
import random
def foo(task):
print 'close the window now to have a dead python process'
#python is bad at shuffling deques
#so this will take a Long Time to end
x=deque(range(5000))
for i in range(999):
from panda3d.core import *
from direct.filter.FilterManager import *
class DeferredRenderer():
def __init__(self, scene_mask=1, light_mask=2):
# Camera setup
self.light_cam = base.makeCamera(base.win, lens=base.camLens)
self.light_cam.reparentTo(base.cam)
base.cam.node().getLens().setNearFar(0.1, 5000.0)
#masks
class WrappedLoader(object):
def __init__(self, original_loader):
self.original_loader=original_loader
def destroy(self):
self.original_loader.destroy()
def loadModel(self, modelPath, loaderOptions = None, noCache = None,
allowInstance = False, okMissing = None,
callback = None, extraArgs = [], priority = None):
class Wrapper(object):
def __init__(self,wrapped_object):
self.wrapped_object = wrapped_object
self.pre_hooks={}
self.pre_hooks_args={}
self.post_hooks={}
self.post_hooks_args={}
def set_pre_hook(self, function_name, function_to_call, args=None):
from panda3d.core import *
loadPrcFileData("", "show-buffers 1")
from direct.showbase.ShowBase import ShowBase
from direct.actor.Actor import Actor
from direct.gui.DirectGui import *
class World():
def __init__(self):
#place the camera
base.trackball.node().setPos(0, 15, 1)
self.modelbuffer = self.makeFBO("model buffer", 1)
self.lightbuffer = self.makeFBO("light buffer", 0)
# Create four render textures: depth, normal, albedo, and final.
# attach them to the various bitplanes of the offscreen buffers.
self.depth = Texture()
self.depth.setWrapU(Texture.WM_clamp)
self.depth.setWrapV(Texture.WM_clamp)
self.depth.setFormat(Texture.F_depth_component32)
self.depth.setComponentType(Texture.T_float)
//shadows
vec4 world_pos = p3d_ViewProjectionMatrixInverse * vec4( uv.xy * 2.0 - vec2(1.0), depth, 1.0);
world_pos.xyz /= world_pos.w;
world_pos.xyz-=light_pos.xyz;
vec4 shadow_uv=trans_render_to_shadowcaster*world_pos;
float ldist = max(abs(shadow_uv.x), max(abs(shadow_uv.y), abs(shadow_uv.z)));
ldist = ((light_radius+light_view_pos.w)/(light_radius-light_view_pos.w))+((-2.0*light_radius*light_view_pos.w)/(ldist * (light_radius-light_view_pos.w)));
float shadow= float(texture(shadowcaster.shadowMap, shadow_uv.xyz).r >= ldist * 0.5 + 0.5);
//shadows
vec4 world_pos = p3d_ViewProjectionMatrixInverse * vec4( uv.xy * 2.0 - vec2(1.0), depth, 1.0);
world_pos.xyz /= world_pos.w;
world_pos.xyz-=light_pos.xyz;
vec4 shadow_uv=trans_render_to_apiclip_of_spot*world_pos;
//mat4 biasmat = mat4(vec4(0.5, 0.0, 0.0, 0.5), vec4(0.0, 0.5, 0.0, 0.5), vec4(0.0, 0.0, 0.5, 0.5),vec4(0.0, 0.0, 0.0, 1.0));
//shadow_uv=biasmat*shadow_uv;
float shadow= textureProj(spot.shadowMap,shadow_uv, 0.01);
def loadShader(self, lang=Shader.SL_GLSL, vertex = None, fragment = None,
geometry = None,tess_control = None, tess_evaluation = None,
shaderPath = None, okMissing = False, define = None):
#old way
if shaderPath is not None:
shader = ShaderPool.loadShader (shaderPath)
if not shader and not okMissing:
message = 'Could not load shader file: %s' % (shaderPath)
raise IOError(message)
return shader