1. 《webgl入門指南》pdf下載在線閱讀全文,求百度網盤雲資源
《webgl入門指南》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1HZ-vX76fHLWwECEAlHg98Q
2. WebGL Shader教程
關於WebGL Shader的視頻教程比較少,你開發游戲用的是那種游戲引擎,Layabox,cocos creator,還是白鷺。每種游戲引擎在shader的開發上都有些差別,主要是引擎向GPU提交數據上會有不同的寫法,存數據的位置也不太一樣。具體到shader內功能的開發,都是差不多的,因為都是用的WebGL那一套。
https://e.csdn.net/course/detail/32454
這個教程主要是用Layabox來開發webGL Shader的教程。講的很詳細,對新手入門很友好,源代碼都可以下載,比較方便新手學習。如果你是使用cocos creator 或 白鷺的話,可以參照引擎的官方文檔,熟悉引擎怎麼提交數據的,shader內部的計算都是一樣的,也很有學習的價值。
3. webgl怎樣實現選中某個元素時彈出相應的值
webgl實現選中某個元素時彈出相應的值:
WebGL是一個跨平台、免費的底層3D繪圖API的Web標准,它基於OpenGL ES 2.0標准。WebGL是網頁上渲染三維圖形圖像的技術,它本身是HTML5規范的一部分。WebGL通過HTML5 Canvas元素對外暴露DOM編程介面。 WebGL全稱是Web-based Graphics Language
4. 求《webgl入門指南》全文免費下載百度網盤資源,謝謝~
《webgl入門指南》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1HZ-vX76fHLWwECEAlHg98Q
5. WEBGL靠譜嗎
就算再大型的,用WEBGL做的,也只能算是網頁游戲,頁游。也不能和端游比吧?
WEBGL源碼保護的問題,你可以查查javascript代碼混淆。
6. unity3d怎麼調試webgl
直接用unity5打開工程就行,它會彈一個窗口提示的,你只需要點擊確認unity就會自動給你的項目升級到5的,不過之後進入工程可能會出些錯,有些插件工程升級之後可能會報錯,這個你如果改不了插件的源碼的話就只有刪了重新導入那些插件了。
7. 如何實現webgl對導入的模型的鍵盤控制
用鍵盤控制三角形的旋轉 本章學習一個簡單交互:用鍵盤的左右鍵控制三角形向左或向右旋轉。
WebGL本身並沒有輸入相關的API,我們需要藉助於瀏覽器的力量。
我使用HTML文檔對象的onkeydown和onkeyup事件。在事件處理函數中,我首先判斷被按下或彈起的鍵是否是左或右,如果是,就設置相應鍵的狀態為按下或彈起。我把左或右這兩個按鍵的狀態分開保存,而不是用一個統一的標記值標記它們。這允許我們處理左右鍵被同時按下的情況(雖然目前看起來有點沒有必要,但以後會用得到)。
注意,我使用的事件處理函數用document.onkeydown = function(e)這種格式定義。如果你用的不是FF瀏覽器,該函數可能不會正確執行,請自行修改。
在某個按鍵被按下的情況下,三角形就不停地向左或向右旋轉,直到該按鍵被松開。
我仍然用一個js變數來記錄當前三角形要旋轉的角度;左轉角度加10,右轉角度減10。
整合的源碼如下:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<script type="text/javascript" src="glMatrix-0.9.5.js"></script>
<script id="shader-vs" type="x-shader/x-vertex">
attribute vec3 v3Position;
uniform mat4 um4Rotate;
varying vec2 v_texCoord;
void main(void)
{
//vec4 v4pos = um4Rotate * vec4(v3Position, 1.0);
//v_texCoord = vec2((v4pos.x+1.0)/2.0, 1.0-(v4pos.y+1.0)/2.0);
//gl_Position = v4pos;
v_texCoord = vec2((v3Position.x+1.0)/2.0, 1.0-(v3Position.y+1.0)/2.0);
gl_Position = um4Rotate * vec4(v3Position, 1.0);
}
</script>
<script id="shader-fs" type="x-shader/x-fragment">
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endif
uniform sampler2D s_texture;
varying vec2 v_texCoord;
void main(void)
{
gl_FragColor = texture2D(s_texture, v_texCoord);
}
</script>
<script>
function ShaderSourceFromScript(scriptID)
{
var shaderScript = document.getElementById(scriptID);
if (shaderScript == null) return "";
var sourceCode = "";
var child = shaderScript.firstChild;
while (child)
{
if (child.nodeType == child.TEXT_NODE ) sourceCode += child.textContent;
child = child.nextSibling;
}
return sourceCode;
}
var webgl = null;
var vertexShaderObject = null;
var fragmentShaderObject = null;
var programObject = null;
var triangleBuffer = null;
var v3PositionIndex = 0;
var textureObject = null;
var samplerIndex = -1;
var interval = 300;
var angle = 0;
var um4RotateIndex = -1;
var leftKeyDown = false;
var rightKeyDown = false;
function LoadData()
{
var jsArrayData = [
0.0, 0.5, 0.0,//上頂點
-0.5, -0.5, 0.0,//左頂點
0.5, 0.0, 0.0];//右頂點
triangleBuffer = webgl.createBuffer();
webgl.bindBuffer(webgl.ARRAY_BUFFER, triangleBuffer);
webgl.bufferData(webgl.ARRAY_BUFFER, new Float32Array(jsArrayData), webgl.STATIC_DRAW);
textureObject = webgl.createTexture();
webgl.bindTexture(webgl.TEXTURE_2D, textureObject);
var img = document.getElementById('myTexture');
webgl.texImage2D(webgl.TEXTURE_2D, 0, webgl.RGB, webgl.RGB, webgl.UNSIGNED_BYTE, img);
return 0;
}
function RenderScene()
{
webgl.clearColor(0.0, 0.0, 0.0, 1.0);
webgl.clear(webgl.COLOR_BUFFER_BIT);
webgl.bindBuffer(webgl.ARRAY_BUFFER, triangleBuffer);
webgl.enableVertexAttribArray(v3PositionIndex);
webgl.vertexAttribPointer(v3PositionIndex, 3, webgl.FLOAT, false, 0, 0);
webgl.texParameteri(webgl.TEXTURE_2D, webgl.TEXTURE_MIN_FILTER, webgl.NEAREST);
webgl.texParameteri(webgl.TEXTURE_2D, webgl.TEXTURE_MAG_FILTER, webgl.NEAREST);
webgl.texParameteri(webgl.TEXTURE_2D, webgl.TEXTURE_WRAP_S, webgl.CLAMP_TO_EDGE);
webgl.texParameteri(webgl.TEXTURE_2D, webgl.TEXTURE_WRAP_T, webgl.CLAMP_TO_EDGE);
webgl.activeTexture(webgl.TEXTURE0);
webgl.bindTexture(webgl.TEXTURE_2D, textureObject);
webgl.uniform1i(samplerIndex, 0);
var m4Rotate = mat4.create();
mat4.identity(m4Rotate);
mat4.rotateZ(m4Rotate, angle*Math.PI/180);
webgl.uniformMatrix4fv(um4RotateIndex, false, m4Rotate);
webgl.drawArrays(webgl.TRIANGLES, 0, 3);
}
function RotateTriangle()
{
if(leftKeyDown) angle += 10;
if(rightKeyDown) angle -= 10;
if(angle >= 360) angle -= 360;
if(angle < 0) angle += 360;
RenderScene();
}
document.onkeydown = function(e)
{
if(e.keyCode == 37) leftKeyDown = true;
if(e.keyCode == 39) rightKeyDown = true;
}
document.onkeyup = function(e)
{
if(e.keyCode == 37) leftKeyDown = false;
if(e.keyCode == 39) rightKeyDown = false;
}
function Init()
{
var myCanvasObject = document.getElementById('myCanvas');
webgl = myCanvasObject.getContext("experimental-webgl");
webgl.viewport(0, 0, myCanvasObject.clientWidth, myCanvasObject.clientHeight);
vertexShaderObject = webgl.createShader(webgl.VERTEX_SHADER);
fragmentShaderObject = webgl.createShader(webgl.FRAGMENT_SHADER);
webgl.shaderSource(vertexShaderObject, ShaderSourceFromScript("shader-vs"));
webgl.shaderSource(fragmentShaderObject, ShaderSourceFromScript("shader-fs"));
webgl.compileShader(vertexShaderObject);
webgl.compileShader(fragmentShaderObject);
if(!webgl.getShaderParameter(vertexShaderObject, webgl.COMPILE_STATUS)){alert(webgl.getShaderInfoLog(vertexShaderObject));return;}
if(!webgl.getShaderParameter(fragmentShaderObject, webgl.COMPILE_STATUS)){alert(webgl.getShaderInfoLog(fragmentShaderObject));return;}
programObject = webgl.createProgram();
webgl.attachShader(program www.hnne.com Object, vertexShaderObject);
webgl.attachShader(programObject, fragmentShaderObject);
webgl.bindAttribLocation(programObject, v3PositionIndex, "v3Position");
webgl.linkProgram(programObject);
if(!webgl.getProgramParameter(programObject, webgl.LINK_STATUS)){alert(webgl.getProgramInfoLog(programObject));return;}
samplerIndex = webgl.getUniformLocation(programObject, "s_texture");
um4RotateIndex = webgl.getUniformLocation(programObject, "um4Rotate");
webgl.useProgram(programObject);
if(LoadData() != 0){alert("error:LoadData()!");return;}
window.setInterval("RotateTriangle()", interval);
}
</script>
</head>
<body onload='Init()'>
<canvas id="myCanvas" style="border:1px solid red;" width='600px' height='450px'></canvas>
<img id="myTexture" src='texture.bmp'>
</body>
</html>