Baseline Widely available
WebGL API ã® WebGLRenderingContext.vertexAttribPointer()
ã¡ã½ããã¯ãç¾å¨ gl.ARRAY_BUFFER
ã«çµåããããããã¡ã¼ããç¾å¨ã®é ç¹ãããã¡ã¼ãªãã¸ã§ã¯ãã®ä¸è¬çãªé ç¹å±æ§ã«çµåãã¦ããã®ã¬ã¤ã¢ã¦ããæå®ãã¾ãã
void gl.vertexAttribPointer(index, size, type, normalized, stride, offset);弿°
index
é ç¹å±æ§ã®å ´æãæå®ãã GLuint
ããã®å ´æã夿´ããã¾ãã
size
é ç¹å±æ§ãããã®è¦ç´ æ°ãæå®ãã GLint
ã1, 2, 3 ã, 4 ã§ãªããã°ããã¾ããã
type
é
åã®åè¦ç´ ã®ãã¼ã¿åãæå®ãã GLenum
ã以ä¸ã®å¤ãåããã¨ãã§ãã¾ãã
gl.BYTE
: 符å·ä»ã 8 ãããæ´æ°ãå¤ã¯ [-128, 127]gl.SHORT
: 符å·ä»ã 16 ãããæ´æ°ãå¤ã¯ [-32768, 32767]gl.UNSIGNED_BYTE
: 符å·ç¡ã 8 ãããæ´æ°ãå¤ã¯ [0, 255]gl.UNSIGNED_SHORT
: 符å·ç¡ã 16 ãããæ´æ°ãå¤ã¯ [0, 65535]gl.FLOAT
: 32 ããã IEEE æµ®åå°æ°ç¹æ°gl.HALF_FLOAT
: 16 ããã IEEE æµ®åå°æ°ç¹æ°normalized
æ´æ°ãã¼ã¿ãæµ®åå°æ°ç¹æ°ã¸å夿ããã¨ããå³å¯ãªç¯å²ã¸æ£è¦åãããã©ããæå®ãã GLboolean
ã
gl.BYTE
㨠gl.SHORT
ã®åã§ã¯ãtrue ã®å ´åã« [-1, 1] ã®å¤ã¸æ£è¦åããã¾ããgl.UNSIGNED_BYTE
㨠gl.UNSIGNED_SHORT
ã®åã§ã¯ãtrue ã®å ´åã« [0, 1] ã®å¤ã¸æ£è¦åããã¾ããgl.FLOAT
㨠gl.HALF_FLOAT
ã®åã§ã¯ããã®å¼æ°ã«å¹æã¯ããã¾ãããstride
é£ç¶ããé ç¹å±æ§ã®å§ç«¯ã©ããã®éã«ããããªãã»ããæ°ããã¤ãåä½ã§æå®ãã GLsizei
ã255 ãã大ããã§ãã¾ãããstride ã 0 ã®å ´åã屿§ã¯ãã£ã¡ãè©°ãããã¦ããã¨æ³å®ããã¾ããããªãã¡ãã¢ããªãã¥ã¼ãã¯ã¤ã³ã¿ã¼ãªã¼ãããã¦ããããå屿§ã¯å¥ãããããã¯ã«ãããç¾å¨ã®é ç¹å±æ§ã®ããé£ã«æ¬¡ã®é ç¹å±æ§ãç¶ãã¾ãã
offset
é ç¹å±æ§é
åã®æåã®è¦ç´ ã®ãªãã»ããããã¤ãåä½ã§æå®ãã GLintptr
ã type
ã®ãã¤ãé·ã®åæ°ã§ãªããã°ããã¾ããã
ããã¾ããã
ä¾å¤offset
ãè² æ°ã®å ´åãgl.INVALID_VALUE
ã¨ã©ã¼ãã¹ãã¼ããã¾ããstride
㨠offset
ããã¼ã¿åã®ãµã¤ãºã®åæ°ã§ãªãå ´åãgl.INVALID_OPERATION
ã¨ã©ã¼ãã¹ãã¼ããã¾ããgl.INVALID_OPERATION
ã¨ã©ã¼ãã¹ãã¼ããã¾ããvec4
ã®ä»£ããã« uvec4
ã ivec4
ã§) å®ç¾©ããã¦ããå ´åãgl.INVALID_OPERATION
ã¨ã©ã¼ãã¹ãã¼ããã¾ãã3D ã¸ãªã¡ããªã¼ãã¬ã³ããªã³ã°ãããã¨ãã¾ãããããã®ããã«ã¯é ç¹ã·ã§ã¼ãã¼ã«é ç¹ãä¾çµ¦ããå¿
è¦ãããã¾ããåé ç¹ã«ã¯ãä½ç½®ãæ³ç·ãã¯ãã«ããã¯ã¹ãã£ã¼åº§æ¨ãªã©ã ArrayBuffer
ã§å®ç¾©ãããé ç¹ãããã¡ã¼ãªãã¸ã§ã¯ã (VBO) ã«æä¾ãããããã¤ãã®å±æ§ãããã¾ããã¾ãã使ç¨ããã WebGLBuffer
ã gl.ARRAY_BUFFER
ã«çµåããå¿
è¦ãããã¾ããããããããã® gl.vertexAttribPointer()
ã¡ã½ããã§ã屿§ãæ ¼ç´ããã¦ããé åºããããã®ä¸ã®ãã¼ã¿åãæå®ãã¾ããå ãã¦ãã¹ãã©ã¤ããå«ããå¿
è¦ãããã¾ããããã¯ãä¸ã¤ã®é ç¹ã§ã®ãã¹ã¦ã®å±æ§ã®ç·ãã¤ãé·ã§ããããã«ã gl.enableVertexAttribArray()
ãå¼ãã§ãWebGL ã«ãã®å±æ§ãé
åãããã¡ã¼ã®å¤ã§åããããã«ç¥ããã¾ãã
大æµã¯ãããªãã® 3D ã¸ãªã¡ããªã¼ã¯ãã§ã«å³æ ¼ãªãã¤ããªå½¢å¼ã«ãªã£ã¦ããã®ã§ãã¡ã¢ãªã¼ã¬ã¤ã¢ã¦ããææ¡ããããã«ã¯ãã®ç¹å®ã®ãã©ã¼ãããã®ä»æ§ãèªãå¿
è¦ãããã¾ããããããèªåã®ãã©ã¼ããããè¨è¨ãã¦ããããã¸ãªã¡ããªã¼ãããã¹ããã¡ã¤ã« (Wavefront .obj files ãªã©) ã«ãã£ã¦å®è¡æã« ArrayBuffer
ã¸å¤æããå¿
è¦ãããå ´åãã©ã®ããã«ã¡ã¢ãªæ§ç¯ãããã¯èªç±ã«é¸æã§ãã¾ããããé«ãããã©ã¼ãã³ã¹ã®ããã«ã¯ã屿§ã ã¤ã³ã¿ã¼ãªã¼ã ãã¦ã¸ãªã¡ããªãæ£ç¢ºã«è¡¨ãæå°ã®ãã¼ã¿åã使ç¨ãã¦ãã ããã
é ç¹å±æ§ã®æå¤§æ°ã¯ã°ã©ãã£ãã¯ã«ã¼ãã«ä¾åãã¦ãããgl.getParameter(gl.MAX_VERTEX_ATTRIBS)
ãå¼ã¶ã¨ãã®å¤ãåå¾ã§ãã¾ãããã¤ã¨ã³ãã°ã©ãã£ãã¯ã¹ã«ã¼ãã§ã¯ãæå¤§å¤ã¯ 16 ã§ãããã¼ã¨ã³ãã°ã©ãã£ãã¯ã¹ã«ã¼ãã§ã¯ãå¤ã¯ä½ããªãã¾ãã
å屿§ã«ã¯ããã®ä½ç½®ãæå®ããå¿ è¦ãããã¾ããããã¯é åãããã¡ã¼å ã®å ´æã¨ã¯ç¡é¢ä¿ãªã®ã§ãé åãããã¡ã¼ã¸ã®æ ¼ç´æ¹æ³ã¨ã¯ç°ãªãé åºã§éä¿¡ã§ãã¾ãã以ä¸ã® 2 ã¤ã®é¸æè¢ãããã¾ãã
gl.bindAttribLocation()
ãå¼ã³åºãã¦ãé ç¹ã·ã§ã¼ãã¼ã®ååä»ã屿§ãã使ç¨ããã¤ã³ããã¯ã¹ã«æ¥ç¶ãã¾ãã ãã㯠gl.linkProgram()
ãå¼ã¶åã«å®äºããªããã°ãªãã¾ããããããããåãã¤ã³ããã¯ã¹ã gl.vertexAttribPointer()
ã«ä¸ãã¾ããgl.getAttribLocation()
ãå¼ãã§ã¤ã³ããã¯ã¹ãæ¢ãå¿
è¦ãããã¾ããããããããã®ã¤ã³ããã¯ã¹ã gl.vertexAttribPointer()
ã«ä¸ãã¾ãã WebGL 2 ã使ç¨ãã¦ããå ´åããã¼ããã¯ã¹ã·ã§ã¼ãã¼å
ã§èªèº«ã®ã¤ã³ããã¯ã¹ãæå®ããã°ã©ãã£ãã¯ã«ã¼ãã«ä½¿ç¨ãããæ¢å®å¤ã䏿¸ããããã¨ãã§ãã¾ããä¾ãã°ãlayout(location = 3) in vec4 position;
㯠"position"
屿§ãã¤ã³ããã¯ã¹ 3 ã«è¨å®ãã¾ããArrayBuffer
ã¯æ´æ°ã¨æµ®åå°æ°ç¹æ°ã®ä¸¡æ¹ã§åãããã¨ãã§ãã¾ããã屿§ã¯é ç¹ã·ã§ã¼ãã¼ã«éä¿¡ãããã¨å¸¸ã«æµ®åå°æ°ç¹æ°ã«å¤æããã¾ããé ç¹ã·ã§ã¼ãã¼ã³ã¼ãã§æ´æ°ã使ç¨ããå¿
è¦ãããå ´åã¯ãé ç¹ã·ã§ã¼ãã¼ã§ ((int) floatNumber
ã®ããã«) æµ®åå°æ°ç¹æ°ãæ´æ°ã«åå¤æãæ»ããã¨ãã§ãã¾ããã¾ãã¯ãWebGL 2 ã§ã¯gl.vertexAttribIPointer()
ã使ç¨ã§ãã¾ãã
ãã¼ããã¯ã¹ã·ã§ã¼ãã¼ã³ã¼ãã¯ããã¤ãã®å±æ§ãå«ã¿ã¾ãããå屿§ã®å¤ãæå®ããå¿
è¦ã¯ããã¾ããã代ããã«ãå
¨ã¦ã®é ç¹ã«åä¸ã®æ¢å®ã®å¤ãä¸ãããã¨ãã§ãã¾ãã
ãå¼ãã§ WebGL ã«æ¢å®ã®å¤ã使ãããã«ç¥ããããã¨ãã§ãã¾ããgl.disableVertexAttribArray()
gl.enableVertexAttribArray()
ãå¼ã¶ã¨é
åãããã¡ã¼ããå¤ãèªã¿åºãã¾ãããã®é
åãããã¡ã¼ã¯ gl.vertexAttribPointer()
ã§æå®ãã¾ãã
åæ§ã«ãä¾ãã°ãã¼ããã¯ã¹ã·ã§ã¼ãã¼ã 4 è¦ç´ 屿§ã® vec4
ãäºæãã¦ããã®ã« gl.vertexAttribPointer()
å¼ã³åºãã§ size
ã 2
ã«ã»ããããå ´åãWebGL ã¯æåã® 2 ã¤ã®è¦ç´ ã¯é
åãããã¡ã¼ãåºã«ã»ãããã¦ã3 çªç®ã¨ 4 çªç®ã®å¤ã¯æ¢å®å¤ããåããã¾ãã
æ¢å®å¤ã¯ vec4(0.0, 0.0, 0.0, 1.0)
ã§ããã
ãå¼ã¶ãã¨ã§ç°ãªãæ¢å®å¤ãæå®ãããã¨ãã§ãã¾ããgl.vertexAttrib[1234]f[v]()
ä¾ãã°ãé ç¹ã·ã§ã¼ãã¼ãä½ç½®ã¨è²ã®å±æ§ã使ç¨ãã¦ããã¨ãã¾ããã»ã¨ãã©ã®ã¡ãã·ã¥ã¯é ç¹ãã¨ã®ã¬ãã«ã§æå®ãããè²ãæã£ã¦ãã¾ãããããã¤ãã®ã¡ãã·ã¥ã¯ã¦ããã©ã¼ã ã«ããã·ã§ã¼ãã£ã³ã°ã§ãããããã£ãã¡ãã·ã¥ã§ã¯ãåé ç¹ã«åãè²ãé
åãããã¡ã«å
¥ããå¿
è¦ã¯ããã¾ãããä¸å®ã®è²ãè¨å®ããã®ã« gl.vertexAttrib4fv()
ã使ç¨ã§ãã¾ãã
gl.getVertexAttrib()
ã gl.getVertexAttribOffset()
ã§ç¾å¨ã®å±æ§ã®å¼æ°ã§ããããã¼ã¿åã屿§ãæ£è¦åããããã©ãããªã©ãåå¾ã§ãã¾ãããããã® WebGL 颿°ã¯ããã©ã¼ãã³ã¹ãé
ããããJavaScript ã¢ããªã±ã¼ã·ã§ã³å
ã«ç¶æ
ãä¿åããã»ããããã§ãããããããããããã®é¢æ°ã¯ãã¢ããªã±ã¼ã·ã§ã³ã³ã¼ãã«è§¦ãããã¨ãªã WebGL ã³ã³ããã¹ãããããã°ããã®ã«æé©ã§ãã
ãã®ä¾ã¯ãé ç¹å±æ§ãã·ã§ã¼ãã¼ããã°ã©ã ã«éä¿¡ããæ¹æ³ã示ãã¦ãã¾ããåé ç¹ã®å±æ§ã 1 é ç¹ããã 20 ãã¤ãã®é·ãã§ã¤ã³ã¿ã¼ãªã¼ãããã¦æ ¼ç´ããã¦ããæ¶ç©ºã®ãã¼ã¿æ§é ã使ç¨ãã¾ãã
ä¾ã¨ãã¦ã以ä¸ã®ãããªé ç¹ã®ã¨ãã
{
"position": [1.0, 2.0, 1.5],
"normal": [1.0, 0.0, 0.0],
"texCoord": [0.5, 0.25]
}
以ä¸ã®ããã«é åãããã¡ã¼ã«æ ¼ç´ããã¾ãã
00 00 80 3F 00 00 00 40 00 00 0C 3F 7F 00 00 00 7F FF 3F FF é åãããã¡ã¼ã®ä½æã¾ããDataView
ãç¨ãã JSON ãã¼ã¿ããåçã«é
åãããã¡ã¼ã使ãã¾ããtrue
ã®ç¨æ³ã«æ³¨æãã¦ãã ãããWebGL ã¯ç§éã®ãã¼ã¿ããªãã«ã¨ã³ãã£ã¢ã³ã§ãããã¨ãäºæãã¦ãã¾ãã
//ã¸ãªã¡ããªã¼ã fetch() 㨠Response.json() ã§èªã¿è¾¼ã
const response = await fetch("assets/geometry.json");
const vertices = await response.json();
//é
åãããã¡ã¼ã使
const buffer = new ArrayBuffer(20 * vertices.length);
//é
åãããã¡ã¼ãåãã
const dv = new DataView(buffer);
for (let i = 0; i < vertices.length; i++) {
dv.setFloat32(20 * i, vertices[i].position[0], true);
dv.setFloat32(20 * i + 4, vertices[i].position[1], true);
dv.setFloat32(20 * i + 8, vertices[i].position[2], true);
dv.setInt8(20 * i + 12, vertices[i].normal[0] * 0x7f);
dv.setInt8(20 * i + 13, vertices[i].normal[1] * 0x7f);
dv.setInt8(20 * i + 14, vertices[i].normal[2] * 0x7f);
dv.setInt8(20 * i + 15, 0);
dv.setUint16(20 * i + 16, vertices[i].texCoord[0] * 0xffff, true);
dv.setUint16(20 * i + 18, vertices[i].texCoord[1] * 0xffff, true);
}
ããé«ãããã©ã¼ãã³ã¹ã®ããã«ããµã¼ãã¼å´ã§äºåã« JSON ãã ArrayBuffer ã¸ã®å¤æãè¡ããã¨ãã§ãã¾ãã以ä¸ã®ããã«ãNode.js ã§ããããããã¤ããªãã¡ã¤ã«ããã¼ããããããé åãããã¡ã¼ã¨ãã¦è§£éãããã¨ãã§ãã¾ãã
const response = await fetch("assets/geometry.bin");
const buffer = await response.arrayBuffer();
WebGL ã§é
åãããã¡ã¼ã使ã
ã¾ããæ°ããé ç¹ãããã¡ã¼ãªãã¸ã§ã¯ã (VBO) ã使ããé åãããã¡ã¼ãä¸ãã¾ãã
//é
åãããã¡ã¼ãé ç¹ãããã¡ã¼ãªãã¸ã§ã¯ãã«çµåãã
const vbo = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
gl.bufferData(gl.ARRAY_BUFFER, buffer, gl.STATIC_DRAW);
ãããããã¤ã³ããã¯ã¹ãèªåã§è¨å®ãããã¨ã§ãé åãããã¡ã¼ã®ã¡ã¢ãªã¼ã¬ã¤ã¢ã¦ããæå®ãã¾ãã
//ãããã¡ã¼ã®ã¬ã¤ã¢ã¦ãã«ã¤ãã¦è¨è¿°ãã¾ã
//1. ä½ç½®ãæ£è¦åããªã
gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 20, 0);
gl.enableVertexAttribArray(0);
//2. æ³ç·ãã¯ãã«ã[-1, 1] ã«æ£è¦å
gl.vertexAttribPointer(1, 4, gl.BYTE, true, 20, 12);
gl.enableVertexAttribArray(1);
//3. ãã¯ã¹ãã£åº§æ¨ã[0, 1] ã«æ£è¦å
gl.vertexAttribPointer(2, 2, gl.UNSIGNED_SHORT, true, 20, 16);
gl.enableVertexAttribArray(2);
//é ç¹ã·ã§ã¼ãã¼å
ã®å±æ§ãåãã¤ã³ããã¯ã¹ã«è¨å®ãã¾ã
gl.bindAttribLocation(shaderProgram, 0, "position");
gl.bindAttribLocation(shaderProgram, 1, "normal");
gl.bindAttribLocation(shaderProgram, 2, "texUV");
//屿§ã®ã¤ã³ããã¯ã¹ã夿´ãããå ´åãã·ã§ã¼ãã¼ãåãªã³ã¯ããå¿
è¦ãããã¾ã
//ããã«ããã以åã«è¨å®ããããã¹ã¦ã®ã¦ããã©ã¼ã ããªã»ããããããã¨ã«æ³¨æãã¦ãã ããã
gl.linkProgram(shaderProgram);
ãããã¯ãã¤ã³ããã¯ã¹ãèªåã§è¨å®ãã代ããã«ãã°ã©ãã£ãã¯ã¹ã«ã¼ãã«ãã£ã¦æä¾ãããã¤ã³ããã¯ã¹ã使ç¨ãããã¨ãã§ãã¾ããããã¯ã·ã§ã¼ãã¼ããã°ã©ã ã®åãªã³ã¯ãé¿ãã¾ãã
const locPosition = gl.getAttribLocation(shaderProgram, "position");
gl.vertexAttribPointer(locPosition, 3, gl.FLOAT, false, 20, 0);
gl.enableVertexAttribArray(locPosition);
const locNormal = gl.getAttribLocation(shaderProgram, "normal");
gl.vertexAttribPointer(locNormal, 4, gl.BYTE, true, 20, 12);
gl.enableVertexAttribArray(locNormal);
const locTexUV = gl.getAttribLocation(shaderProgram, "texUV");
gl.vertexAttribPointer(locTexUV, 2, gl.UNSIGNED_SHORT, true, 20, 16);
gl.enableVertexAttribArray(locTexUV);
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£é
ç®
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4