Я изучаю динамику жидкости (и Хейкс), и наткнулся на этот удивительный проект и подумал, что постараюсь расширить его, чтобы помочь мне учиться.Демонстрацию оригинального проекта в действии можно увидеть здесь .
Пока что я создал боковое меню из предметов, содержащих разные формы.Когда пользователь нажимает на одну из фигур, а затем нажимает на холст, выбранное изображение должно быть отпечатано на красителе.Затем пользователь будет двигать мышь и исследовать искусство и т. Д.
Чтобы попытаться добиться этого, я сделал следующее:
import js.html.webgl.RenderingContext;
function imageSelection(): Void{
document.querySelector('.myscrollbar1').addEventListener('click', function() {
// twilight image clicked
closeNav();
reset();
var image:js.html.ImageElement = cast document.querySelector('img[src="images/twilight.jpg"]');
gl.current_context.texSubImage2D(cast fluid.dyeRenderTarget.writeToTexture, 0, Math.round(mouse.x), Math.round(mouse.y), RenderingContext.RGB, RenderingContext.UNSIGNED_BYTE, image);
TWILIGHT = true;
});
После этого вызова внутри функции обновления у меня естьследующее:
override function update( dt:Float ){
time = haxe.Timer.stamp() - initTime;
performanceMonitor.recordFrameTime(dt);
//Smaller number creates a bigger ripple, was 0.016
dt = 0.090;//@!
//Physics
//interaction
updateDyeShader.isMouseDown.set(isMouseDown && lastMousePointKnown);
mouseForceShader.isMouseDown.set(isMouseDown && lastMousePointKnown);
//step physics
fluid.step(dt);
particles.flowVelocityField = fluid.velocityRenderTarget.readFromTexture;
if(renderParticlesEnabled){
particles.step(dt);
}
//Below handles the cycling of colours once the mouse is moved and then the image should be disrupted into the set dye colours.
}
Однако, хотя проект создается, я не могу запечатлеть изображение на холсте.Я проверил журнал консоли и вижу следующую ошибку:
WebGL: INVALID_ENUM: texSubImage2D: недопустимая цель текстуры
Безопасно ли предполагать, что мое приведение дляпервый параметр не допускается?
Я прочитал, что текстурная цель является первым параметром, а INVALID_ENUM
, в частности, означает, что один из параметров gl.XXX
просто некорректен для этой конкретной функции.
Просмотр файла writeToTexture
объявлен так: public var writeToTexture (default, null):GLTexture;
.WriteToTexture
- это обертка вокруг обычного дескриптора webgl.
Я использую Haxe version 3.2.1
и Snow
для сборки проекта.WriteToTexture
определяется внутри HaxeToolkit\haxe\lib\gltoolbox\git\gltoolbox\render