gpt4 book ai didi

c - 伪 3D 墙(自上而下的光线转换,有点)

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:00 25 4
gpt4 key购买 nike

看,我没有发布代码,因为我需要逻辑、数学和算法。嗯:

我正在尝试使用图层和视差滚动为自上而下的图 block map 实现 3d 视觉效果。问题是:目前我只是为每一层设置不同的“速度”。但这只适用于一些非常特定的相机位置,而且,它使得 block 几乎具有无限的高度(因为它们会“增加高度”,直到它们超出相机的 FOV)。

有没有更好的(应该)实现的效果?哦,我正在使用 CAllegro 5

我考虑过限制每一层的偏移量,但我不知道该怎么做。

我目前的方法:

这是我当前的“速度”层代码(上下左右重复,改变坐标):

if (key[ALLEGRO_KEY_UP])
camera_y[0] -= 1;
camera_y[1] -= 2;
camera_y[2] -= 3;

然后我运行一个循环,使用相对于当前图层偏移量的图 block 绘制 map 。

顺便说一下,这就是想要的效果(3 层的示例):

Effect

最佳答案

对于视差滚动,滚动越快的层必须相应地越大:

Scaled

您可以使用彼此堆叠的未缩放图 block ,偏移从图 block 中心到视口(viewport)中心的距离的固定分数,

Unscaled

但顶部不会连续(除非底部重叠)。如果所有图层图 block 都是手绘或渲染图像,则这不是问题。

如果墙壁是箱形的,并且您有顶部和四个侧面的图像,您几乎可以用 3D 绘制它们,

Walled

每个盒子壁的最多两条边被绘制,倾斜。

在所有情况下:

如果视口(viewport)的中心位于世界坐标 (xc, yc),则点 (x, y, z) 映射到坐标 (x', y') 相对于视口(viewport)的中心:

x' = (x - xc) × (z + z0)/z0

y' = (y - yc) × (z + z0)/z0

其中 z0 是决定视差或深度效果“大小”的常量。

关于c - 伪 3D 墙(自上而下的光线转换,有点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34741987/

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