Удалить нормали из вершинного и фрагментного шейдера

Я разрабатываю приложение для Android 2.2 с материалом OpenGL ES 2.0 на С++.

Вот мой вершинный и фрагментный шейдер:

static const char* cubeMeshVertexShader = " 

attribute vec4 vertexPosition; 
attribute vec4 vertexNormal; 
attribute vec2 vertexTexCoord; 

varying vec2 texCoord; 
varying vec4 normal; 

uniform mat4 modelViewProjectionMatrix; 

void main() 
{ 
   gl_Position = modelViewProjectionMatrix * vertexPosition; 
   normal = vertexNormal; 
   texCoord = vertexTexCoord; 
} 
";

static const char* cubeFragmentShader = " 

precision mediump float; 

varying vec2 texCoord; 
varying vec4 normal; 

uniform sampler2D texSampler2D; 

void main() 
{ 
   gl_FragColor = texture2D(texSampler2D, texCoord); 
} 
";

Я очень новичок в разработке OpenGL ES 2.0.

Кто-то сказал мне, что если я хочу, чтобы на моем рендере было освещение, мне нужно сделать некоторые усложнения в вершинном и фрагментном шейдерах. Так что я не знаю, как это сделать, нормали не нужны.

Мой вопрос:

Как модифицировать вершинные и фрагментные шейдеры, чтобы они не использовали нормали?

Спасибо


person VansFannel    schedule 11.01.2011    source источник
comment
Ваш обычный код преобразования все равно неверен. Должно быть normal = vec4(inverse(transpose(mat3(modelViewProjectionMatrix))) * vertexNormal.xyz, 0.0); в вершинном шейдере.   -  person kvark    schedule 11.02.2011


Ответы (1)


Я думаю, что нет никакого способа использовать нормали, если вы хотите иметь освещение. Обычно я экспортирую нормали из моего 3D-пакета и использую их, но вы всегда можете создать их на лету в своем коде на C++. http://www.codeguru.com/cpp/gm/opengl/article.php/c2681

person thbusch    schedule 11.01.2011
comment
Спасибо, но я хочу удалить его из вершинного и фрагментного шейдера. В данный момент мне не нужно никакого освещения. Я собираюсь запечь свет в текстуры. - person VansFannel; 11.01.2011
comment
Извините, тогда я неправильно понял ваш вопрос. Почему вы не можете просто удалить их? Афаик, если вы не объявите нормали в своем шейдере, он не будет использоваться. Вам нужно только удалить объявление (изменение vec4 normal;) в обоих шейдерах и удалить атрибут normal из вершинного шейдера (и, конечно, это назначение). И убедитесь, что вы передаете только данные о положении и ультрафиолете из вашей программы на С++ в opengl. - person thbusch; 11.01.2011