gpt4 book ai didi

java - 光线转换算法中连接光线的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:35 26 4
gpt4 key购买 nike

我正在研究一种简单的光线转换算法,我可以将其用于我想制作的 future 游戏中的 2D 阴影。我已经弄清楚了光线转换部分,但问题是当我真正想要绘制阴影时。

我知道绘制阴影涉及从转换的每条光线的端点创建一个多边形,并从“阴影 mask ”中减去它的面积,这样您就只能看到多边形区域内的内容。但是,我的问题是我无法弄清楚应该如何对光线进行排序以使多边形形成正确的形状,而不是连接到随机光线。

我得到的是这样的。

Improperly connected polygon.

因此,如果任何熟悉光线转换的人都能准确地告诉我应该如何以正确的顺序连接光线以获得正确的形状,我将不胜感激。如果重要,这是我的算法。

private void raycast(Point2D.Double target) {
double theta = Math.atan2((target.y - mousePos.y), (target.x - mousePos.x));
Point2D.Double currLoc = new Point2D.Double(mousePos.x, mousePos.y);
boolean validRay = true;

while(validRay) {
double x = currLoc.x + Math.cos(theta);
double y = currLoc.y + Math.sin(theta);

// Check to see if the ray has gone out of the window.
if((x < 0) || (x >= Game.WIDTH) ||
(y < 0) || (y >= Game.HEIGHT)) {
validRay = false;
}

// Check to see if the ray has collided with an object.
for(Polygon c : obstacles) {
if(c.contains(new Point2D.Double(x, y))) {
validRay = false;
}
}

if(validRay) {
currLoc.x = x;
currLoc.y = y;
}
}

rays.add(new Point2D.Double(currLoc.x, currLoc.y));
}

这就是目前我将光线连接成多边形的方式。

if(rays.size() > 0) { // Create the shadow mask.
BufferedImage overlay = new BufferedImage(Game.WIDTH, Game.HEIGHT, BufferedImage.TYPE_INT_ARGB);
Graphics2D og2d = overlay.createGraphics();
og2d.setColor(new Color(0.0f, 0.0f, 0.0f, 1.0f));
og2d.clearRect(0, 0, Game.WIDTH, Game.HEIGHT);

// Create a polygon from the endpoints of all the rays.
Path2D.Double mask = new Path2D.Double();
mask.moveTo(rays.get(0).x, rays.get(0).y);
for(Point2D.Double end : rays) {
mask.lineTo(end.x, end.y);
}
mask.closePath();

og2d.setColor(Color.WHITE);
og2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OUT, 0.0f));
og2d.fill(mask);

g2d.drawImage(overlay, 0, 0, null);
} // End creation of shadow mask.

谁能帮帮我?

最佳答案

我设法通过使用端点和光源本身之间的角度作为排序标准来对端点进行“排序”。基本上,最低的角度排在列表的前面,依此类推。

现在唯一的问题是我在某些顶点上没有实际的端点,因为算法将继续通过一个顶点,如果它不与对象本身发生碰撞,直到它到达屏幕的边缘,所以当我连接顶点来制作多边形,它需要“快捷方式”。这是演示我的意思的屏幕截图。

Improperly connected polygon

关于java - 光线转换算法中连接光线的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com