Graphics - 阴影生成技术

一些简单的概念介绍,作为个人文章的词条引用;

 阴影生成技术,目前普遍采用的一般有三种:Planar ShadowShadow MapShadow Volume

Planar Shadow:类似投影,计算最简单,缺点只能绘制投射在平面上的阴影;

Shadow Volume:适合精确表现动态光影场景的技术,在屏幕空间光栅化阴影体积,可准确判断每个屏幕像素是否在阴影之内;可以处理平行光源和点光源的阴影,其典型的适用范例便是Doom3,不足在于Shadow Volume引入了额外的顶点和面,加大了存储和处理强度,同时渲染出的阴影比较硬,如果要实现软阴影,仍需其他技术配合;

Shadow Map:目前大部分游戏所使用的技术;利用站在光源处所沿光源法线看去所生成的深度图来检测场景中的体象素是否处于阴影中,然而,阴影贴图也有许多问题,例如远近景物都采用同一张纹理,就会令到近景的精度不足,出现锯齿;2006年香港中文大学的博士生Fan Zhang等人发表了一种 PSSM 算法,为不同距离的场景渲染多张阴影贴图,在采样的时候按距离决定使用那一张;这个方法的变种CSM,在切割上和PSSM有点差异,被广泛使用于现时大部分游戏引擎中;


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Java 中,可以通过 Graphics2D 对象的 setPaint() 方法设置绘制的颜色、渐变或纹理。我们可以使用 GradientPaint 类来实现添加阴影的效果。具体步骤如下: 1. 创建一个 GradientPaint 对象,该对象代表从一种颜色渐变到另一种颜色的渐变。 2. 将 GradientPaint 对象设置为 Graphics2D 对象的 paint 属性。 3. 绘制一个矩形,在矩形上使用 Graphics2D 对象的 fill() 方法填充颜色。这将使用 GradientPaint 对象的颜色来填充矩形。 4. 绘制一个比矩形稍小的矩形,填充颜色为白色。 以下是一个简单的示例代码: ``` import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import javax.swing.JFrame; import javax.swing.JPanel; public class ShadowPanel extends JPanel { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; // 设置抗锯齿 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 创建 GradientPaint 对象 GradientPaint gradient = new GradientPaint(0, 0, new Color(0, 0, 0, 0), 0, getHeight(), new Color(0, 0, 0, 50)); // 设置 paint 属性 g2d.setPaint(gradient); // 绘制大矩形 g2d.fillRect(10, 10, getWidth() - 20, getHeight() - 20); // 绘制小矩形 g2d.setColor(Color.WHITE); g2d.fillRect(20, 20, getWidth() - 40, getHeight() - 40); } public static void main(String[] args) { JFrame frame = new JFrame("Shadow Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 300); frame.setLocationRelativeTo(null); ShadowPanel panel = new ShadowPanel(); frame.add(panel); frame.setVisible(true); } } ``` 运行上述代码,将会生成一个有阴影效果的面板。其中,大矩形使用 GradientPaint 对象填充颜色,小矩形填充白色,由此形成阴影效果。可以根据需要调整 GradientPaint 对象的颜色和位置,以达到想要的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DoomGT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值