Я работаю над веб-приложением, используя Nitrous.IO, который представляет собой структуру Ruby-on-Rails, и хочу создавать 3D-графику с использованием WebGL на страницах. Я столкнулся с проблемой, когда изображение не отображается, и я считаю, что это пустая текстура. Внутри холста (который отображается) должен быть вращающийся куб, но файл .png, который должен быть текстурой, не будет отображаться. Изображение находится в моей папке /assets/images и помечено как «nehe.png». Вот два шейдера, которые я использую:
<script id="shader-fs" type="x-shader/x-fragment">
precision mediump float;
varying vec2 vTextureCoord;
uniform sampler2D uSampler;
void main(void) {
gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
}
<script id="shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition;
attribute vec2 aTextureCoord;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
varying vec2 vTextureCoord;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
vTextureCoord = aTextureCoord;
}
А вот код, который должен импортировать текстурирование:
function handleLoadedTexture(texture) {
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.bindTexture(gl.TEXTURE_2D, null);
}
var neheTexture;
function initTexture() {
neheTexture = gl.createTexture();
neheTexture.image = new Image();
neheTexture.image.onload = function () {
handleLoadedTexture(neheTexture)
}
neheTexture.image.src = "nehe.png";
}
Я не могу придумать другого способа загрузить изображение в рельсы, кроме как с помощью (%= image_tag %>, но когда я использую это, страница не загружается и возникает ошибка. Если есть кто-то, кто может помочь, это бы Я хотел бы в конечном итоге использовать файл .jpeg в качестве текстуры, но .png - хорошее начало.
Спасибо!
gl.TEXTURE_WRAP_S
иgl.TEXTURE_WRAP_T
наgl.CLAMP_TO_EDGE
, поэтому, если ваша текстура не является степенью двойки в обоих измерениях, она не будет отображаться. И вы должны были увидеть сообщение об ошибке в консоли JavaScript. - person gman   schedule 15.04.2016