基本上,我试图让它看起来像玩家在水下使用雾,但是,即使雾"工作",它似乎在改变不透明度基于什么方向你面对和你在地图上的位置,而不是保持不变。
import panda3d.core
import ursina
from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
from ursina.shaders import basic_lighting_shader
app = Ursina()
random.seed(0)
ground = Entity(model='cube', collider='box', scale=(64, 1, 64), texture='Textures/floor1.png', texture_scale=(4,4))
tester = Entity(model='sphere', collider='box', scale=2, texture="grass")
editor_camera = EditorCamera(enabled=False, ignore_paused=True)
player = FirstPersonController(model='cube', z=10, color=color.orange, origin_y=-.5, speed=8)
player.collider = BoxCollider(player, Vec3(0,1,0), Vec3(1,2,1))
Sky(color=color.black)
def input(key):
if key == "g":
print(scene.fog.getLinearOnsetPoint())
print(scene.fog.get_linear_onset_point())
def pause_input(key):
if key == "escape":
quit()
if key == 'tab': # press tab to toggle edit/play mode
editor_camera.enabled = not editor_camera.enabled
player.visible_self = editor_camera.enabled
player.cursor.enabled = not editor_camera.enabled
mouse.locked = not editor_camera.enabled
editor_camera.position = player.position
application.paused = editor_camera.enabled
scene.fog_density = .05
scene.fog_color = color.blue
pause_handler = Entity(ignore_paused=True, input=pause_input)
app.run()
我认为这与雾点有关,但我不知道如何更新它们以考虑到玩家的位置和他们面对的方向。我已经尝试了一些版本,我通过使用球员的位置更新雾点,但它仍然不能正常工作,当你环顾四周。地板上的问题最明显。
雾气似乎渲染不正确,因为我认为地板是一个巨大的平面,雾气覆盖试图以距离地板中心的距离为基础,而不是地板最接近的部分。我把地板弄成一堆碎片,把它修好了。为了让雾出现在我看到的任何地方,我只是在地图周围放置了墙壁和天花板。