WebGL未在规范化坐标内绘制
WebGL not drawing within normalized coords?
我写了一个简单的WebGL页面(好吧,尽我所能简单),但不明白为什么标准化坐标不起作用。也就是说,我试图通过两个三角形绘制一个从(-0.5,-0.5)到(0.5,0.5)的正方形,但我得到了一个离开屏幕的大矩形。
我完全不确定自己做错了什么,所以我把它粘贴到jsFiddle:中
链接
注意我是如何正确定义vert和索引的(对吧?),我的着色器和片段程序也很简单。
为什么它画成一个奇怪的大屏幕外矩形
好吧,我终于得到了Freenode上#webgl中某个人的帮助:<canvas>
元素需要宽度和高度属性,而我通过CSS设置它们。显然,实际宽度和高度属性决定了OpenGL缓冲区的宽度和高度。
除了WebGL示例在画布标记上有width和height属性外,我在其他任何地方都找不到这篇文档。
与其他元素一样,显示的大小与实际大小是分开的。示例:
将4x4 JPG显示为4x4像素
<img src="some4x4pixel.jpg" />
以16x16像素显示4x4 JPG
<img src="some4x4pixel.jpg" width="16" height="16" />
显示16x16像素的4x4 JPG
<img src="some4x4pixel.jpg" style="width:16px; height:16px;"/>
显示一个4x4 JPG在任何大小的容器是
<img src="some4x4pixel.jpg" style="width:100%; height:100%;"/>
以300x150像素显示一个300x150象素的画布(默认大小)
<canvas></canvas>
以4x4像素显示4x4画布
<canvas width="4" height="4"></canvas>
显示16x16像素的4x4画布
<canvas width="4" height="4" style="width:16px; height:16px;"/></canvas>
显示一个4x4画布,无论其容器大小为
<canvas width="4" height="4" style="width:100%; height:100%;"/></canvas>
如果你在做3D,并使用大多数3D数学库中相当常见的透视函数,你通常希望将纵横比设置为显示大小,而不是实际大小。
// 45degrees, assumes math library uses radians
var fieldOfView = Math.PI / 4;
// Use the size the canvas is displayed, NOT the size it actually is.
var aspectRatio = canvas.clientWidth / canvas.clientHeight;
var zNear = 0.1;
var zFar = 1000;
var matrix = someMathLibrary.perspective(fieldOfView, aspectRatio, zNear, zFar, ...)
如果您希望画布的大小与显示的大小相同,请使用
canvas.width = canvas.clientWidth;
canvas.height = canvas.clientHeight;
不过请注意,WebGL画布不需要是您请求的大小,因为各种GPU都有大小限制。如果你想知道你实际得到的尺寸与你要求的尺寸,请检查
gl.drawingBufferWidth
gl.drawingBufferHeight
对于大多数3D应用程序使用的透视矩阵来说,画布的实际大小并没有那么重要。对于某些类型的效果或2D,这通常很重要。
之所以很难找到文档,是因为人们理所当然地知道CSS决定了所有元素的显示大小,而不管它们内容的实际大小。
https://www.google.com/webhp?sourceid=chrome-即时&ix=海&ie=UTF-8&离子=1#患者=psy ab&hl=en&site=webhp&source=hp&q=画布%20size%20css&pbx=1&oq=&aq=&aqi=&aql=&gs_sm=&gs_upl=&fp=f131b50fb368d7bf&ix=海&离子=1&bav=on.2,或.r.gc.r_pw.r.cp.,cf.osb&biw=1629&bih=931
- 如何在OpenLayers中获取动态绘制的多边形的坐标
- 如何在谷歌地图API中使用坐标数组绘制多边形
- 从网格视图行中获取坐标,以使用 Raphael.js 在画布上绘制
- 在没有坐标的情况下绘制的折线闪烁
- D3JS 图绘制在不正确的坐标处
- 谷歌地图绘制工具输出多边形坐标
- 谷歌地图API - 在数组中使用Lat Lng坐标绘制折线飞行路径
- 如何使用矢量作为坐标在画布上绘制对象
- 在画布上绘制经度/经度坐标
- 根据二维数组中的坐标在地图上绘制多边形
- 用鼠标点击HTML画布绘制图像,保存坐标但不提交
- 用坐标绘制大厅平面图
- WebGL未在规范化坐标内绘制
- 在D3.js中绘制具有指定坐标的网络
- MySql和PHP循环使用x,y坐标绘制正方形
- 通过读取 X,Y 坐标绘制正方形
- 如何移动绘制在圆周长上的X、Y坐标的起点
- 使用谷歌API在谷歌地图上绘制坐标
- 使用jQuery绘制坐标的方法
- 从XML文件动态绘制坐标,仅刷新标记