Skip to content

Task1 - #1

Open
ElinRin wants to merge 4 commits into
masterfrom
gh-pages
Open

Task1#1
ElinRin wants to merge 4 commits into
masterfrom
gh-pages

Conversation

@ElinRin

@ElinRin ElinRin commented Mar 15, 2018

Copy link
Copy Markdown
Owner

No description provided.

Comment thread index.html Outdated
uniform sampler2D uSampler;

void main(void) {
vec4 textureColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

просто vTextureCoord

Comment thread index.html Outdated

void main(void) {
vec4 textureColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
gl_FragColor = vec4(textureColor.rgb * vLightWeighting, textureColor.a);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В принципе альфа-канал не используется.
Попробуйте написать gl_FragColor.rgb = textureColor.rgb * vLightWeighting;

Comment thread index.html Outdated
vLightWeighting = vec3(1.0, 1.0, 1.0);
} else {
vec3 transformedNormal = uNMatrix * aVertexNormal;
float directionalLightWeighting = max(dot(transformedNormal, uLightingDirection), 0.0);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Освещение лучше считать в фрагментном шейдере из-за таких штук, early z test, линейная интерполяция выходных переменных вершинного шейдера + когда вы освещаете фрагменты, вы с нужной детализацией считаете освещение там, где оно нужно, а когда вы освещаете вершины, вы освещаете их независимо от их угловых размеров и попадания в камеру.

Comment thread index.html
gl.useProgram(shaderProgram);

shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вы редактируете VAO, привязанный по умолчанию. Это, в принципе допускается, т.к. создание VAO в WebGL требует или специального расширения, или спецификации версии 2. Но этого точно не нужно делать при создании шейдера.

Comment thread index.html
gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mvMatrix);

let normalMatrix = mat3.create();
mat4.toInverseMat3(mvMatrix, normalMatrix);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если сужение матрицы модели до матрицы 3х3 даёт ортогональную матрицу, то спец. матрица для нормалей вам не нужна. Ну и если масштабирование по осям равномерное, тоже.

Comment thread index.html
}
}

spaceVertexNormalBuffer = gl.createBuffer();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сделайте один interleaved буфер - уложите все атрибуты в него. Зачем использовать лишние идентификаторы буферов, если у они "живут" вместе?
В принципе, когда у вас несколько объектов и вы понимаете, что им "долго вместе существовать", имеет смысл их пихать в один буфер, чтобы в случае совпадения набора текстур (если сильно заморочиться, можно их текстуры в мегатекстуру сложить, тогда вообще будет вах) можно было сэкономить на количестве команд отрисовки (glDraw...).

Comment thread index.html
gl.uniform1i(shaderProgram.samplerUniform, 0);

gl.bindBuffer(gl.ARRAY_BUFFER, spaceVertexPositionBuffer);
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, spaceVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вот как раз сюда рядом и нужно enableVertexAttribArray.
Вообще, делают так: создают VAO на связку шейдер + буфер и настраивают это отдельно, вне цикла рендеринга.
К сожалению, похоже на то, что концепция separate attribute format, когда можно отдельно задать формат атрибутов и отдельно одной командой привязать буферы, ещё не прижилась в WebGL (если бы прижилась, можно было создавать VAO на связку шейдер + набор атрибутов + способ укладки атрибутов в буфере(-ах)).

Comment thread index.html Outdated
uniform mat4 uPMatrix;
uniform mat3 uNMatrix;

uniform vec3 uAmbientColor;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Похоже на то, что значения юниформ-переменных света нигде не передаются.
По умолчанию они улетают в 0, можно устанавливать дефолтные значения какие угодно.

Comment thread index.html
gl.bindTexture(gl.TEXTURE_2D, texture);
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.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Попробуйте LINEAR_MIPMAP_LINEAR, а то текстура мажется.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Up

Comment thread index.html

uniform vec3 uAmbientColor;

uniform vec3 uPointLightingLocation;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Обычно источнику света задают только один вид интенсивности на все случаи, а вот у материала настраивают диффузный, спекулярный цвет (в модели Блинна-Фонга)

Comment thread index.html
gl.bindTexture(gl.TEXTURE_2D, texture);
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.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Up

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants