本文整理汇总了C#中WebGLRenderingContext.vertexAttribPointer方法的典型用法代码示例。如果您正苦于以下问题:C# WebGLRenderingContext.vertexAttribPointer方法的具体用法?C# WebGLRenderingContext.vertexAttribPointer怎么用?C# WebGLRenderingContext.vertexAttribPointer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WebGLRenderingContext
的用法示例。
在下文中一共展示了WebGLRenderingContext.vertexAttribPointer方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Application
//.........这里部分代码省略.........
__mat4.perspective(
pMatrix,
90f,
(float)gl_viewportWidth / (float)gl_viewportHeight,
0.1f,
100.0f
);
//__mat4.rotate(pMatrix, pMatrix, (float)Math.PI + mx * 0.005f, new float[] { 0, 1f, 0f });
__mat4.rotate(pMatrix, pMatrix, mx * 0.005f, new float[] { 0, 1f, 0f });
#endregion
//var cubesize = 1.0f * 0.05f;
if (vertexTransform.Length == 0)
{
__mat4.identity(mvMatrix);
__mat4.translate(mvMatrix, mvMatrix, new float[] { -1.5f, 0.0f, -3.0f });
#region windwheel
mvPushMatrix();
__mat4.rotate(mvMatrix, mvMatrix, degToRad(rWind), new float[] { 0, 1f, 0f });
#region DrawFrameworkWingAtX
Action<float, float> DrawFrameworkWingAtX = (WingX, WingY) =>
{
mvPushMatrix();
__mat4.translate(mvMatrix, mvMatrix, new float[] { cubesize * WingX, cubesize * WingY, 0 });
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexPositionAttribute, cubeVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexColorBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, cubeVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cubeVertexIndexBuffer);
setMatrixUniforms();
gl.drawElements(gl.TRIANGLES, cubeVertexPositionBuffer_numItems, gl.UNSIGNED_BYTE, 0);
mvPopMatrix();
};
#endregion
#region DrawWingAtX
Action<int, int, float, float> DrawWingAtX = (WingX, WingSize, WingRotationMultiplier, WingRotationOffset) =>
{
mvPushMatrix();
__mat4.translate(mvMatrix, mvMatrix, new float[] { cubesize * WingX, 0, 0 });
if (WingRotationOffset == 0)
{
DrawFrameworkWingAtX(0, 0);
}
#region DrawWingPart
Action<float> DrawWingPart = PartIndex =>
{
mvPushMatrix();
__mat4.rotate(mvMatrix, mvMatrix, degToRad(WingRotationOffset + (rCube * WingRotationMultiplier)), new float[] { 1f, 0f, 0f });
__mat4.translate(mvMatrix, mvMatrix, new float[] { 0f, cubesize * PartIndex * 2, 0 });
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexPositionAttribute, cubeVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
示例2: Application
//.........这里部分代码省略.........
var nTheta = 50;
var dPhi = 2 * Math.PI / nPhi;
var dTheta = Math.PI / nTheta;
var vertices = new IArray<float>();
var ind = new IArray<ushort>();
for (var j = 0; j <= nTheta; j++)
{
var Theta = j * dTheta;
var cosTheta = Math.Cos(Theta);
var sinTheta = Math.Sin(Theta);
for (var i = 0; i <= nPhi; i++)
{
var Phi = i * dPhi;
var cosPhi = Math.Cos(Phi);
var sinPhi = Math.Sin(Phi);
vertices.push((f)(cosPhi * sinTheta));
vertices.push((f)(-sinPhi * sinTheta));
vertices.push((f)(cosTheta));
}
}
for (var j = 0; j < nTheta; j++)
for (var i = 0; i <= nPhi; i++)
{
ind.push((ushort)(j * (nPhi + 1) + i));
ind.push((ushort)((j + 1) * (nPhi + 1) + i));
}
var posLocation = gl.getAttribLocation(prog, "aPos");
gl.enableVertexAttribArray((uint)posLocation);
var posBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, posBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
gl.vertexAttribPointer((uint)posLocation, 3, gl.FLOAT, false, 0, 0);
var indexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(ind.ToArray()),
gl.STATIC_DRAW);
//prMatrix.perspective(45, 1, .1, 100);
gl.uniformMatrix4fv(gl.getUniformLocation(prog, "prMatrix"),
false, new Float32Array(prMatrix.getAsArray()));
var mvMatrix = new CanvasMatrix4();
var mvMatLoc = gl.getUniformLocation(prog, "mvMatrix");
gl.enable(gl.DEPTH_TEST);
gl.depthFunc(gl.LEQUAL);
gl.clearDepth(1.0f);
gl.clearColor(0, 0, .8f, 1f);
var xOffs = 0;
var yOffs = 0;
var drag = 0;
var xRot = 0f;
var yRot = 1f;
var transl = -15.5f;
#region drawScene
Action drawScene = delegate
{
示例3: Application
//.........这里部分代码省略.........
var textureLocation = default(WebGLUniformLocation);
#region resize
Action resize = delegate
{
canvas.style.SetLocation(0, 0);
canvas.width = Native.window.Width;
canvas.height = Native.window.Height;
parameters_screenWidth = canvas.width;
parameters_screenHeight = canvas.height;
gl.viewport(0, 0, canvas.width, canvas.height);
};
Native.window.onresize +=
delegate
{
if (IsDisposed)
return;
resize();
};
resize();
#endregion
Native.window.onframe +=
delegate
{
if (IsDisposed)
return;
if (program == null) return;
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// Load program into GPU
// Get var locations
vertexPositionLocation = gl.getAttribLocation(program, "position");
textureLocation = gl.getUniformLocation(program, "texture");
// Set values to program variables
var program_uniforms = program.Uniforms(gl);
var resolution = new __vec2 { x = parameters_screenWidth, y = parameters_screenHeight };
program_uniforms.time = time.ElapsedMilliseconds / 1000f;
// could the uniform accept anonymous type and infer vec2 based on x and y?
program_uniforms.resolution = resolution;
//gl.uniform1f(gl.getUniformLocation(program, "time"), parameters_time / 1000);
//gl.uniform2f(gl.getUniformLocation(program, "resolution"), parameters_screenWidth, parameters_screenHeight);
gl.uniform1i(textureLocation, 0);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, texture);
// Render geometry
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.vertexAttribPointer((uint)vertexPositionLocation, 2, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray((uint)vertexPositionLocation);
gl.drawArrays(gl.TRIANGLES, 0, 6);
gl.disableVertexAttribArray((uint)vertexPositionLocation);
};
#region requestFullscreen
Native.document.body.ondblclick +=
delegate
{
if (IsDisposed)
return;
// http://tutorialzine.com/2012/02/enhance-your-website-fullscreen-api/
Native.document.body.requestFullscreen();
};
#endregion
}
示例4: Application
//.........这里部分代码省略.........
// http://www.html5rocks.com/en/tutorials/webgl/webgl_fundamentals/
//gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
gl.viewport(0, 0, viewportxres, viewportyres);
// alpha to zero will only hide the pixel if blending is enabled.
gl.useProgram(mProgram);
// uniform4fv
var mouse = new[] { mousePosX, mousePosY, mouseOriX, mouseOriY };
var l2 = gl.getUniformLocation(mProgram, "iGlobalTime"); if (l2 != null) gl.uniform1f(l2, time);
var l3 = gl.getUniformLocation(mProgram, "iResolution"); if (l3 != null) gl.uniform3f(l3, viewportxres, viewportyres, 1.0f);
var l4 = gl.getUniformLocation(mProgram, "iMouse"); if (l4 != null) gl.uniform4fv(l4, mouse);
//var l7 = gl.getUniformLocation(this.mProgram, "iDate"); if (l7 != null) gl.uniform4fv(l7, dates);
//var l9 = gl.getUniformLocation(this.mProgram, "iSampleRate"); if (l9 != null) gl.uniform1f(l9, this.mSampleRate);
var ich0 = gl.getUniformLocation(mProgram, "iChannel0"); if (ich0 != null) gl.uniform1i(ich0, 0);
var ich1 = gl.getUniformLocation(mProgram, "iChannel1"); if (ich1 != null) gl.uniform1i(ich1, 1);
var ich2 = gl.getUniformLocation(mProgram, "iChannel2"); if (ich2 != null) gl.uniform1i(ich2, 2);
var ich3 = gl.getUniformLocation(mProgram, "iChannel3"); if (ich3 != null) gl.uniform1i(ich3, 3);
//for (var i = 0; i < mInputs.Length; i++)
//{
// var inp = mInputs[i];
// gl.activeTexture((uint)(gl.TEXTURE0 + i));
// if (inp == null)
// {
// gl.bindTexture(gl.TEXTURE_2D, null);
// }
//}
var times = new[] { 0.0f, 0.0f, 0.0f, 0.0f };
var l5 = gl.getUniformLocation(mProgram, "iChannelTime");
if (l5 != null) gl.uniform1fv(l5, times);
var resos = new float[12] { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
var l8 = gl.getUniformLocation(mProgram, "iChannelResolution");
if (l8 != null) gl.uniform3fv(l8, resos);
// using ?
var l1 = (uint)gl.getAttribLocation(mProgram, "pos");
gl.bindBuffer(gl.ARRAY_BUFFER, quadVBO);
gl.vertexAttribPointer(l1, 2, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(l1);
gl.drawArrays(gl.TRIANGLES, 0, 6);
// first frame is now visible
gl.disableVertexAttribArray(l1);
#endregion
//mFrame++;
};
#endregion
var sw = Stopwatch.StartNew();
do
{
pass1.Paint_Image(
sw.ElapsedMilliseconds / 1000.0f,
mMouseOriX,
mMouseOriY,
mMousePosX,
mMousePosY,
zoom: 1.0f
);
pass0.Paint_Image(
sw.ElapsedMilliseconds / 1000.0f,
mMouseOriX,
mMouseOriY,
mMousePosX,
mMousePosY,
//zoom: 0.5f
zoom: mMousePosX / (float)c.width
);
// what does it do?
gl.flush();
}
while (await Native.window.async.onframe);
}
);
}
示例5: Application
//.........这里部分代码省略.........
Nx /= N;
Ny /= N;
for (var i = 0; i < nPhi; i++)
{
var cosPhi = Math.Cos(Phi);
var sinPhi = Math.Sin(Phi);
var cosPhi2 = Math.Cos(Phi + dPhi / 2);
var sinPhi2 = Math.Sin(Phi + dPhi / 2);
pt.push(-h / 2);
pt.push((float)(cosPhi * r1));
pt.push((float)(sinPhi * r1)); // points
nt.push(Nx);
nt.push((float)(Ny * cosPhi));
nt.push((float)(Ny * sinPhi)); // normals
pt.push(h / 2);
pt.push((float)(cosPhi2 * r2));
pt.push((float)(sinPhi2 * r2)); // points
nt.push(Nx);
nt.push((float)(Ny * cosPhi2));
nt.push((float)(Ny * sinPhi2)); // normals
Phi += dPhi;
}
var posLoc = gl.getAttribLocation(prog, "aPos");
gl.enableVertexAttribArray((uint)posLoc);
gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(pt.ToArray()), gl.STATIC_DRAW);
gl.vertexAttribPointer((uint)posLoc, 3, gl.FLOAT, false, 0, 0);
var normLoc = gl.getAttribLocation(prog, "aNorm");
gl.enableVertexAttribArray((uint)normLoc);
gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(nt), gl.STATIC_DRAW);
gl.vertexAttribPointer((uint)normLoc, 3, gl.FLOAT, false, 0, 0);
var prMatrix = new CanvasMatrix4();
gl.uniformMatrix4fv(gl.getUniformLocation(prog, "prMatrix"),
false, new Float32Array(prMatrix.getAsArray()));
var mvMatrix = new CanvasMatrix4();
var rotMat = new CanvasMatrix4();
rotMat.makeIdentity();
rotMat.rotate(-40, 0, 1, 0);
var mvMatLoc = gl.getUniformLocation(prog, "mvMatrix");
gl.enable(gl.DEPTH_TEST);
gl.depthFunc(gl.LEQUAL);
gl.clearDepth(1.0f);
gl.clearColor(0, 0, .5f, 1);
var xOffs = 0;
var yOffs = 0;
var drag = 0;
var xRot = 0;
var yRot = 0;
var transl = -1.5f;
Action drawScene = delegate
{
示例6: Application
//.........这里部分代码省略.........
rTri += (90 * elapsed) / 1000.0f;
rSquare += (75 * elapsed) / 1000.0f;
}
lastTime = timeNow;
};
Func<float, float> degToRad = (degrees) =>
{
return degrees * (f)Math.PI / 180f;
};
#endregion
#region drawScene
Action drawScene = delegate
{
gl.viewport(0, 0, gl_viewportWidth, gl_viewportHeight);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
glMatrix.mat4.perspective(45f, (float)gl_viewportWidth / (float)gl_viewportHeight, 0.1f, 100.0f, pMatrix);
glMatrix.mat4.identity(mvMatrix);
glMatrix.mat4.translate(mvMatrix, new float[] { -1.5f, 0.0f, -7.0f });
#region new in lesson 03
mvPushMatrix();
// we’re changing our current rotation state as stored in the model-view matrix
// MVC? :)
glMatrix.mat4.rotate(mvMatrix, degToRad(rTri), new float[] { 0f, 1f, 0f });
#endregion
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexPositionAttribute, triangleVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
#region new in lesson 02
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, triangleVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
#endregion
setMatrixUniforms();
gl.drawArrays(gl.TRIANGLES, 0, triangleVertexPositionBuffer_numItems);
#region new in lesson 03
mvPopMatrix();
#endregion
glMatrix.mat4.translate(mvMatrix, new float[] { 3.0f, 0.0f, 0.0f });
#region new in lesson 03
mvPushMatrix();
glMatrix.mat4.rotate(mvMatrix, degToRad(rSquare), new float[] { 1f, 0f, 0f });
#endregion
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexPositionAttribute, squareVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
#region new in lesson 02
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexColorBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, squareVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
示例7: Application
//.........这里部分代码省略.........
};
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
var squareVertexPositionBuffer_itemSize = 3;
var squareVertexPositionBuffer_numItems = 4;
#region new in lesson 02
var squareVertexColorBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexColorBuffer);
#region loop unrolled :)
colors = new[]{
0.5f, 0.5f, 1.0f, 1.0f,
0.5f, 0.5f, 1.0f, 1.0f,
0.5f, 0.5f, 1.0f, 1.0f,
0.5f, 0.5f, 1.0f, 1.0f
};
#endregion
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
var squareVertexColorBuffer_itemSize = 4;
var squareVertexColorBuffer_numItems = 4;
#endregion
#endregion
gl.clearColor(0.0f, 0.0f, 0.0f, 1.0f);
gl.enable(gl.DEPTH_TEST);
#region drawScene
Action drawScene =
delegate
{
gl.viewport(0, 0, gl_viewportWidth, gl_viewportHeight);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
glMatrix.mat4.perspective(45f, (float)gl_viewportWidth / (float)gl_viewportHeight, 0.1f, 100.0f, pMatrix);
glMatrix.mat4.identity(mvMatrix);
glMatrix.mat4.translate(mvMatrix, new float[] { -1.5f, 0.0f, -7.0f });
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexPositionAttribute, triangleVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, triangleVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
setMatrixUniforms();
gl.drawArrays(gl.TRIANGLES, 0, triangleVertexPositionBuffer_numItems);
glMatrix.mat4.translate(mvMatrix, new float[] { 3.0f, 0.0f, 0.0f });
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexPositionAttribute, squareVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexColorBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, squareVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
setMatrixUniforms();
gl.drawArrays(gl.TRIANGLE_STRIP, 0, squareVertexPositionBuffer_numItems);
};
#endregion
drawScene();
#region AtResize
Action AtResize =
delegate
{
gl_viewportWidth = Native.window.Width;
gl_viewportHeight = Native.window.Height;
canvas.style.SetLocation(0, 0, gl_viewportWidth, gl_viewportHeight);
canvas.width = gl_viewportWidth;
canvas.height = gl_viewportHeight;
drawScene();
};
Native.window.onresize +=
e =>
{
AtResize();
};
AtResize();
#endregion
}
示例8: ApplicationContent
//.........这里部分代码省略.........
Func<float, float> degToRad = (degrees) =>
{
return degrees * (f)Math.PI / 180f;
};
#endregion
#region drawScene
Action drawScene = delegate
{
gl.viewport(0, 0, gl_viewportWidth, gl_viewportHeight);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
glMatrix.mat4.perspective(45f, (float)gl_viewportWidth / (float)gl_viewportHeight, 0.1f, 100.0f, pMatrix);
glMatrix.mat4.identity(mvMatrix);
Action<Action> mw =
h =>
{
mvPushMatrix();
h();
mvPopMatrix();
};
#region colors
Action red =
delegate
{
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexColorBuffer_red);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, cubeVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
};
Action green =
delegate
{
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexColorBuffer_green);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, cubeVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
};
Action orange =
delegate
{
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexColorBuffer_orange);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, cubeVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
};
Action white =
delegate
{
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexColorBuffer_white);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, cubeVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
};
Action cyan =
delegate
{
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexColorBuffer_cyan);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, cubeVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
示例9: Application
//.........这里部分代码省略.........
);
#endregion
#region [uniform] vec3 uPointLightingLocation <- (f lightPositionX, f lightPositionY, f lightPositionZ)
gl.uniform3f(
shaderProgram_pointLightingLocationUniform,
parseFloat(toolbar.lightPositionX.value),
parseFloat(toolbar.lightPositionY.value),
parseFloat(toolbar.lightPositionZ.value)
);
#endregion
#region [uniform] vec3 uPointLightingColor <- (f pointR, f pointG, f pointB)
gl.uniform3f(
shaderProgram_pointLightingColorUniform,
parseFloat(toolbar.pointR.value),
parseFloat(toolbar.pointG.value),
parseFloat(toolbar.pointB.value)
);
#endregion
}
glMatrix.mat4.identity(mvMatrix);
glMatrix.mat4.translate(mvMatrix, new f[] { 0, 0, -20 });
#region moon
mvPushMatrix();
glMatrix.mat4.rotate(mvMatrix, degToRad(moonAngle), new f[] { 0, 1, 0 });
glMatrix.mat4.translate(mvMatrix, new f[] { 5, 0, 0 });
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, moonTexture);
gl.uniform1i(shaderProgram_samplerUniform, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, moonVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexPositionAttribute, moonVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, moonVertexTextureCoordBuffer);
gl.vertexAttribPointer((uint)shaderProgram_textureCoordAttribute, moonVertexTextureCoordBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, moonVertexNormalBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexNormalAttribute, moonVertexNormalBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, moonVertexIndexBuffer);
setMatrixUniforms();
gl.drawElements(gl.TRIANGLES, moonVertexIndexBuffer_numItems, gl.UNSIGNED_SHORT, 0);
mvPopMatrix();
#endregion
#region cube
mvPushMatrix();
glMatrix.mat4.rotate(mvMatrix, degToRad(cubeAngle), new f[] { 0, 1, 0 });
glMatrix.mat4.translate(mvMatrix, new f[] { 5, 0, 0 });
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexPositionAttribute, cubeVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexNormalBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexNormalAttribute, cubeVertexNormalBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexTextureCoordBuffer);
gl.vertexAttribPointer((uint)shaderProgram_textureCoordAttribute, cubeVertexTextureCoordBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, crateTexture);
gl.uniform1i(shaderProgram_samplerUniform, 0);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cubeVertexIndexBuffer);
setMatrixUniforms();
gl.drawElements(gl.TRIANGLES, cubeVertexIndexBuffer_numItems, gl.UNSIGNED_SHORT, 0);
mvPopMatrix();
#endregion
};
#endregion
Native.window.onframe += delegate
{
if (IsDisposed)
return;
animate();
drawScene();
};
}
)
);
}
示例10: Application
/// <summary>
/// This is a javascript application.
/// </summary>
/// <param name="page">HTML document rendered by the web server which can now be enhanced.</param>
public Application(IDefault page = null)
{
var gl_viewportWidth = Native.window.Width;
var gl_viewportHeight = Native.window.Height;
var gl = new WebGLRenderingContext();
var canvas = gl.canvas.AttachToDocument();
Native.document.body.style.overflow = IStyle.OverflowEnum.hidden;
canvas.style.SetLocation(0, 0, gl_viewportWidth, gl_viewportWidth);
gl.viewport(0, 0, gl_viewportWidth, gl_viewportWidth);
var prog = gl.createProgram(
new CubicVertexShader(),
new CubicFragmentShader()
);
var posLoc = 0U;
gl.bindAttribLocation(prog, posLoc, "aPos");
var normLoc = 1U;
gl.bindAttribLocation(prog, normLoc, "aNorm");
gl.linkProgram(prog);
gl.useProgram(prog);
#region data
var a = 1.0f; // where is it used? what shall be the type?
var pt0 = new float[] {-a,-a,a, a,-a,a, -a,a,a, a,a,a, // cubic
-a,a,a, a,a,a, -a,a,-a, a,a,-a,
-a,a,-a, a,a,-a, -a,-a,-a, a,-a,-a, -a,-a,-a, a,-a,-a, -a,-a,a, a,-a,a,
a,a,a, a,a,-a, a,-a,a, a,-a,-a, -a,a,a, -a,a,-a, -a,-a,a, -a,-a,-a};
var nt = new float[] {0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
0,0,-1, 0,0,-1, 0,0,-1, 0,0,-1, 0,-1,0, 0,-1,0, 0,-1,0, 0,-1,0,
1,0,0, 1,0,0, 1,0,0, 1,0,0, -1,0,0, -1,0,0, -1,0,0, -1,0,0};
var ind = new ushort[] {0,1,2,1,2,3, 4,5,6,5,6,7, 8,9,10,9,10,11,
12,13,14,13,14,15, 16,17,18,17,18,19, 20,21,22,21,22,23};
var nPhi = 25;
var nTheta = 12;
var r = .15;
var dPhi = 2.0 * Math.PI / nPhi;
var dTheta = Math.PI / nTheta;
for (var j = 0; j <= nTheta; j++)
{
var Theta = j * dTheta;
var cosTheta = Math.Cos(Theta);
var sinTheta = Math.Sin(Theta);
for (var i = 0; i <= nPhi; i++)
{
var Phi = i * dPhi;
var cosPhi = Math.Cos(Phi);
var sinPhi = Math.Sin(Phi);
((IArray<float>)(object)pt0).push((float)(r * cosPhi * sinTheta));
((IArray<float>)(object)pt0).push((float)(-r * sinPhi * sinTheta));
((IArray<float>)(object)pt0).push((float)(r * cosTheta));
((IArray<float>)(object)nt).push((float)(cosPhi * sinTheta));
((IArray<float>)(object)nt).push((float)(-sinPhi * sinTheta));
((IArray<float>)(object)nt).push((float)(cosTheta));
}
}
var n1 = nPhi + 1;
var off = 24;
for (var i = 0; i < nTheta; i++)
for (var j = 0; j < nPhi; j++)
{
((IArray<int>)(object)ind).push(i * n1 + j + off);
((IArray<int>)(object)ind).push((i + 1) * n1 + j + 1 + off);
((IArray<int>)(object)ind).push(i * n1 + j + 1 + off);
((IArray<int>)(object)ind).push(i * n1 + j + off);
((IArray<int>)(object)ind).push((i + 1) * n1 + j + off);
((IArray<int>)(object)ind).push((i + 1) * n1 + j + 1 + off);
}
#endregion
gl.enableVertexAttribArray(posLoc);
gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(pt0), gl.STATIC_DRAW);
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(normLoc);
gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(nt), gl.STATIC_DRAW);
gl.vertexAttribPointer(normLoc, 3, gl.FLOAT, false, 0, 0);
//.........这里部分代码省略.........
示例11: Application
//.........这里部分代码省略.........
#region [uniform] uAmbientColor <- ambientR, ambientG, ambientB
gl.uniform3f(
shaderProgram.ambientColorUniform,
parseFloat(toolbar.ambientR.value),
parseFloat(toolbar.ambientG.value),
parseFloat(toolbar.ambientB.value)
);
#endregion
#region [uniform] uPointLightingLocation <- lightPositionX, lightPositionY, lightPositionZ
gl.uniform3f(
shaderProgram.pointLightingLocationUniform,
parseFloat(toolbar.lightPositionX.value),
parseFloat(toolbar.lightPositionY.value),
parseFloat(toolbar.lightPositionZ.value)
);
#endregion
#region [uniform] uPointLightingSpecularColor <- specularR, specularG, specularB
gl.uniform3f(
shaderProgram.pointLightingSpecularColorUniform,
parseFloat(toolbar.specularR.value),
parseFloat(toolbar.specularG.value),
parseFloat(toolbar.specularB.value)
);
#endregion
#region [uniform] uPointLightingDiffuseColor <- diffuseR, diffuseG, diffuseB
gl.uniform3f(
shaderProgram.pointLightingDiffuseColorUniform,
parseFloat(toolbar.diffuseR.value),
parseFloat(toolbar.diffuseG.value),
parseFloat(toolbar.diffuseB.value)
);
#endregion
}
var texture = toolbar.texture[toolbar.texture.selectedIndex].value;
gl.uniform1i(shaderProgram.useTexturesUniform, Convert.ToInt32(texture != "none"));
glMatrix.mat4.identity(mvMatrix);
glMatrix.mat4.translate(mvMatrix, new f[] { 0, 0, -40 });
glMatrix.mat4.rotate(mvMatrix, degToRad(23.4f), new f[] { 1, 0, -1 });
glMatrix.mat4.rotate(mvMatrix, degToRad(teapotAngle), new f[] { 0, 1, 0 });
gl.activeTexture(gl.TEXTURE0);
if (texture == "earth")
{
gl.bindTexture(gl.TEXTURE_2D, earthTexture);
}
else if (texture == "galvanized")
{
gl.bindTexture(gl.TEXTURE_2D, galvanizedTexture);
}
gl.uniform1i(shaderProgram.samplerUniform, 0);
gl.uniform1f(shaderProgram.materialShininessUniform, parseFloat(toolbar.shininess.value));
gl.bindBuffer(gl.ARRAY_BUFFER, teapotVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram.vertexPositionAttribute, teapotVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, teapotVertexTextureCoordBuffer);
gl.vertexAttribPointer((uint)shaderProgram.textureCoordAttribute, teapotVertexTextureCoordBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, teapotVertexNormalBuffer);
gl.vertexAttribPointer((uint)shaderProgram.vertexNormalAttribute, teapotVertexNormalBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, teapotVertexIndexBuffer);
setMatrixUniforms();
gl.drawElements(gl.TRIANGLES, teapotVertexIndexBuffer_numItems, gl.UNSIGNED_SHORT, 0);
};
#endregion
Native.window.onframe += delegate
{
if (IsDisposed)
return;
animate();
drawScene();
};
};
}
)
);
}
示例12: Application
//.........这里部分代码省略.........
rPyramid += (90 * elapsed) / 1000.0f;
rCube -= (75 * elapsed) / 1000.0f;
}
lastTime = timeNow;
};
Func<float, float> degToRad = (degrees) =>
{
return degrees * (f)Math.PI / 180f;
};
#endregion
#region drawScene
Action drawScene = delegate
{
gl.viewport(0, 0, gl_viewportWidth, gl_viewportHeight);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
glMatrix.mat4.perspective(45f, (float)gl_viewportWidth / (float)gl_viewportHeight, 0.1f, 100.0f, pMatrix);
glMatrix.mat4.identity(mvMatrix);
glMatrix.mat4.translate(mvMatrix, new float[] { -1.5f, 0.0f, -7.0f });
#region new in lesson 03
mvPushMatrix();
// we�re changing our current rotation state as stored in the model-view matrix
// MVC? :)
glMatrix.mat4.rotate(mvMatrix, degToRad(rPyramid), new float[] { 0f, 1f, 0f });
#endregion
gl.bindBuffer(gl.ARRAY_BUFFER, pyramidVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexPositionAttribute, pyramidVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, pyramidVertexColorBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, pyramidVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
setMatrixUniforms();
gl.drawArrays(gl.TRIANGLES, 0, pyramidVertexPositionBuffer_numItems);
#region new in lesson 03
mvPopMatrix();
#endregion
glMatrix.mat4.translate(mvMatrix, new float[] { 3.0f, 0.0f, 0.0f });
#region new in lesson 04
mvPushMatrix();
glMatrix.mat4.rotate(mvMatrix, degToRad(rCube), new float[] { 1f, 1f, 1f });
#endregion
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexPositionAttribute, cubeVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexColorBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexColorAttribute, cubeVertexColorBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cubeVertexIndexBuffer);
setMatrixUniforms();
gl.drawElements(gl.TRIANGLES, cubeVertexIndexBuffer_numItems, gl.UNSIGNED_SHORT, 0);
#region new in lesson 03
示例13: Application
//.........这里部分代码省略.........
var lighting = [email protected];
gl.uniform1i(shaderProgram.useLightingUniform, Convert.ToInt32(lighting));
#endregion
if (lighting)
{
#region [uniform] uAmbientColor <- ambientR, ambientG, ambientB
gl.uniform3f(
shaderProgram.ambientColorUniform,
float.Parse(toolbar.ambientR.value),
float.Parse(toolbar.ambientG.value),
float.Parse(toolbar.ambientB.value)
);
#endregion
#region [uniform] uPointLightingLocation <- lightPositionX, lightPositionY, lightPositionZ
gl.uniform3f(
shaderProgram.pointLightingLocationUniform,
float.Parse(toolbar.lightPositionX.value),
float.Parse(toolbar.lightPositionY.value),
float.Parse(toolbar.lightPositionZ.value)
);
#endregion
#region [uniform] uPointLightingSpecularColor <- specularR, specularG, specularB
gl.uniform3f(
shaderProgram.pointLightingSpecularColorUniform,
float.Parse(toolbar.specularR.value),
float.Parse(toolbar.specularG.value),
float.Parse(toolbar.specularB.value)
);
#endregion
#region [uniform] uPointLightingDiffuseColor <- diffuseR, diffuseG, diffuseB
gl.uniform3f(
shaderProgram.pointLightingDiffuseColorUniform,
float.Parse(toolbar.diffuseR.value),
float.Parse(toolbar.diffuseG.value),
float.Parse(toolbar.diffuseB.value)
);
#endregion
}
glMatrix.mat4.identity(mvMatrix);
glMatrix.mat4.translate(mvMatrix, new f[] { 0, 0, -40 });
glMatrix.mat4.rotate(mvMatrix, degToRad(23.4f), new f[] { 1, 0, -1 });
glMatrix.mat4.rotate(mvMatrix, degToRad(earthAngle), new f[] { 0, 1, 0 });
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, earthColorMapTexture);
gl.uniform1i(shaderProgram.colorMapSamplerUniform, 0);
gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D, earthSpecularMapTexture);
gl.uniform1i(shaderProgram.specularMapSamplerUniform, 1);
gl.bindBuffer(gl.ARRAY_BUFFER, sphereVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram.vertexPositionAttribute, sphereVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, sphereVertexTextureCoordBuffer);
gl.vertexAttribPointer((uint)shaderProgram.textureCoordAttribute, sphereVertexTextureCoordBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, sphereVertexNormalBuffer);
gl.vertexAttribPointer((uint)shaderProgram.vertexNormalAttribute, sphereVertexNormalBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sphereVertexIndexBuffer);
setMatrixUniforms();
gl.drawElements(gl.TRIANGLES, sphereVertexIndexBuffer_numItems, gl.UNSIGNED_SHORT, 0);
};
#endregion
Native.window.onframe += delegate
{
if (IsDisposed)
return;
animate();
drawScene();
};
}
)
);
}
示例14: Application
/* Source: http://www.ibiblio.org/e-notes/webgl/models/ethanol.html
*
*/
/// <summary>
/// This is a javascript application.
/// </summary>
/// <param name="page">HTML document rendered by the web server which can now be enhanced.</param>
public Application(IDefault page = null)
{
var gl_viewportWidth = 500;
var gl_viewportHeight = 500;
var gl = new WebGLRenderingContext();
var canvas = gl.canvas.AttachToDocument();
Native.document.body.style.overflow = IStyle.OverflowEnum.hidden;
canvas.style.SetLocation(0, 0, gl_viewportWidth, gl_viewportHeight);
canvas.width = gl_viewportWidth;
canvas.height = gl_viewportHeight;
var h = 1f;
var r1 = .5f;
var r2 = .2f;
var prog = gl.createProgram();
#region createShader
Func<ScriptCoreLib.GLSL.Shader, WebGLShader> createShader = (src) =>
{
var shader = gl.createShader(src);
// verify
if (gl.getShaderParameter(shader, gl.COMPILE_STATUS) == null)
{
Native.window.alert("error in SHADER:\n" + gl.getShaderInfoLog(shader));
throw new InvalidOperationException("shader failed");
}
return shader;
};
#endregion
var vs = createShader(new GeometryVertexShader());
var fs = createShader(new GeometryFragmentShader());
gl.attachShader(prog, vs);
gl.attachShader(prog, fs);
gl.linkProgram(prog);
gl.useProgram(prog);
var nPhi = 100;
var nTheta = 50;
var dPhi = 2 * Math.PI / nPhi;
var dTheta = Math.PI / nTheta;
var vertices = new IArray<float>();
var ind = new IArray<ushort>();
for (var j = 0; j <= nTheta; j++)
{
var Theta = j * dTheta;
var cosTheta = Math.Cos(Theta);
var sinTheta = Math.Sin(Theta);
for (var i = 0; i <= nPhi; i++)
{
var Phi = i * dPhi;
var cosPhi = Math.Cos(Phi);
var sinPhi = Math.Sin(Phi);
vertices.push((f)(cosPhi * sinTheta));
vertices.push((f)(-sinPhi * sinTheta));
vertices.push((f)(cosTheta));
}
}
for (var j = 0; j < nTheta; j++)
for (var i = 0; i <= nPhi; i++)
{
ind.push((ushort)(j * (nPhi + 1) + i));
ind.push((ushort)((j + 1) * (nPhi + 1) + i));
}
var posLocation = gl.getAttribLocation(prog, "aPos");
gl.enableVertexAttribArray((uint)posLocation);
var posBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, posBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
gl.vertexAttribPointer((uint)posLocation, 3, gl.FLOAT, false, 0, 0);
//.........这里部分代码省略.........
示例15: Application
//.........这里部分代码省略.........
canvas.height = gl_viewportHeight;
};
Native.window.onresize +=
e =>
{
AtResize();
};
AtResize();
#endregion
new HTML.Images.FromAssets.star().InvokeOnComplete(
texture_image =>
{
var starTexture = gl.createTexture();
#region handleLoadedTexture
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);
gl.bindTexture(gl.TEXTURE_2D, starTexture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture_image);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, (int)gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, (int)gl.LINEAR);
gl.bindTexture(gl.TEXTURE_2D, null);
#endregion
#region drawStar
Action drawStar = () =>
{
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, starTexture);
gl.uniform1i(shaderProgram_samplerUniform, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, starVertexTextureCoordBuffer);
gl.vertexAttribPointer((uint)shaderProgram_textureCoordAttribute, starVertexTextureCoordBuffer_itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, starVertexPositionBuffer);
gl.vertexAttribPointer((uint)shaderProgram_vertexPositionAttribute, starVertexPositionBuffer_itemSize, gl.FLOAT, false, 0, 0);
setMatrixUniforms();
gl.drawArrays(gl.TRIANGLE_STRIP, 0, starVertexPositionBuffer_numItems);
};
#endregion
#region drawScene
Action drawScene = delegate
{
gl.viewport(0, 0, gl_viewportWidth, gl_viewportHeight);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
glMatrix.mat4.perspective(45, gl_viewportWidth / gl_viewportHeight, 0.1f, 100.0f, pMatrix);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
gl.enable(gl.BLEND);
glMatrix.mat4.identity(mvMatrix);
glMatrix.mat4.translate(mvMatrix, new f[] {0.0f, 0.0f, zoom});
glMatrix.mat4.rotate(mvMatrix, degToRad(tilt),new f[] { 1.0f, 0.0f, 0.0f});
//var twinkle = document.getElementById("twinkle").checked;
var twinkle = false;
foreach (var star in stars)
{
star.draw(
tilt,
spin,
twinkle,
mvPushMatrix,
mvPopMatrix,
mvMatrix,
drawStar,
shaderProgram_colorUniform,
gl
);
spin += 0.1f;
}
};
#endregion
Native.window.onframe += delegate
{
if (IsDisposed)
return;
handleKeys();
drawScene();
animate();
};
}
);
}