2014-01-13 5 views
1

곱하면 객체가 사라집니다.GLSL 나는이 버텍스 쉐이더를 가지고 매트릭스

는 여기에 내가 MVP를하고 있어요 코드입니다 :

mat4 model = translate(mat4(), vec3(0,0,0)); 
mat4 view = translate(mat4(), vec3(0,0,-10)); 
mat4 proj = perspective(90.0f, (float)1280/720, 0.001f, 1000.0f); 

mat4 MVP = model * view * proj; 

GLint uniform_loc = glGetUniformLocation(this->_shaderID, "MVP"); 
glUniformMatrix4fv(uniform_loc, 1, GL_FALSE, value_ptr(matrix)); 

내가 다른 곱셈 주문을 시도하고 쉐이더에서 multiplicating.

+0

'GLGeterror()'에서 얻은 것이 있습니까? 나는 당신이'vec3()'를've44()'에''mat4 '를 곱하기 전에 업 케이트해야한다고 생각합니다. 신경 쓰지 마라. 코드는 GLSL이 아닌 프로 그램에있다. 'vec4()'에 랩핑합니다. – zero298

+0

그런데 조각 쉐이더에서 클립 공간 위치 ('MVP * vertPosition')는 무엇이 필요합니까? 엄밀히 말하면 중요한 'W'구성 요소 (클리핑에 사용되는 이름, 즉 이름)를 잘랐으므로 클립 공간이 아니지만 여전히 유용하지는 않습니다. 조각 쉐이더는 이미'fragPosition'을 사용하는 것에 따라 화면 공간에 정의 된 위치 ('gl_FragCoord')를 암묵적으로 포함합니다. –

답변

0

여러 MVP가 취소 된 순서가 있습니다. OpenGL은 행렬 곱셈, 따라서 그것은

mat4 MVP = proj * view * model; 

0.0001의 가까운 클리핑 평면 거리가 너무 낮 있어야 칼럼 주요 오른쪽 연관된다. 본질적으로 모든 깊이 버퍼 해상도를 매우 작은 범위로 압축합니다. 가능한 한 크게하십시오.

fragPositionfragNormal에 대해 .rgb을 선택하는 이유가 없습니다.

+0

나는 그 명령을 시도했다. 그 셰이더는 이전에 작동했습니다. –

+0

@LiessJemai : 가까운 클리핑 비행기 거리도 문제가 있습니다. – datenwolf

+0

좋아, 나는 그것을 고치고있다. 그러나 개체가 사라지더라도, 나는 단지 신원을 얻고 있습니다. –

0

예제의 모양에서 유니폼을 설정하기 전에 셰이더 프로그램을 설정하는 것을 잊었습니다. 행렬을 설정하기 전에 glUseProgram(this->program); (프로그램을 저장 한 위치에 따라 다름)을 사용해보십시오!

관련 문제