所以我正在尝试在我的顶点着色器中创建一个聚光灯,目前我可以使用Phong照明模型生成方向和/或点光源。
我发现很难计算出聚光灯的正确角度,基本上只是想要一个来自眼睛空间0,0,0的聚光灯并俯视Z合作。
我试图让锥体中的所有东西(现在)变成亮白色,外面的一切都变暗了
# config/initializers/admin.rb
class CanAccessResque
def self.matches?(request)
current_user = request.env['warden'].user
return false if current_user.blank?
Ability.new(current_user).can? :manage, Resque
end
end
# routes.rb
namespace :admin do
constraints CanAccessResque do
mount Resque::Server, at: 'resque'
end
end
# ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.is_admin?
can :manage, Resque
end
end
end
# user.rb
class User < ActiveRecord::Base
def is_admin?
# your admin logic here for example:
self.role == "admin"
end
end
答案 0 :(得分:1)
您的聚光灯由位置(ps)和方向(ds)定义。因此,对于位置vp处的每个顶点,您可以计算d = vp-ps,将其标准化为dn = normalize(d),然后dot(dn,ds)将为您提供聚光灯下的角度。只需缩放它或将其与截断值进行比较即可获得标量!
或者,从长远来看,更好的方法是将聚光灯视为相机。与您的相机一样:模型和视图矩阵!将每个顶点转换为该空间,并将其从x,y,z,w投影到x,y,z。 z是对于照明和x,y总是有用的距离,您可以使用它来查找具有圆形(或任何其他)的纹理。
使用这两种技术时要注意的一点是反投影:确保检查灯只指向前方!检查z或点积的符号!