-
Notifications
You must be signed in to change notification settings - Fork 2.1k
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
[原生] 3D摄像机的 rect 属性在原生平台无效. #17863
Comments
补充下 , 游戏是横屏的, 我是通过代码调整的rect. 类似这种: camera3D.rect = cc.rect(.....) |
论坛好像有人提过类似的问题: https://forum.cocos.org/t/topic/155850 |
补充 : "新渲染管线" 和 "原渲染管线" 都试了, 都不行 . 一样的问题. |
有demo吗? |
目前没有 , 等我抽空写一个. 周一事情有点多, 晚些时候的. |
在这个pr里修复了:#17871 |
@star-e 试了, 还是不行. 宽高修复了, 但是 x y 还是 一直是 0, 0 . 在提供demo前 我可以提供一点线索. camera3D.rect = cc.rect(0.0, 0.5, 1, 1.5);
const {x, y, width, height} = camera3D.camera.viewport;
console.log('camera.viewport : ', x, y, width, height); // 此时打印的 viewport 是 ( 0, 0, 1, 1.5) , 错误的. 在你这个 pr 之前 , viewport 的 宽高 也是错的, 仍然都是 1. 所以 这个pr 修复了 宽高, 没有修复 x y. 你看我上面发的论坛的帖子, 那个人遇到的也是 x y 的问题 我猜是不是 有些地方 left, top , x , y 相关的逻辑有问题.
|
编辑器inspector里调整是有效的,我试试代码调用。
Get Outlook for iOS<https://aka.ms/o0ukef>
…________________________________
From: finscn ***@***.***>
Sent: Monday, November 18, 2024 1:01:22 PM
To: cocos/cocos-engine ***@***.***>
Cc: hyde zhou ***@***.***>; Mention ***@***.***>
Subject: Re: [cocos/cocos-engine] [原生] 3D摄像机的 rect 属性在原生平台无效. (Issue #17863)
在这个pr里修复了:#17871<#17871>
@star-e<https://github.com/star-e> 试了, 还是不行. 宽高修复了, 但是 x y 还是 一直是 0, 0 .
在提供demo前 我可以提供一点线索.
我在代码里 设置了 3d摄像机的 rect, 但是 3d摄像机的 viewport 的 x, y 还是 0,0 .
camera3D.rect = cc.rect(0.0, 0.5, 1, 1.5);
const {x, y, width, height} = camera3D.camera.viewport;
console.log('camera.viewport : ', x, y, width, height); // 此时打印的 viewport 是 ( 0, 0, 1, 1.5) , 错误的.
在你这个 pr 之前 , viewport 的 宽高 也是错的, 仍然都是 1. 所以 这个pr 修复了 宽高, 没有修复 x y.
你看我上面发的论坛的帖子, 那个人遇到的也是 x y 的问题
image.png (view on web)<https://github.com/user-attachments/assets/a2b4ca9d-f5fd-41bc-984b-d27883c4fefa>
我猜是不是 有些地方 left, top , x , y 相关的逻辑有问题.
我看你们的原生代码 viewport 一会是 left top 一会儿x y 的.
比如 :
* 应该用 x y 的,地方 用了 left , top
* 应该用 left , top 的,地方 用了 x y
* 更新了x y , 没更新 left top
* 更新了left top , 没更新 x y
* ...... 等等
―
Reply to this email directly, view it on GitHub<#17863 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/ADIFVAGXGWHW3DUJRFQBTTL2BFYCFAVCNFSM6AAAAABR2MKLG2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIOBRHE2TSOJSHE>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
|
@star-e 我发现 我上面举的例子不对.
但是在 原生就不对了, 变成了
大概率是这行代码有bug, 而且 ts 和 cpp 都有bug : ts的 Camera
cpp的 Camera :
web和小程序正确, 是因为他们没有走 screenSpaceSignY< 0 的分支. 比如这个值: cc.rect(0, -0.25, 1 , 1.25)
|
@star-e 你那边把 rect 按照我这个 cc.rect(0, -0.25, 1 , 1.25) 设置应该就能测试出来bug了. 如果还不行 我再弄demo. |
好的。我先试下
Get Outlook for iOS<https://aka.ms/o0ukef>
…________________________________
From: finscn ***@***.***>
Sent: Monday, November 18, 2024 1:44:34 PM
To: cocos/cocos-engine ***@***.***>
Cc: hyde zhou ***@***.***>; Mention ***@***.***>
Subject: Re: [cocos/cocos-engine] [原生] 3D摄像机的 rect 属性在原生平台无效. (Issue #17863)
@star-e<https://github.com/star-e> 你那边把 rect 按照我这个 cc.rect(0, -0.25, 1 , 1.25) 设置应该就能测试出来bug了. 如果还不行 我再弄demo.
―
Reply to this email directly, view it on GitHub<#17863 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/ADIFVADDCPWIYQMS4OLI2PD2BF5EFAVCNFSM6AAAAABR2MKLG2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIOBSGAYDINZSGQ>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
|
修复了原生viewport的问题。还有screenSpaceSignY相关问题正在验证。 |
@star-e 这里提供了一个demo. 另外麻烦看一下 demo里的 ts 文件中我写的注释. 注释除了一些说明, 还阐述了我有 "改变rect" 这个需求的原因. 麻烦了, 谢谢. 这个问题我曾经在论坛和 cocos的技术群里 咨询过, 没有得到答案. |
我看下来结果是正确的。Component的Rect,坐标原点在左下角,y=-0.25, height = 1时,图片往下移: 当screenSpaceSignY>0时,坐标原点在左下角。这个时候viewport为(0, -0.25, 1, 1.25),转换到800x600的图片坐标(原点左上角),为(0, 0, 800, 750) |
@star-e 我提供了一个demo 你可以看下 |
web和小游戏里 log 出来的 viewport 和 rect 是一致的, 都是 (0, -0.25, 1, 1.25) , 但是原生平台的 不一致, viewport是(0, 0, 1, 1.25), 这个是正常的吗? |
vulkan、metal后端是(0, 0, 1, 1.25) vulkan、metal y轴是朝下的。gles、webgl y轴朝上。 |
你想要的这个效果,感觉没法通过调整viewport的位置实现。 |
@star-e 谢谢答疑解惑. |
我这里不能重现,我现在按照-0.25,1.25,效果和webgl是相同的。windows版本。 |
可能需要选择正确的自定义引擎 |
我用的就是自定义引擎. 而且我自己尝试随便修改一些代码的数值, 也能看到错误的结果(说明自定义引擎生效了) |
关于off-center perspective projection matrix,可以参考这个回答: 相关方法在: 注意这里是d3d的投影矩阵,放在cocos里需要些调整。 |
注意scene.Camera的viewport是平台相关的,和camera component的rect不一样。 |
@star-e 其实我并没有用到 viewport . 刚才给你的demo 可能有点复杂了, 有很多无用干扰项. |
感谢分享. 看来我把这个问题想简单了. 这个小需求居然实现起来还挺复杂 . 所以我用 rect 在web和小游戏里目前能满足需求 ( |
这个需求,可以通过改变fov做到。ipad屏幕接近4:3,所以fov(一般指y轴fov)需要更大些。 |
其实我们第一个方案用的就是 fov, 但是实际情况其实比我说的复杂, 比如 很多手机 其实左右也要补充内容, ipad是上面补充内容. 某些安卓pad 左右和上方都要补充内容. fov 和 fovAxis 都要调整. 各种计算. 如果rect能解决 尽量用rect. 你那边 ios 和 安卓真机 也无法重现我遇到的问题吗? . |
正在验证安卓版本
…________________________________
From: finscn ***@***.***>
Sent: Monday, November 18, 2024 4:31:02 PM
To: cocos/cocos-engine ***@***.***>
Cc: hyde zhou ***@***.***>; Mention ***@***.***>
Subject: Re: [cocos/cocos-engine] [原生] 3D摄像机的 rect 属性在原生平台无效. (Issue #17863)
这么做主要是为了适配pad, 游戏是横屏的. 主要操控区域偏下, 所以ipad上要整体往下移动, 上面补充一些内容.
这个需求,可以通过改变fov做到。ipad屏幕接近4:3,所以fov(一般指y轴fov)需要更大些。 但最好还是要off center perspective projection matrix。
其实我们第一个方案用的就是 fov, 但是实际情况其实比我说的复杂, 比如 很多手机 其实左右也要补充内容, ipad是上面补充内容. 某些安卓pad 左右和上方都要补充内容. fov 和 fovAxis 都要调整. 各种计算.
最后结果总是会有一些差异 还有一些光照等. 所以最后想的是用 rect. 目前看来可能确实 off center perspective projection matrix 更好. 但是感觉这个实现起来有点复杂 要自定义好多 cocos的东西. 而且native部分我也不熟 不敢轻易碰.
如果rect能解决 尽量用rect.
你那边 ios 和 安卓真机 也无法重现我遇到的问题吗?
.
―
Reply to this email directly, view it on GitHub<#17863 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/ADIFVAAVS3WVTSM4LEWP5ID2BGQUNAVCNFSM6AAAAABR2MKLG2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIOBSGI3DINJUGI>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
|
@star-e 我用新管线也ok了, 非常感谢. 那你们还打算修复老管线的问题吗? 因为我们小游戏线上版本一直用的老管线. 担心切换到新管线会有其他新问题. |
老管线修复需要些时间,我们会修复这样明显问题的
…________________________________
From: finscn ***@***.***>
Sent: Monday, November 18, 2024 5:31:03 PM
To: cocos/cocos-engine ***@***.***>
Cc: hyde zhou ***@***.***>; Mention ***@***.***>
Subject: Re: [cocos/cocos-engine] [原生] 3D摄像机的 rect 属性在原生平台无效. (Issue #17863)
@star-e<https://github.com/star-e> 我用新管线也ok了, 非常感谢. 那你们还打算修复老管线的问题吗? 因为我们小游戏线上版本一直用的老管线. 担心切换到新管线会有其他新问题.
―
Reply to this email directly, view it on GitHub<#17863 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/ADIFVAHO7OMJ5DUISLOF5RL2BGXVPAVCNFSM6AAAAABR2MKLG2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIOBSGQYDONJWGU>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
|
#17875 |
谢谢! 必须加薪! |
测试了下老管线 , 也ok了. 这个问题应该可以close了. |
Cocos Creator version
3.8.4
System information
all
Issue description
在 小游戏 和 web中 设置 3d camera 的 rect 有效, 同样的代码 在 原生ios 和安卓平台 无效 (也不会报错)
Relevant error log output
No response
Steps to reproduce
如上
Minimal reproduction project
No response
The text was updated successfully, but these errors were encountered: