导航:首页 > 源码编译 > webgl编程指南源码

webgl编程指南源码

发布时间:2022-09-21 21:58:47

1. 《webgl入门指南》pdf下载在线阅读全文,求百度网盘云资源

《webgl入门指南》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1HZ-vX76fHLWwECEAlHg98Q

?pwd=l6u7 提取码:l6u7
简介:webgl是一项新的web 3d图形标准,也是html5大家庭中的一员。《webgl入门指南》从webgl和3d图形学的基础概念讲起,循序渐进,用多个简单的实例直观地讲解了各个知识点

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

?pwd=l6u7 提取码:l6u7
简介:webgl是一项新的web 3d图形标准,也是html5大家庭中的一员。《webgl入门指南》从webgl和3d图形学的基础概念讲起,循序渐进,用多个简单的实例直观地讲解了各个知识点。

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>

阅读全文

与webgl编程指南源码相关的资料

热点内容
加密空投与硬分叉指南 浏览:15
加密wps文档密码忘了怎么办 浏览:685
冲程算法 浏览:988
鸡料与鸡粪的算法 浏览:833
phpif变量为空值 浏览:59
iot编译器异常 浏览:600
代理服务器被禁用怎么上网 浏览:411
隐私加密怎么设置密码 浏览:940
马丁靴补色解压 浏览:565
在设置app上怎么找到个人热点 浏览:754
按照档案号生成文件夹 浏览:1001
程序员转方向 浏览:111
lol敏捷加密 浏览:882
传统公司眼中的加密货币 浏览:430
电脑图标又出现文件夹怎么去掉 浏览:964
排序算法c和a 浏览:418
手机拍照上传android 浏览:343
linux压缩率 浏览:614
电脑浏览器加密端口 浏览:536
单片机线性电源 浏览:268