我有一个画布调整大小和gl.viewport同步的问题.
假设我从画布 300×300 canvas开始,并以相同大小(gl.vieport(0,300,300))的gl.viewport的初始化开始.
之后,在浏览器的控制台中,我做了我的测试:

> I’m changing size of my canvas,使用jquery,调用$(“#scene”).width(200).height(200)
> After this,i’m calling my resizeWindow function:

function resizeWindow(width,height){
    var ww = width === undefined? w.gl.viewportWidth : width;
    var h = height  === undefined? w.gl.viewportHeight : height;
    h = h <= 0? 1 : h;
    w.gl.viewport(0,ww,h);
    mat4.identity(projectionMatrix);
    mat4.perspective(45,ww / h,1,1000.0,projectionMatrix);
    mat4.identity(modelViewMatrix);
}

>将视口与所需尺寸同步的功能.

不幸的是,这次调用后,我的gl.viewport只占了我画布的一部分.
有人会告诉我出了什么问题吗?

解决方法

没有这样的事情是gl.viewportWidth或gl.viewportHeight

如果要设置透视矩阵,则应使用canvas.clientWidth和canvas.clientHeight作为透视输入.无论浏览器缩放画布大小,都可以给您正确的结果.如同使用CSS设置画布自动缩放比例

<canvas style="width: 100%; height:100%;"></canvas>

...

var width = canvas.clientHeight;
var height = Math.max(1,canvas.clientHeight);  // prevent divide by 0
mat4.perspective(45,width / height,1000,projectionMatrix);

至于视口.使用gl.drawingBufferWidth和gl.drawingBufferHeight.这是找到drawingBuffer的大小的正确方法

gl.viewport(0,gl.drawingBufferWidth,gl.drawingBufferHeight);

要清楚,这里有几件事情混在一起

> canvas.width,canvas.height =请求画布的drawingBuffer的大小
> gl.drawingBufferWidth,gl.drawingBufferHeight =你实际得到的大小.在99.99%的情况下,这将与canvas.width,canvas.height相同.
> canvas.clientWidth,canvas.clientHeight =浏览器正在显示画布的大小.

看到差异

<canvas width="10" height="20" style="width: 30px; height: 40px"></canvas>

要么

canvas.width = 10;
canvas.height = 20;
canvas.style.width = "30px";
canvas.style.height = "40px";

在这些情况下,canvas.width将为10,canvas.height将为20,canvas.clientWidth将为30,canvas.clientHeight将为40.通常将canvas.style.width和canvas.style.height设置为百分比浏览器将其缩放到适合其中包含的任何元素.

除此之外,还有你提出的两件事情

> viewport =通常你希望这是你的drawingBuffer的大小
>纵横比=通常你希望这是你的画布缩放的大小

给定这些定义,用于视口的宽度和高度通常与宽高比的宽度和高度不同.

Webgl gl.viewport更改的更多相关文章

  1. 基于HTML5 WebGL的3D机房的示例

    这篇文章主要介绍了基于HTML5 WebGL的3D机房的示例的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 有关HTML5页面在iPhoneX适配问题

    这篇文章主要介绍了有关HTML5页面在iPhoneX适配问题,需要的朋友可以参考下

  3. HTML5单页面手势滑屏切换原理分析

    H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,下面通过本文简单说一下其实现原理和主要思路,感兴趣的朋友一起看看吧

  4. Html5 页面适配iPhoneX(就是那么简单)

    这篇文章主要介绍了Html5 页面适配iPhoneX(就是那么简单),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. HTML5 移动页面自适应手机屏幕四类方法总结

    这篇文章主要介绍了HTML5 移动页面自适应手机屏幕四类方法总结,非常具有实用价值,需要的朋友可以参考下

  6. H5页面适配iPhoneX(就是那么简单)

    这篇文章主要介绍了H5页面适配iPhoneX(就是那么简单),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. ios – UIWebView – 不会在轮换更改时调整内容大小?

    所以我有一个显示静态HTML内容的UIWebView.当我以纵向方式启动ViewController并切换到横向时,它会正确调整内容的大小.但是,当我以横向方式启动页面并切换到纵向时,它不会调整我的内容大小,并且需要滚动才能查看所有内容.这是一个错误吗?是否有强制调整UIWebView内容大小的解决方案?解决方法你有2个选择:将其添加到html文件的HEAD部分:或者在方向改变时调用[myWebViewreload]

  8. android – 三星更新后的错误Monogame |将viewport.height检测为设备宽度

    我现在可以确认这是因为三星更新我制作了世界上最简单的Android应用程序来测试它,只是得到一个带有背景图像“bg”的主机和一个spritefront打印出viewport.Width和viewport.Height.这是代码:从VS部署时,一切都很好,viewport.width是实际的设备宽度,viewport.height是实际的设备高度.但是当试图从三星galaxyS4主动部署时,突然间Viewport.Height是设备宽度而另一种方式,这使得背景图片只是覆盖了一点的屏幕.拍了照片来表明:解决方

  9. 在Android Webview中使用元视口宽度

    我想使用viewport标签将html内容放入WebView中.这似乎在Chrome浏览器中运行良好,但无法扩展以适应WebView.我做了一个简化的测试活动:任何人都可以解释原因,或建议修复?解决方法好的,你必须使用:但是,如果你像这样设置user-scalable=0,它会中断:

  10. Android:如何排除不支持webGL的webview的设备,即在gpu_blacklist上

    我有一个包含webview的应用程序,在硬件加速不起作用的设备上运行得很差,例如一些三星S4的运行5.0.1我从这里知道:SupportingWebGLonAndroid5’sWebView我可以使用人行横道,忽略gpu黑名单,以便顺利运行.但是,这个图书馆在应用程序中导致其他问题,黑名单是否有原因?我想做的是排除webgl因为任何原因不起作用的设备.我看过这里:https://developer

随机推荐

  1. 微信小程序canvas实现水平、垂直居中效果

    这篇文章主要介绍了小程序中canvas实现水平、垂直居中效果,本文图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 使用HTML5做的导航条详细步骤

    这篇文章主要介绍了用HTML5做的导航条详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. H5最强接口之canvas实现动态图形功能

    这篇文章主要介绍了H5最强接口之canvas实现动态图形功能,需要的朋友可以参考下

  4. Canvas高级路径操作之拖拽对象的实现

    这篇文章主要介绍了Canvas高级路径操作之拖拽对象的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. html5视频自动横过来自适应页面且点击播放功能的实现

    这篇文章主要介绍了h5视频自动横过来自适应页面且点击播放,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. 详解HTML5中的picture元素响应式处理图片

    这篇文章主要介绍了详解HTML5中的picture元素响应式处理图片,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. canvas像素点操作之视频绿幕抠图

    这篇文章主要介绍了canvas像素点操作之视频绿幕抠图的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. html5利用canvas实现颜色容差抠图功能

    这篇文章主要介绍了html5利用canvas实现颜色容差抠图功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  9. canvas绘制视频封面的方法

    这篇文章主要介绍了canvas绘制视频封面的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. HTML5拖拽功能实现的拼图游戏

    本文通过实例代码给大家介绍了HTML5拖拽功能实现的拼图游戏,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧

返回
顶部