Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Three.js r102 起光線渲染好像不正常了 #30

Closed
Wujidadi opened this issue Aug 6, 2019 · 17 comments
Closed

Three.js r102 起光線渲染好像不正常了 #30

Wujidadi opened this issue Aug 6, 2019 · 17 comments
Labels

Comments

@Wujidadi
Copy link

Wujidadi commented Aug 6, 2019

Three.js r102 起光線渲染好像不正常了,目前暫時沒空深挖到底發生什麼事,先在此回報。

and Raycaster does not work correctly

@fuzhenn fuzhenn added the bug label Aug 21, 2019
@deyihu
Copy link
Collaborator

deyihu commented Sep 5, 2019

@Wujidadi

r102起,不仅光线有问题,side也有问题,情况和文档里正好相反,需要 side:THREE.BackSide

R5OSTO~}1O49P(YWQGXL_1U

https://codepen.io/deyihu/pen/jONaovG?editors=1010

@fuzhenn
Copy link
Member

fuzhenn commented Sep 17, 2019

three.js 🦀

@liuxinqiong
Copy link

求大佬快解决,万分感谢哇

@deyihu
Copy link
Collaborator

deyihu commented Sep 20, 2019

@liuxinqiong
Copy link

在 r105 中,Raycaster 工作也不正常了,r102 中工作正常,不知道是否有相关性

@fuzhenn
Copy link
Member

fuzhenn commented Sep 24, 2019

@deyihu 要解决这个问题,应该需要一些three的分版本处理逻辑

@deyihu
Copy link
Collaborator

deyihu commented Sep 24, 2019

@fuzhenn @liuxinqiong

刚才我回退到0.5.0是正常的(three.js使用的103版本) https://codepen.io/deyihu/pen/qBWgpXq?editors=0010
灯光和Raycaster 都是正常的,

问题应该是出在相机矩阵这里,

 _syncCamera() {
        const map = this.getMap();
        this.camera.matrix.elements = map.cameraWorldMatrix;
        this.camera.projectionMatrix.elements = map.projMatrix;
    }

好像102开始,three.js的相机逻辑有改变

@fuzhenn
Copy link
Member

fuzhenn commented Sep 24, 2019

谢谢@deyihu 看来是camera直接采用外部matrix时的逻辑有什么变化。

@fuzhenn
Copy link
Member

fuzhenn commented Sep 24, 2019

看了一下 discourse上的讨论,看上去是因为判断面的朝向时,不再考虑camera的矩阵导致的。我猜测是因为maptalks的坐标轴方向和three.js的不同,考虑camera变换后,maptalks和three面的朝向是一致,但去掉camera就出现问题了。

看上去three.js应该是不会回退到原有逻辑的,需要我们自己实现一个workaround。可以考虑通过addMesh时,修改某些参数(或者修改它的matrixWorld)来解决。

目前看来这不是一个容易解决的问题,需要一些时间来调研。

@liuxinqiong
Copy link

@deyihu @fuzhenn 那我是不是可以先用 0.5.0 版本先过渡一下?因为我这边挺急的,研究有一段时间了

@fuzhenn
Copy link
Member

fuzhenn commented Sep 24, 2019

@liuxinqiong 可以先用0.5.0,注意一下readme里0.5.0 => 0.6.0的迁移指南就行了

@fuzhenn
Copy link
Member

fuzhenn commented Nov 8, 2019

已经开始着手解决这个问题:
我准备把maptalks的坐标系统调整为与opengl默认一致, 目前maptalks的Y轴方向和opengl相反:
image
opengl坐标系图片出处

这样maptalks和three(以及其他webgl库)的坐标系统就能变为一致了

@fuzhenn
Copy link
Member

fuzhenn commented Nov 9, 2019

maptalks坐标系的修改已经初步完成,验证了一下,高版本three已经能正常工作,但这次修改会带来一些不兼容问题,包括:

  • 模型不再需要指定BACKSIDE
  • 模型默认的旋转方向会发生变化

好在这些不兼容问题修改起来比较容易,three版本变化也不会再影响three图层插件的正常运行,所以长远看还是值得的。

下周进一步测试后,会发布maptalks.js新版本,到时这个问题就能彻底解决了。

image

@Wujidadi
Copy link
Author

哇,感謝 @fuzhenn 兄,一陣子沒注意這問題了

@liuxinqiong
Copy link

Cool! @fuzhenn 感谢,棒棒哒

@fuzhenn
Copy link
Member

fuzhenn commented Nov 13, 2019

maptalks核心库的修改已经推送到了master分支上,经过验证THREE(包括当前最新的110)能正常工作了。

THREE从103版开始修改了raycaster的射线方向计算方法,改为手动计算camera.projectionMatrixInverse矩阵即能解决,具体可以参考这个pr: #72

@fuzhenn
Copy link
Member

fuzhenn commented Nov 15, 2019

v0.46.0已经发布,升级到新版本的maptalks即可。
这个问题可以正式关闭了 🎉
https://github.com/maptalks/maptalks.js/releases/tag/v0.46.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants