javascript - 使用 WEBGL 的彩色渐变片段
问题描述
我必须创建的练习题是上图,我不知道如何执行它。每次我都得到一个白屏。我知道这与我将颜色变量添加到缓冲区属性有关,但我无法弄清楚。任何帮助将不胜感激。
var gl;
window.onload = function init()
{
var canvas = document.getElementById( "gl-canvas" );
gl = WebGLUtils.setupWebGL( canvas );
if ( !gl ) { alert( "WebGL isn't available" ); }
// Four Vertices
var vertices = [
vec2( -0.5, -0.5 ),
vec2( -0.5, 0.5 ),
vec2( 0.5, 0.5 ),
vec2( 0.5, -0.5)
];
var colors = [
1.0, 1.0, 1.0, 1.0, // white
1.0, 0.0, 0.0, 1.0, // red
0.0, 1.0, 0.0, 1.0, // green
0.0, 0.0, 1.0, 1.0, // blue
];
//
// Configure WebGL
//
gl.viewport( 0, 0, canvas.width, canvas.height );
gl.clearColor( 0.0, 0.0, 0.0, 1.0 );
// Load shaders and initialize attribute buffers
var program = initShaders( gl, "vertex-shader", "fragment-shader" );
gl.useProgram( program );
// Load the data into the GPU
var bufferId = gl.createBuffer();
gl.bindBuffer( gl.ARRAY_BUFFER, bufferId );
gl.bufferData( gl.ARRAY_BUFFER, flatten(vertices), gl.STATIC_DRAW );
var colorBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new flatten(colors), gl.STATIC_DRAW);
// Associate out shader variables with our data buffer
var vPosition = gl.getAttribLocation( program, "vPosition" );
gl.vertexAttribPointer( vPosition, 2, gl.FLOAT, false, 0, 0 );
gl.enableVertexAttribArray( vPosition );
render();
};
function render() {
gl.clear( gl.COLOR_BUFFER_BIT );
gl.drawArrays( gl.TRIANGLE_FAN, 0, 4 );
}
解决方案
gl.bufferData(gl.ARRAY_BUFFER, new flatten(colors), gl.STATIC_DRAW);
在这里使用new
看起来像一个错误,也没有什么可以展平的,因为颜色数组已经是平的(顺便说一句。有一个官方的平面功能)。
此外,您仍然需要像使用位置一样设置顶点属性(请记住,您的颜色具有比您的位置更多的元素)并在着色器中输出颜色。
推荐阅读
- sql - SQL Server 分组有些奇怪
- css - NetBeans 自动完成 JavaFX CSS
- ios - 如何将观察到的属性传递给其他类?
- java - 从非结构化字符串中提取 JSON 字符串
- python - 如何在 python pandas 中分块读取 sas 文件?
- mongodb - Mongo DB 我尝试添加新字段
- python - 如何使用python在检测到的对象周围绘制一个框?
- javascript - 构建 vue js 文件
- .net - 如何使用 GraphQL for dotnet 处理 GraphQL 查询中的空响应?
- java - 在休眠中测试延迟加载(带有事务的java spring)