猫史档案馆


求助!求助!怎么用画笔做光的反射模拟引擎?

用户:源码工厂蓝仔源码工厂蓝仔查看:85 回复:7 评论:32 创建时间:2023-05-20T21:03:04


就是,先用画笔画出镜面

再让画笔角色到一个点上慢慢前进,然后碰到画出来的镜面就反射

这样的反射引擎

我做游戏要用!

谢谢在座的各位!

 


回复

上一页第 1 页 / 共 1 页下一页
边城过客边城过客

说得好,顶一下吧

点赞0


评论

顶上去让大佬们看看我都在想什么

其实我觉得纯画笔的游戏很有趣,但是我高估了自己的知识水平……

光学引擎好像纯画笔还比较方便

其实我觉得最好让simplay(小M)看到

我就看了花开有几何想做一个《镜花水月》

就是镜子,荷花,池塘和光线的游戏

(曲解)


源码工厂蓝仔源码工厂蓝仔

出bug了……center_image

热知识:粒子(光子,构成光的基本粒子)在能量不足时(遇到一些屏障时)仍有几率穿过屏障

点赞0


评论

我来了^_^我的想法是,每面镜子可以视为一条有两个端点的线段,用四个列表分别保存每条线段两个端点的横纵坐标。

先判断光线是否射到镜子上,这需要判断两条已知端点的线段是否交叉。给你个提示:①A点坐标(x1,y1),B点坐标(x2,y2),定义向量AB=(x2-x1,y2-y1);②对于向量a=(x1,y1),b=(x2,y2),定义新运算a×b=x1y2-x2y1;③对于线段AB和线段CD,若向量AB×AC与AB×AD一正一负,且向量AB×AC与AB×AD也是一正一负,那么AB和CD就相交了。

接下来,你需要求出光线射到镜子上的位置。先设交点位置(x,y),再根据这个交点分别在两条线段上这个信息,列出两个关于坐标的方程(每个方程都基于三点共线),解这个方程就能求出x和y的值。

刚刚打错了,应该是向量AB×AC与AB×AD一正一负,且向量CD×CA与CD×CB也是一正一负

最后,判断光线会向哪个方向反射。这里需要计算光线与镜面的夹角,然后根据夹角计算反射的方向。

实现光的反射效果,整体思路很容易就能想到,但是过程实现的方式就非常复杂,需要一定的数学功底。我觉得你可以上网搜一下与向量有关的数学知识,磨刀不误砍柴工嘛。花开有几何里的三角函数、双曲线等知识,我当初也是上网搜,现学现用的。

谢谢,我会去实践的,这个本来就要用很多超纲的知识

不过这个我觉得这个项目应该不会吃灰掉

太晚了,先睡了

是的,我也这么想

没看懂……我想做的是输入光线的两点和镜子的两点判断反射

我说一下现在想的大概的算法:光如果中途撞到镜子就不动了,再生成一条新的光线(不用克隆体画光线了)

我想开个协作

这句话的×是新运算还是乘?

我知道,只要一个点同时符合两个直线方程就是两线交点(两条线段相交只是两直线相交的一种特殊情况所以这个办法能用)

就是定义的向量新运算。我列的这个式子意思是,只要每条线段的两端点都在另一条线段的异侧,那么这两条线段就相交了。

还有两种可能:第一种是两线段上各自有某一点是同一个点,第二种是两线段属于同一条直线且各有一部分是重合的

这样也算,但是好像光反射用不到


源码工厂蓝仔源码工厂蓝仔

帮我看一下怎么回事,谢谢

点赞0


评论

这个光反射模拟引擎是这样的:点两下生成一面镜子,按1模式换成生成反射镜,按2模式换成生成折射镜

但是出了点问题,我也搞不明白,帮忙看一下,谢谢

https://kitten4.codemao.cn/?invite_code=WPS5QT喵:WPS5QT我在编程猫发起了一个协作项目,点击链接即可加入一起创作!


源码工厂蓝仔源码工厂蓝仔

center_imagecenter_imagecenter_imagecenter_imagecenter_imagecenter_imagecenter_imagecenter_imagecenter_image

点赞0


评论

代码


源码工厂蓝仔源码工厂蓝仔

center_imagecenter_image

点赞0


评论

注:图片上传不能超过5m,所以分开发,第二张其实是套在前一张重复执行里的


源码工厂蓝仔源码工厂蓝仔

center_image上一张否则里套的

点赞0


评论


源码工厂蓝仔源码工厂蓝仔

center_imagecenter_imagecenter_imagecenter_imagecenter_imagecenter_imagecenter_imagecenter_image

点赞0


评论

这个代码有点长,找个时间自己做出来看一看吧

是这样的:我遇到的问题是它说一个列表的第1项不存在