2011-01-11 4 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

정상적인 변환 코드가 잘못되었습니다. vertex shader에서'normal = vec4 (inverse (transpose (mat3 (modelViewProjectionMatrix)) * vertexNormal.xyz, 0.0);이어야합니다. – kvark

답변

0

난 당신이 조명을하려는 경우 법선을 사용하여 주위에 방법이 없다 생각합니다. 대개 내 3 차원 패키지에서 법선을 내보내고이를 사용하지만 C++ 코드에서 즉시 생성 할 수 있습니다. http://www.codeguru.com/cpp/g-m/opengl/article.php/c2681

+0

고맙습니다.하지만 정점과 조각 셰이더에서 제거하고 싶습니다. 이 순간 나는 어떤 조명도 원하지 않는다. 빛을 텍스처로 굽어 보겠습니다. – VansFannel

+2

죄송합니다. 귀하의 질문에 대해 오해했습니다. 왜 그냥 지울 수 없니? Afaik, 셰이더에서 법선을 선언하지 않으면 사용되지 않습니다. 두 셰이더 모두에서 선언 (vec4 normal;을 변경)을 제거하고 꼭지점 셰이더에서 일반 특성을 제거하면됩니다 (물론 해당 할당). 그리고 C++ 프로그램의 위치 및 uv 데이터 만 OpenGL에 전달해야합니다. – thbusch

관련 문제