2011-01-11 18 views
0

C++でOpenGL ES 2.0のAndroid 2.2アプリケーションを開発しています。ここで頂点シェーダとフラグメントシェーダから法線を削除します

は私の頂点とフラグメントシェーダです:

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の開発に非常に新しいです。

誰かが、私がレンダリングにライトを必要とすると、頂点シェーダとフラグメントシェーダで複雑な修正を加えなければならないと言ってきました。だから、私はそれをする方法はありません、法線は必要ではありません。

私の質問は:

私は法線を使用していないため、頂点とフラグメントシェーダを修正するにはどうすればよいですか?

おかげ

+0

通常の変換コードは、とにかく正しくありません。頂点シェーダで 'normal = vec4(inverse(transpose(mat3(modelViewProjectionMatrix)))* vertexNormal.xyz、0.0);とする必要があります。 – kvark

答えて

0

私はあなたのライティングを持っているしたい場合は法線を使用して周りに方法はありませんだと思います。私は通常、3Dパッケージから法線をエクスポートして使用しますが、あなたはいつでもC++コードでそれらを作成することができます。 http://www.codeguru.com/cpp/g-m/opengl/article.php/c2681

+0

ありがとうございますが、頂点とフラグメントシェーダから削除したいと思います。この瞬間、私はどんな照明も望んでいません。私はテクスチャに光を焼くつもりです。 – VansFannel

+2

申し訳ありませんが、あなたの質問を誤解しました。なぜあなたはそれらを単に取り除くことができないのですか? Afaik、あなたのシェーダの法線を宣言しなければ、それは使われません。両方のシェーダで宣言(vec4 normal;を変更)を削除し、頂点シェーダからの通常の属性(もちろんその割り当て)を削除するだけです。また、あなたのC++プログラムからのpositionとuvのデータだけをopenglに渡すようにしてください。 – thbusch

関連する問題