gpt4 book ai didi

javascript - 面向对象的 WebGL 上下文包装器失败

转载 作者:行者123 更新时间:2023-11-30 18:23:25 25 4
gpt4 key购买 nike

我开始使用 WebGL 进行开发,对 JavaScript 知之甚少。我正在尝试创建一个类来管理 WebGL 上下文。

我有以下内容:我的 HTML 页面:

<!DOCTYPE html>
<html>
<head>
<title> Star WebGL </title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link rel="stylesheet" type="text/css" href="estilos/main.css">

<script type="text/javascript" src="libs/webgl-debug.js"></script>
<script type="text/javascript" src="libs/clases/Contexto.js"></script>
<script type="text/javascript" src="libs/applicacion.js"></script>
</head>

<body>
<canvas class="screen" id="screen-canvas" width="640" height="480">
</canvas>
</body>

</html>

Contexto.js:

function Contexto( Canvas )
{
this.canvas = Canvas;
this.contextoGL;
this.contexto_creado = false;
}

Contexto.prototype.crearContextoWebGL = function ()
{
try
{
this.contextoGL = WebGLDebugUtils.makeDebugContext( this.canvas.getContext( "webgl" ) );
if( !this.contextoGL )
this.contexto_creado = false;
else
this.contexto_creado = true;
}
catch( e)
{
console.log( "No se puede crear un contexto gl" );
}
};

Contexto.prototype.contextoCreado = function ()
{
return this.contexto_creado;
};

Contexto.prototype.getGL = function ()
{
return this.contextoGL;
};

Contexto.prototype.setColor = function( r,g,b,a )
{
this.contextoGL.clearColor( r,g,b,a );
};

applicacion.js:

window.onload = main;

function main()
{
var canvas = document.getElementById( "screen-canvas");
var contextoWebGL = new Contexto( canvas );
contextoWebGL.crearContextoWebGL();
console.log( contextoWebGL.contextoCreado() );
contextoWebGL.setColor( 0.5161561076529324, 1, 0.7, 1 );
}

当我尝试更改背景时,

 contextoWebGL.setColor(  0.5161561076529324, 1, 0.7, 1  )

我收到以下错误:

 Uncaught TypeError: Object #<Object> has no method 'clearColor' 

创建面向对象上下文的正确代码是什么?

在 JavaScript 应用程序中使用面向对象代码时,效率会受到影响吗?

最佳答案

这里有两个问题:您没有获取上下文,并且您没有正确处理该故障。

  1. WebGLDebugUtils.makeDebugContext 不会测试它是否被赋予了一个实际的上下文,所以如果 getContext 返回 null,它会产生一个无用的对象,它的行为和你一样看到。你应该首先测试你是否成功获得了一个WebGL上下文,然后才使用makeDebugContext包装它。

    this.contextoGL = this.canvas.getContext( "webgl" );
    if( !this.contextoGL ) {
    this.contexto_creado = false;
    } else {
    this.contexto_creado = true;
    this.contextoGL = WebGLDebugUtils.makeDebugContext( this.contextoGL );
    }

    这将使您的代码正确地报告它未能获得上下文。这种结构还可以更轻松地选择不使用调试上下文,以获得更好的性能。

  2. 为了成功获得 WebGL 上下文,您可能想尝试名称“experimental-webgl”和“webgl”。例如,Chrome 不支持上下文名称“webgl”。

关于javascript - 面向对象的 WebGL 上下文包装器失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11494918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com