LINUX.ORG.RU

Подозрение что веб-сервер не дает в цикле стягивать с него картинки

 ,


0

1

Пишу пет-проект в javascript не разбираюсь от слова совсем,в консоль вывожу сравнение текстур из картинок стянутых с сервера они равны друг другу, кроме первой и второй, код здесь https://codepen.io/JetStorm2/pen/VwVbrrZ рисует одну текстуру во всех полях, а должны быть разные



Последнее исправление: bad_master (всего исправлений: 1)
Ответ на: комментарий от bad_master

Конечно существует. В данном случае смысл в том, что с формулировкой «вот незнакомый код, найдите ошибку» лучше писать в Job. В текущем разделе могу посоветовать обратить внимание на дебаггер JS или хотя бы на расстановку console.log() в потенциально проблемных местах.

mydibyje ★★★★
()

в javascript не разбираюсь от слова совсем

Советую разобраться, он не очень сложный. В твоем скрипте ни чего такого не используется. В браузере есть консоль разработчика, там можно ставить точки остановки и делать отладку.

dicos ★★
()
	buf[(0 + i * nn) + jIter * n * nn] = xleft;
			buf[(1 + i * nn) + jIter * n * nn] = 0.68 * Math.sin((90.0 - 60.0 / n * i) * 0.0175);
			buf[(2 + i * nn) + jIter * n * nn] = 0.68 * Math.cos((90.0 - 60.0 / n * i) * 0.0175);
			buf[(3 + i * nn) + jIter * n * nn] = 1.0;
			buf[(4 + i * nn) + jIter * n * nn] = 1.0;
			buf[(5 + i * nn) + jIter * n * nn] = 1.0;
			buf[(6 + i * nn) + jIter * n * nn] = 1.0;
			buf[(7 + i * nn) + jIter * n * nn] = 0.0;
			buf[(8 + i * nn) + jIter * n * nn] = yTex;      
      
			buf[(9 + i * nn) + jIter * n * nn] = xleft;
			buf[(10 + i * nn) + jIter * n * nn] = 0.68 * Math.sin((90.0 - 60.0 / n * (i + 1)) * 0.0175);
			buf[(11 + i * nn) + jIter * n * nn] = 0.68 * Math.cos((90.0 - 60.0 / n * (i + 1)) * 0.0175);
			buf[(12 + i * nn) + jIter * n * nn] = 1.0;
			buf[(13 + i * nn) + jIter * n * nn] = 1.0;
			buf[(14 + i * nn) + jIter * n * nn] = 1.0;
			buf[(15 + i * nn) + jIter * n * nn] = 1.0;
			buf[(16 + i * nn) + jIter * n * nn] = 0.0;
			buf[(17 + i * nn) + jIter * n * nn] = yTex2;

			buf[(18 + i * nn) + jIter * n * nn] = xright;
			buf[(19 + i * nn) + jIter * n * nn] = 0.68 * Math.sin((90.0 - 60.0 / n * i) * 0.0175);
			buf[(20 + i * nn) + jIter * n * nn] = 0.68 * Math.cos((90.0 - 60.0 / n * i) * 0.0175);
			buf[(21 + i * nn) + jIter * n * nn] = 1.0;
			buf[(22 + i * nn) + jIter * n * nn] = 1.0;
			buf[(23 + i * nn) + jIter * n * nn] = 1.0;
			buf[(24 + i * nn) + jIter * n * nn] = 1.0;
			buf[(25 + i * nn) + jIter * n * nn] = 1.0;
			buf[(26 + i * nn) + jIter * n * nn] = yTex;

Напиши лучше скрипт, чтобы за ctrl+c, ctrl+v тебя током херачило.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

с координатами в этом buf все хорошо, а вот код текстур немного не работает


texturesVec.push(textureID);
  if(numID>=1){
    if(texturesVec[numID-1]==texturesVec[numID])
      console.log("T"+numID+"T");
  else
      console.log("F"+numID+"T");
  }
Выдает что все кроме 1й текстуры одинаковые тру

bad_master
() автор топика
Последнее исправление: bad_master (всего исправлений: 1)
Ответ на: комментарий от bad_master

кажется он сравнивает ссылки на объекты которые будут отличаться для каждого new Image() даже если содержимое и прочее будет одинаковым

открыв панель разработчика в браузере (F11) можно жамкнуть по выводу консоль.лога на его ссылке на файл справа pen.js, поставить там в коде точку останова и посмотреть обновив страницу что там прилетает и сравнивается

Syncro ★★★★★
()
Последнее исправление: Syncro (всего исправлений: 3)
Ответ на: комментарий от Syncro

так в том то и дело что они будут разные даже для одинаковых текстур - это же как указатель числовой на текстуру в плюсах, а тут они равны

bad_master
() автор топика
Последнее исправление: bad_master (всего исправлений: 1)
Ответ на: комментарий от bad_master

с координатами в этом buf все хорошо

Кроме того, что можно сделать цикл и не вычислять каждый раз Math.sin/cos((90.0 - 60.0 / n * i) * 0.0175), jIter * n * nn ... ппц ять.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от bad_master

а вот код текстур немного не работает

Ну так если ты туда пушишь текстуры с одной ид.

  texturesdrum.push(0);
  texturesdrum.push(0);
  texturesdrum.push(0);
  texturesdrum.push(0);
  texturesdrum.push(0);
  texturesdrum.push(0);
  texturesdrum.push(0);
Я тебе говорю серьёзно, вставь себе электрод в задницу и пусть током херачит. Через несколько итераций ты вообще перестанешь понимать что происходит в твоём лапшекоде.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от bad_master

Ты вообще понимаешь на чем пишешь? Ты уверен, что при == они не приведутся к строке? Ты в курсе, что тут нет перегрузок и == у объектов не работает? Потрудись изучить язык на котором пишешь хоть немного, чтобы потом глаза большие не делать и не орать, «ряяяя, жс не правильный!».

crutch_master ★★★★★
()
Ответ на: комментарий от bad_master
function LoadDrum(gl){
...
 var i=0;
    texturesdrum[i]=gl.createTexture();
    if (!texturesdrum[i]) {
      console.log('Failed to create the texture object');
      return false;
    }

    Sampler[i] = gl.getUniformLocation(gl.program, 'u_Sampler2');
    if (!Sampler[i]) {
      console.log('Failed to get the storage location of u_Sampler2');
      return false;
    }
    images[i]= new Image();
    if (!images[i]) {
      console.log('Failed to create the image object');
      return false;
    }
    requestCORSIfNotSameOrigin(images[i],paths_[i]);
    images[i].onload = function(){ loadTexture(gl, texturesdrum[i], Sampler[i], images[i],1); };
    images[i].src = paths_[i];
...
i = 1;
//тот же самый фрагмент

Смотри, как можно:

var paths = ["https://s6.imgcdn.dev/vzuCw.png",
  "https://s6.imgcdn.dev/vz6vL.png",
  "https://s6.imgcdn.dev/vzwnu.png",
  "https://s6.imgcdn.dev/vz40t.png",
  "https://s6.imgcdn.dev/vzC3T.png",
  "https://s6.imgcdn.dev/vzNwD.png",
  "https://s6.imgcdn.dev/vzQT9.png"]

  paths.forEach(function(path, i) {
    var texturesdrum =gl.createTexture();
    if (texturesdrum) {
      console.log('Failed to create the texture object', i);
      return false;
    }

    var Sampler = gl.getUniformLocation(gl.program, 'u_Sampler' + (i + 2));
    if (!Sampler) {
      console.log('Failed to get the storage location of u_Sampler' + (i + 2));
      return false;
    }
    var image = new Image();
    if (!image) {
      console.log('Failed to create the image object', i);
      return false;
    }
    requestCORSIfNotSameOrigin(image, path);
    image.onload = function(){ loadTexture(gl, texturesdrum, Sampler, images, i); };
    images.src = path;
});

Работать всё равно не будет, но если надо будет что-то поправить, тебе не надо будет это делать n раз, прикинь, как удобно.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

да у меня раньше было в цикле это, потом я подумал что надо не массив создать и в нем работать, а каждой текстуре свою уникальную переменную сделать поэтому код и развернул из цикла

bad_master
() автор топика
Ответ на: комментарий от crutch_master

что происходит в твоём лапшекоде.

я не уверен но похоже локальные переменные с текстурами стираются после добавления в вектор текстур. Из-за дурацких правил с областью видимости в этом тупом джаваскрипте. Либо последний bind и drawarrays как-то биндит одну текстуру на все объекты, я вообще уже ничего не понимаю

bad_master
() автор топика
Ответ на: комментарий от bad_master

я не уверен но похоже локальные переменные с текстурами стираются после добавления в вектор текстур.

Какой в жопу вектор, разберись, на чем пишешь.

Из-за дурацких правил с областью видимости в этом тупом джаваскрипте.

Ты не хочешь разбираться в языке - виноват язык. Логов насуй везде.

Либо последний bind и drawarrays как-то биндит одну текстуру на все объекты, я вообще уже ничего не понимаю

У тебя есть консоль разработчика. Выполняй там код, да смотри, что получается, если не понятно.

crutch_master ★★★★★
()

пет-проект в javascript не разбираюсь от слова совсем

Это шейдеры в WebGL, не совсем javascript.

Проблема скорее всего где-то тут, потому что так делать нельзя:

  requestCORSIfNotSameOrigin(fon,'https://s6.imgcdn.dev/v7wfT.png');
  fon.onload = function(){ loadTexture(gl, texturefon, u_Sampler, fon,0); };
  fon.src ='https://s6.imgcdn.dev/v7wfT.png'
  LoadDrum(gl);
  return true;
  //'https://s6.imgcdn.dev/vzMFa.jpg'

Но отлаживать такое целиком за тебя я не стану. Тебе надо сделать отдельный прототип с подгрузкой картинок, убедиться что все работает и только затем соединять с шейдером, благо что там тоже будет все непросто.

alex0x08 ★★★
()
Последнее исправление: alex0x08 (всего исправлений: 1)