- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 Three.js Rev 82,我的实验飞行模拟器应用程序显示了此显示(根据需要显示并支持对象拾取):-
当我将应用程序更改为使用 Three.js Rev 89 时,执行错误为零(令人满意),但它产生了以下显示(这是错误的,因为视口(viewport)错位以及随后的对象选取失败):-
该应用程序使用五 (5) 个矩形视口(viewport)来呈现图形数据:-(1) 一个覆盖整个屏幕的底层视口(viewport),带有平坦的黑色和蓝色矩形;(3) 三个中层视口(viewport)从左到右排列,显示外部世界的 View ;(1) 一个带有文本框、键盘和按钮的叠加“控制面板”视口(viewport)。
从 Rev 82 到 Rev 89,中层和上层视口(viewport)的垂直位置发生了变化。例如,三个“中层”视口(viewport)已从屏幕的上部移动到下部。 “控制面板”视口(viewport)(应位于屏幕底部)已移至屏幕顶部附近。
我看过Migration Summary但看不到任何相关的变化。看着Renderer documentation我没有发现任何明显的东西 - 但其中没有修订历史。
<小时/>我正在使用的代码(定义、更新和渲染视口(viewport))如下:-
function F_Render()
{
//... Discover the current window dimensions (usable)
var WINDOW_USABLE_PIXELS_WIDTH = window.innerWidth;
var WINDOW_USABLE_PIXELS_HEIGHT = window.innerHeight;
var Fudge = 0;
var FIXED_DOXELS_WIDTH = 1024;
var FIXED_DOXELS_HEIGHT = 576;
var elastic_viewports = false;
if (elastic_viewports)
{
var SLATE_DOXELS_WIDTH = WINDOW_USABLE_PIXELS_WIDTH - Fudge;
var SLATE_DOXELS_HEIGHT = WINDOW_USABLE_PIXELS_HEIGHT - Fudge;
}
else
{
var SLATE_DOXELS_WIDTH = FIXED_DOXELS_WIDTH -Fudge;
var SLATE_DOXELS_HEIGHT = FIXED_DOXELS_HEIGHT -Fudge;
}
//**** NB SCREEN COORDS ORIGIN IS TOP LEFT CORNER so Y values increase DOWNWARDS *****
//**** BUT RENDERER VIEWPORT COORDS INCREASE FROM BOTTOM LEFT
var numMidPanels = 3;
var mar = Math.floor( SLATE_DOXELS_HEIGHT/16 ); //...careful, changing this has knock-on effects!
midPanelX1min = mar;
var fudge = SLATE_DOXELS_WIDTH*0.06;
var fudge = 0;
//...gives a common width value to be used by all mid panels
var midPanelWidth = fudge +(1/numMidPanels) * (SLATE_DOXELS_WIDTH - ((numMidPanels+1)* mar)) ;
var midPanelAverageWidth = fudge +(1/numMidPanels) * (SLATE_DOXELS_WIDTH - ((numMidPanels+1)* mar)) ;
var midPanelX1_Width = midPanelAverageWidth *2/3;
var midPanelX2_Width = midPanelAverageWidth *5/3;
var midPanelX3_Width = midPanelAverageWidth *2/3;
//---
var bottomPanelXmin = mar;
var bottomPanelYmin = mar;
var bottomPanelHeight = (1/3)* (SLATE_DOXELS_HEIGHT - (3*mar)); //...bottom third of screen height
var bottomPanelWidth = (SLATE_DOXELS_WIDTH - (2*mar));
var midPanelHeight = (2/3)* (SLATE_DOXELS_HEIGHT - (3*mar));
midPanelX2min = mar + midPanelWidth + mar ;
midPanelX3min = mar + midPanelWidth + mar + midPanelWidth + mar;
midPanelX2min = mar + midPanelX1_Width + mar ;
midPanelX3min = mar + midPanelX1_Width + mar + midPanelX2_Width + mar;
midPanelYmin = mar + bottomPanelHeight + mar;
midPanelYmax = mar + bottomPanelHeight + mar + midPanelHeight;
//... set ASPECT RATIOS
//... BASE LAYER Scene111
var BaseLayer_AspectRatio = SLATE_DOXELS_WIDTH/SLATE_DOXELS_HEIGHT;
//... MIDDLE LAYER Scene222 Middle Panels
var MidPanelX1_AspectRatio = midPanelX1_Width/midPanelHeight;
var MidPanelX2_AspectRatio = midPanelX2_Width/midPanelHeight;
var MidPanelX3_AspectRatio = midPanelX3_Width/midPanelHeight;
//... TOP LAYER
var BottomPanel_AspectRatio = bottomPanelWidth/bottomPanelHeight;
//------------------------------------------------------------------------------------------
//... do CAMERA UPDATES if required due to recent change
if ( scene111camera01._SW_needsUpdate == true)
{
scene111camera01.aspect = BaseLayer_AspectRatio;
scene111camera01.updateProjectionMatrix(); //...is this really neccy?
scene111camera01._SW_needsUpdate = false;
}
//... MIDDLE LAYER Scene222 Middle Panels
if ( scene222camera02._SW_needsUpdate == true)
{
scene222camera02.aspect = MidPanelX1_AspectRatio;
scene222camera02.updateProjectionMatrix();
scene222camera02._SW_needsUpdate = false;
}
if ( scene222camera03._SW_needsUpdate == true)
{
scene222camera03.aspect = MidPanelX2_AspectRatio;
scene222camera03.updateProjectionMatrix();
scene222camera03._SW_needsUpdate = false;
}
if ( scene222camera04._SW_needsUpdate == true)
{
scene222camera04.aspect = MidPanelX3_AspectRatio;
scene222camera04.updateProjectionMatrix();
scene222camera04._SW_needsUpdate = false;
}
//... TOP LAYER (DashBoard) Scene333
if ( scene333camera05._SW_needsUpdate == true)
{
scene333camera05.aspect = BottomPanel_AspectRatio;
scene333camera05.updateProjectionMatrix();
scene333camera05._SW_needsUpdate = false;
}
//==========================================================================================================
//... Clear the entire raster area
var Control_Panel_Num = 0;
Renderer_ZERO.setViewport( 0, 0, SLATE_DOXELS_WIDTH, SLATE_DOXELS_HEIGHT );
Renderer_ZERO.clear();
//=========================================================================================================
//... BASE LAYER, scene111 ... Single Panel (viewport)
Renderer_ZERO.setViewport( 0, 0, SLATE_DOXELS_WIDTH, SLATE_DOXELS_HEIGHT );
Renderer_ZERO.render( scene111, scene111camera01 );
Control_Panel_Num = Control_Panel_Num+1;
ObjectPickingActive=true;
xxx = SOW_F_sim_Update_Panel_Data ( Control_Panel_Num,"BasePlane",0, 0, SLATE_DOXELS_WIDTH, SLATE_DOXELS_HEIGHT , ObjectPickingActive, scene111, scene111camera01 );
//===========================================================================================================
//... MIDDLE LAYER, scene222 ... three panels (view-ports)
Renderer_ZERO.clearDepth();
//... MIDDLE LAYER, LEFT PANEL
//showVP_scene222camera02 = true; //...now set elsewhere
if (showVP_scene222camera02 == true)
{
Renderer_ZERO.setViewport( midPanelX1min, midPanelYmin, midPanelX1_Width , midPanelHeight );
Renderer_ZERO.render( scene222, scene222camera02 );
Control_Panel_Num = Control_Panel_Num+1;
ObjectPickingActive=true;
xxx = SOW_F_sim_Update_Panel_Data (Control_Panel_Num,"Middle_Left",midPanelX1min, midPanelYmin, midPanelX1_Width , midPanelHeight, ObjectPickingActive, scene222, scene222camera02 );
}
//... MIDDLE LAYER, CENTRE PANEL
if (showVP_scene222camera03 == true)
{
var midPanelY2min = midPanelYmin //-150 //*** JUST FOR TESTING ***
Renderer_ZERO.setViewport( midPanelX2min, midPanelY2min, midPanelX2_Width, midPanelHeight );
Renderer_ZERO.render( scene222, scene222camera03 );
Control_Panel_Num = Control_Panel_Num+1;
ObjectPickingActive=true;
xxx = SOW_F_sim_Update_Panel_Data (Control_Panel_Num,"Middle_Centre",midPanelX2min, midPanelY2min, midPanelX2_Width, midPanelHeight, ObjectPickingActive, scene222, scene222camera03 );
}
if (showVP_scene222camera04 == true)
{
//... MIDDLE LAYER, RIGHT PANEL
Renderer_ZERO.setViewport( midPanelX3min, midPanelYmin, midPanelX3_Width, midPanelHeight );
Renderer_ZERO.render( scene222, scene222camera04 );
Control_Panel_Num = Control_Panel_Num+1;
ObjectPickingActive=true;
xxx = SOW_F_sim_Update_Panel_Data (Control_Panel_Num,"Middle_Right",midPanelX3min, midPanelYmin, midPanelX3_Width, midPanelHeight, ObjectPickingActive, scene222, scene222camera04 );
}
//================================================================================================
//... TOP LAYER Scene333
//... THIS LAYER CONTAINS BUTTONS WHICH OVERPLOT MID LAYER
//... (Multi-renderers only: display stack sequence controlled by html div declaration sequence).
//... UPPER LAYER (C)
// (DASHBOARD) ...BOTTOM STRIP
//TEST
//bottomPanelXmin
//bottomPanelYmin=100;
//bottomPanelWidth
//bottomPanelHeight= 300 ;
//END TEST
//TEST makes bottom panel viewport overlap upwards over the middle panels just to demo that we can do this
// and thus we can stick objects in a high viewport which display in front of objects from a lower viewport
// but NOTE WELL this only works reliably when VPs are from different scenes/renderers
// otherwise conflicts can occur.
var Fudged_bottomPanelHeight=bottomPanelHeight+40;
Renderer_ZERO.clearDepth();
Renderer_ZERO.setViewport( bottomPanelXmin, bottomPanelYmin, bottomPanelWidth, Fudged_bottomPanelHeight );
Renderer_ZERO.render( scene333, scene333camera05 );
Control_Panel_Num = Control_Panel_Num+1;
ObjectPickingActive=true;
xxx = SOW_F_sim_Update_Panel_Data (Control_Panel_Num,"Bottom_Strip",bottomPanelXmin, bottomPanelYmin, bottomPanelWidth, Fudged_bottomPanelHeight, ObjectPickingActive, scene333, scene333camera05 );
} //... END OF F_Render
<小时/>
如果有人能建议 Three.js 中的哪些更改可能导致此问题,我将不胜感激?
最佳答案
从 r.86 开始,WebGLRenderer.setViewport()
和 WebGLRenderer.setScissor()
假定坐标系 ( 0,0 ) 位于左上角。以前,它位于左下角。
三.js r.89
关于javascript - Three.js:从 Rev 82 到 Rev 89 的视口(viewport)错位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48392899/
我想检测鼠标何时离开顶部的视口(viewport)(可以说是向北)。我在网上搜了下How can I detect when the mouse leaves the window? .是一个好的开始
我有一个 HTML 元素,宽 1000 像素,高 850 像素(它实际上是一个 iFrame,在 canvas 标签上包含一个 HTML5 游戏,但我希望这不会有影响)。 我希望元素在平板电脑上呈现,
我正在创建一个 2D 引擎,我想实现对接,所以我需要创建一个视口(viewport)并将屏幕渲染为纹理。 为了渲染视口(viewport),我将帧缓冲区保存到一个 FrameBufferObject
大多数移动页面都提供元视口(viewport)尺寸,例如 出于 iphone 向后兼容的原因,这将在宽度上模拟 320px... 但是当我通过 javascript 检查时 window.screen
我有一个客户提供的宽度为 1440 像素的网站。客户要求我使用以下方法将视口(viewport)设置为 1440 像素对于桌面浏览器,小于 1440 像素的屏幕不显示滚动条。 它确实适用于移动设备、i
我刚刚读了一篇 nice article on viewport这给我留下了几个关于移动设备上的视觉视口(viewport)与布局视口(viewport)的问题。 the width and the
layout viewport和visual viewport的解释可以找到here . 我已阅读 here和 here那个应该使用 如果想针对移动设备优化网页。 我想了解这对横向模式下的 ipho
我想用javascript获取视口(viewport)宽度。但不是常见的虚拟视口(viewport)。我需要逻辑硬件视口(viewport),在我的情况下,它不是设置视口(viewport)元标记的选
我有一个 menu 元素,如果 menu 元素变得在视口(viewport)之外,我想固定到浏览器视口(viewport)的顶部由于滚动。从概念上讲,我的网页看起来类似于下面的示例 HTML,其中菜单
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this qu
我只包含了“main”的 HTML 代码,因为这是我希望能够通过媒体查询控制的部分。我希望内容只能在小于 480 像素的视口(viewport)上查看,但浏览器似乎隐藏了所有视口(viewport)尺
我不知道如何描述这个,所以最好的办法是链接一个例子:http://www.pascalvangemert.nl/#/profile 无论这个人对侧边栏菜单做了什么都很棒,我很想复制它。我试过检查,但我
我遇到了一页末尾有空白的问题。据我所知,没有元素占据空间。仅当视口(viewport)设置为特定宽度时才会出现该空间。例如,它出现在宽度 940 和 400 左右,但不是 550 或非常宽。 起初我以
iPhone/iPad 等移动设备的视觉视口(viewport)和布局视口(viewport)有什么区别? 网上查了很多资料,还是不清楚。 最佳答案 视觉视口(viewport)是当前显示在屏幕上的页
我正在使用这个元标记来设置移动浏览器上的视口(viewport)大小: 和这个 css 以确保较大的图像不会导致在较小的视口(viewport)上滚动: img { max-width: 95%;
这是针对平板电脑浏览器的,它使用相对于视口(viewport)宽度/高度的尺寸。为简单起见,假设横向。 我在一个全屏容器中有两个 div,就像提供的图像一样。他们有 position:absolute
我在 opengl 中创建了一个迷宫,并且正在尝试创建一个小 map 。为此,我想到在视口(viewport)内创建一个视口(viewport)。我有三种方法,一种用于创建墙壁,另一种用于创建地板,另
所以我有 2 个屏幕:一个级别选择屏幕,使用分辨率为 720 x 405 的 FitViewport,然后是一个游戏屏幕,使用分辨率为 480 x 270 的 FillViewport,按每米像素数
无论视口(viewport)的宽度如何,我都有一个图像幻灯片,我试图将其置于视口(viewport)的中心。如果视口(viewport)比图像宽,使用 margin: auto; 很容易实现,但是,当
我有一个元素,该元素具有从屏幕边缘底部弹出并循环向下弹出(虽然不是完全向下)的动画。下面的代码对此非常有用。但是,有一个问题。当浏览器全屏显示时,百分比占旧视口(viewport)大小而不是新视口(v
我是一名优秀的程序员,十分优秀!