Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es Dart WebGL不渲染_Opengl Es_Dart_Webgl_Dart Html - Fatal编程技术网

Opengl es Dart WebGL不渲染

Opengl es Dart WebGL不渲染,opengl-es,dart,webgl,dart-html,Opengl Es,Dart,Webgl,Dart Html,我正试图用WebGL和Dart写一些东西,但我遇到了一些问题。这是我的源代码 这是我的主文件: 库预热; 导入“dart:html”; 导入“dart:math”; 将“dart:web\U gl”导入为WebGL; 导入“dart:键入的_数据”; 导入“package:vector_math/vector_math.dart”; “图形.省道”部分; WebGL.RenderingContext-gl; 画布元素画布; 四元渲染器; 随机=新随机(); void main(){ query

我正试图用WebGL和Dart写一些东西,但我遇到了一些问题。这是我的源代码

这是我的主文件:

库预热;
导入“dart:html”;
导入“dart:math”;
将“dart:web\U gl”导入为WebGL;
导入“dart:键入的_数据”;
导入“package:vector_math/vector_math.dart”;
“图形.省道”部分;
WebGL.RenderingContext-gl;
画布元素画布;
四元渲染器;
随机=新随机();
void main(){
querySelector(“#pararaf”).setInnerHtml(“你好!”);
画布=查询选择器(“游戏画布”);
新游戏()开始();
}
班级游戏{
纹理测试=新纹理(“tex/test.png”);
void start(){
gl=canvas.getContext3d();
如果(gl==null){
打印(“无WebGL!”);
}
Texture.loadAll();
renderer=新的QuadRenderer();
renderer.projMatrix=makeOrthographicMatrix(0,canvas.width,0,canvas.height,-1,1);
gl.禁用(WebGL.深度测试);
总账启用(WebGL.BLEND);
gl.blendFunc(WebGL.SRC_ALPHA,WebGL.1减去SRC_ALPHA);
gl.clearColor(0.0,0.0,0.0,1.0);
window.requestAnimationFrame(_update);
}
int now,last=new DateTime.now();
双未加工帧;
void\u更新(双倍时间){
now=新的DateTime.now().millissecondssinceepoch;
未处理帧=(现在-最后)*60/1000;
而(未处理的帧>1.0){
勾选();
未处理的帧--;
}
renderGame();
window.requestAnimationFrame(_update);
}
空勾(){
}
void renderGame(){
总图视口(0,0,canvas.width,canvas.height);
gl.clear(WebGL.COLOR\u BUFFER\u位);
渲染器。绑定纹理(测试);
renderer.renderQuad(新的Vector2(canvas.width/2.0,canvas.height/2.0),128,128,0,0,false);
}
}
这是我的graphics.dart文件:

热身的一部分;
类纹理{
静态列表_pending=新列表();
字符串url;
int宽度、高度;
纹理数据;
bool-loaded=false;
纹理(this.url){
如果(gl==null){
_待定。添加(本);
}
否则{
加载();
}
}
静态void loadAll(){
_pending.forEach((e)=>e.load());
_挂起。清除();
}
空荷载(){
ImageElement img=新的ImageElement();
data=gl.createTexture();
img.onLoad.listen((e){
gl.bindTexture(WebGL.TEXTURE_2D,数据);
gl.texImage2DImage(WebGL.TEXTURE_2D,0,WebGL.RGBA,WebGL.RGBA,WebGL.UNSIGNED_BYTE,img);
gl.texParameteri(WebGL.TEXTURE\u 2D、WebGL.TEXTURE\u MIN\u过滤器、WebGL.NEAREST);
gl.texParameteri(WebGL.TEXTURE\u 2D、WebGL.TEXTURE\u MAG\u过滤器、WebGL.NEAREST);
宽度=img.width;
高度=img.高度;
加载=真;
});
img.src=url;
}
}
类顶点{
向量2位;
矢量4色;
Vector2 texCoord;
静态int-elementBytes=8;
静态int posElementCount=2;
静态int colorElementCount=4;
静态int-textureElementCount=2;
静态int posbytescont=posElementCount*elementBytes;
静态int colorByteCount=colorElementCount*elementBytes;
静态int-textureByteCount=textureElementCount*elementBytes;
静态int posByteOffset=0;
静态int colorByteOffset=posByteOffset+posBytesCount;
静态int-textureByteOffset=colorByteOffset+colorByteCount;
静态int-elementCount=posElementCount+
colorElementCount+textureElementCount;
静态整数步长=posByteCount+colorByteCount+
组织细胞计数;
顶点(){
pos=新矢量2(0.0,0.0);
颜色=新矢量4(1.0,1.0,1.0,1.0);
texCoord=新矢量2(0.0,0.0);
}
列出getElements(){
列出结果;
结果=[pos.x,pos.y,color.r,color.g,color.b,color.a,texCoord.x,texCoord.y];
返回结果;
}
}
类渲染器{
字符串vsusource=“”
高精度浮点;
属性向量2 a_pos;
属性向量2 a_texCoord;
属性向量4 a_颜色;
统一mat4项目;
统一mat4模型;
可变矢量2 v_texCoord;
可变vec4 v_位置;
可变的vec4 v_颜色;
void main(){
v_pos=proj*model*vec4(a_pos,0,1);
v_颜色=a_颜色;
gl_位置=项目*模型*vec4(a_位置,0,1);
}
“,”fsSource=“”
高精度浮点;
二维纹理均匀;
可变矢量2 v_texCoord;
可变vec4 v_位置;
可变的vec4 v_颜色;
void main(){
vec4 texColor=texture2D(纹理,v_texCoord);
gl_FragColor=vec4(1,1,1,1);
}
""";
WebGL.Shader vs,fs;
程序;
缓冲区vab,iab;
int-posLocation;
Matrix4 projMatrix;
顶点v0,v1,v2,v3;
WebGL.UniformLocation projLocation,modelLocation;
纹理;
void renderQuad(Vector2 pos,num w,num h,num uo,num vo,bool normalize,{Vector4 color,double rotation}){
如果(!texture.loaded)返回;
如果(color==null)color=newvector4(1.0,1.0,1.0,1.0);
如果(旋转==null)旋转=0.0;
Matrix4模型=新的Matrix4.identity();
模型翻译(位置x、位置y);
模型比例(w*1.0,h*1.0,0.0);
总账uniformMatrix4fv(模型位置、假、模型存储);
gl.uniformMatrix4fv(projLocation,false,projMatrix.storage);
如果(正常化){
uo/=纹理宽度;
vo/=纹理高度;
}
v0.color=v1.color=v2.color=v3.color=color;
v0.texCoord=新矢量2(uo+w*1.0,vo+h*1.0);v1.texCoord=新矢量2(uo+w*1.0,vo*1.0);
v2.texCoord=新矢量2(uo*1.0,vo*1.0);v3.texCoord=新矢量2(uo*1.0,vo+h*1.0);
_编译语法();
总帐付款人(WebGL.三角形,6,WebGL.UNSIGNED_SHORT,0);
}
void bindTexture(纹理纹理纹理){
纹理=tex;
gl.bindTexture(WebGL.TEXTURE_2D,TEXTURE.data);
}
void_compileVertices(){
列出顶点=[v0,v1,v2,v3];
Float32List vertexBuffer=新的Float32List(顶点.length*顶点.elementCount);
对于(int i=0;i