- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始学习使用 webgl 创建更复杂的多边形,但是我目前无法创建六 Angular 星形多边形。我尝试过使用 gl.TRIANGLES,但是它创建了不寻常的形状,这根本不是我想要的。
我所说的六 Angular 星是指二维六边形,每个边都有三 Angular 形。
var InitDemo = function(){
var canvas = document.getElementById('polygon-surface');
var gl = canvas.getContext('webgl');
//geometry
var vertices = [];
var indices = [];
vertices.push(0,0);
indices.push(0);
//start by creating the hexagon vertices
for(var i = 0; i <= 6; i++){
var degree_offset = i * 60.0;
var radian_offset = degree_offset * (Math.PI / 180.0);
var x_pos = 0.5*Math.cos(radian_offset);
var y_pos = 0.5*Math.sin(radian_offset);
vertices.push(x_pos);
vertices.push(y_pos);
indices.push(i+1);
}
var index = 1;
var inner_poly_vert = indices.length -1;
//find the outer vertices needed for the star
for(var i = 1;i<inner_poly_vert;i++){
var c_x = vertices[2*i+0];
var c_y = vertices[2*i+1];
var n_x = vertices[2*i+2];
var n_y = vertices[2*i+3];
var x_mp = (c_x + n_x);
var y_mp = (c_y + n_y);
vertices.push(x_mp,y_mp);
indices.push(indices.length);
}
var temp = [];
//create the star from the hexagon and outer vertices
for(var i = 0;i<6;i++){
temp.push(0,i+1,i+2);
temp.push(i+1,i+8,i+2);
}
indices = temp;
console.log(indices);
console.log(vertices);
//create VBO
var vertexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
var indexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
//create shader
var vertShader = gl.createShader(gl.VERTEX_SHADER);
var vertSrc = 'attribute vec2 coordinates;'+
'void main(){'+
'gl_Position = vec4(coordinates,0.0,1.0);'+
'}';
gl.shaderSource(vertShader, vertSrc);
gl.compileShader(vertShader);
gl.compileShader(vertShader);
if (!gl.getShaderParameter(vertShader, gl.COMPILE_STATUS)) {
console.error('ERROR compiling vertex shader!', gl.getShaderInfoLog(vertShader));
return;
}
var fragShader = gl.createShader(gl.FRAGMENT_SHADER);
var fragSrc = 'void main(){'+
'gl_FragColor = vec4(0.0,0.7,0.9,1.0);'+
'}';
gl.shaderSource(fragShader, fragSrc);
gl.compileShader(fragShader);
if (!gl.getShaderParameter(fragShader, gl.COMPILE_STATUS)) {
console.error('ERROR compiling fragment shader!', gl.getShaderInfoLog(fragShader));
return;
}
var program = gl.createProgram();
gl.attachShader(program, vertShader);
gl.attachShader(program, fragShader);
gl.linkProgram(program);
gl.useProgram(program);
//association
var coord = gl.getAttribLocation(program, 'coordinates');
gl.vertexAttribPointer(coord, 2, gl.FLOAT, false, 2*Float32Array.BYTES_PER_ELEMENT, 0);
gl.enableVertexAttribArray(coord);
//draw
gl.clearColor(0.9, 0.2, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLES, 0, vertices.length/2);// change back to /2 find out what draw arrays does
}
InitDemo();
body{
background-color: black;
}
<canvas id="polygon-surface" width="200px" height="200px"></canvas>
我认为问题与我的 VBO 以及我如何使用元素数组缓冲区引用我的顶点有关。
最佳答案
您需要调用gl.drawElements
来使用索引进行绘制
gl.drawElements(gl.TRIANGLES, temp.length, gl.UNSIGNED_SHORT, 0);
var InitDemo = function(){
var canvas = document.getElementById('polygon-surface');
var gl = canvas.getContext('webgl');
//geometry
var vertices = [];
var indices = [];
vertices.push(0,0);
indices.push(0);
//start by creating the hexagon vertices
for(var i = 0; i <= 6; i++){
var degree_offset = i * 60.0;
var radian_offset = degree_offset * (Math.PI / 180.0);
var x_pos = 0.5*Math.cos(radian_offset);
var y_pos = 0.5*Math.sin(radian_offset);
vertices.push(x_pos);
vertices.push(y_pos);
indices.push(i+1);
}
var index = 1;
var inner_poly_vert = indices.length -1;
//find the outer vertices needed for the star
for(var i = 1;i<inner_poly_vert;i++){
var c_x = vertices[2*i+0];
var c_y = vertices[2*i+1];
var n_x = vertices[2*i+2];
var n_y = vertices[2*i+3];
var x_mp = (c_x + n_x);
var y_mp = (c_y + n_y);
vertices.push(x_mp,y_mp);
indices.push(indices.length);
}
var temp = [];
//create the star from the hexagon and outer vertices
for(var i = 0;i<6;i++){
temp.push(0,i+1,i+2);
temp.push(i+1,i+8,i+2);
}
indices = temp;
console.log(indices);
console.log(vertices);
//create VBO
var vertexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
var indexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
//create shader
var vertShader = gl.createShader(gl.VERTEX_SHADER);
var vertSrc = 'attribute vec2 coordinates;'+
'void main(){'+
'gl_Position = vec4(coordinates,0.0,1.0);'+
'}';
gl.shaderSource(vertShader, vertSrc);
gl.compileShader(vertShader);
gl.compileShader(vertShader);
if (!gl.getShaderParameter(vertShader, gl.COMPILE_STATUS)) {
console.error('ERROR compiling vertex shader!', gl.getShaderInfoLog(vertShader));
return;
}
var fragShader = gl.createShader(gl.FRAGMENT_SHADER);
var fragSrc = 'void main(){'+
'gl_FragColor = vec4(0.0,0.7,0.9,1.0);'+
'}';
gl.shaderSource(fragShader, fragSrc);
gl.compileShader(fragShader);
if (!gl.getShaderParameter(fragShader, gl.COMPILE_STATUS)) {
console.error('ERROR compiling fragment shader!', gl.getShaderInfoLog(fragShader));
return;
}
var program = gl.createProgram();
gl.attachShader(program, vertShader);
gl.attachShader(program, fragShader);
gl.linkProgram(program);
gl.useProgram(program);
//association
var coord = gl.getAttribLocation(program, 'coordinates');
gl.vertexAttribPointer(coord, 2, gl.FLOAT, false, 2*Float32Array.BYTES_PER_ELEMENT, 0);
gl.enableVertexAttribArray(coord);
//draw
gl.clearColor(0.9, 0.2, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.drawElements(gl.TRIANGLES, temp.length, gl.UNSIGNED_SHORT, 0);// change back to /2 find out what draw arrays does
}
InitDemo();
body{
background-color: black;
}
<canvas id="polygon-surface" width="200px" height="200px"></canvas>
关于javascript - 使用 webgl 创建六 Angular 星,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45583025/
下面的代码是我一直在研究的代码。当我根据产品的计算分数对产品进行评级时,我认为我的逻辑是有缺陷的,这就是我混淆的地方。而且我也不确定如何根据分数创建评级图像。数组中的第一列是得分值,第二列是产品 ID
我正在尝试为大学作业实现 A 星搜索方法,所以我有点需要从头开始,但我在使其以正确的方式工作时遇到了一些麻烦。这是我的问题的图片: 如您所见,它确实找到了一条路径,但不是最简单的路径。 这是我的工具:
我正在寻找一些关于我可以使用什么方法来构建一个 javascript 文件的指针,该文件将把 1-5 下拉菜单变成一系列 5 个可点击的星星(一个老式的 youtube 评级系统) 不需要执行AJAX
嗯,这是我更新的代码。它不会减速,但不会出现路径。 public static IntPosition[] GetPath(BlockType[,] blocks, IntPosition start
嗨,我已经在ubuntu镜像上构建并安装了ziftrCoin钱包。 8084e9de3c23 ubuntu:latest "/bin/bash" 25 hours ago Up About a min
我正在实现双向 A* 搜索(双向搜索是同时从起点和终点执行的,当这两个搜索相遇时,我将获得最短路径 - 至少有一点额外逻辑被抛出)。 有没有人有使用单向 A* 和双向化(!)它的经验 - 我可以期待什
在花了很长时间使这段代码工作之后,有人可以向我解释为什么当我将指向字符串的指针作为参数传递给函数时需要 2 颗星吗?根据定义,指针将地址保存到将放置某个变量的内存中。所以它是一个有自己地址的变量,在这
我正在研究 A* 寻路算法,由于某种原因,在某个时刻我遇到了空指针异常,但我不知道为什么。问题出现在类 Astar 第 79 行,这是 H 值的简单 setter 。 这是 Astar 类: impo
使用 ./* 或 ./. 是否相同? 例如,如果我尝试 chmod 755 ./* -R 或 chmod 755 ./*.* -R 它会得到相同的结果,使这里的文件和目录使用755权限。但是我想知道这
我正在使用它,并希望将一个新的 css 类“half”添加到星形选择类中,以便只用背景色填充星形的一半:#e54800 https://foundation.zurb.com/building-blo
我从以下位置获得此 CSS: https://www.cssscript.com/simple-5-star-rating-system-with-css-and-html-radios 但我希望星级
我需要开发一个帖子投票系统。每个用户都可以通过点击拇指图标来喜欢一个帖子,通过点击壁炉图标来喜欢一个帖子,将来也许我有一个明星系统作为替代方案。 我正在寻找更好的解决方案来实现这个系统,目前,我有两种
我最近开始学习使用 webgl 创建更复杂的多边形,但是我目前无法创建六 Angular 星形多边形。我尝试过使用 gl.TRIANGLES,但是它创建了不寻常的形状,这根本不是我想要的。 我所说的六
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有一些评级代码: $('div.rateit').rateit(); 我希望它也能用于添加的元素。 这是插件:http://rateit.codeplex.com/ 最佳答案 它有效! : 如果您查
我正在为死亡金属制作一个网站,想知道是否可以使用边框属性在 CSS3 中制作一个五 Angular 星。我能够找到一些引用资料,使我相信有可能制作出 6 分星,但经过几个小时的精神折磨后,我放弃了制作
我已经从 this stackoverflow thread 实现了自定义评级栏即使我将 numStars 设置为 5 或任何其他数字,它也不会显示超过一颗星 这是代码。 我正在为图像使用矢量绘图。
这些函数定义中的*args和**kwargs是什么意思? def foo(x, y, *args): pass def bar(x, y, **kwargs): pass 参见Wha
这些函数定义中的*args和**kwargs是什么意思? def foo(x, y, *args): pass def bar(x, y, **kwargs): pass 参见Wha
标准方法如下:AI:一种现代方法 function UNIFORM-COST-SEARCH node if node is in explored then continue if GOAL
我是一名优秀的程序员,十分优秀!