2012-05-10 2 views
-1

버텍스 쉐이더의 모든 꼭지점에 대해 단일 변수를 유지하는 것이 가능합니다. 첫 번째 정점에 액세스하는 두 번째 정점 ....모든 꼭지점에 대한 공통 변수

+1

_updation_? hahaha (no offense) – Shahbaz

+0

그래서 원하는 것은 동일한 정점을 가진 많은 정점을 가지는 것입니다. 그래서 당신이 하나를 바꿀 때, 그들 모두가 변합니까? 그렇다면 무엇이 중요한지 물어볼 수 있습니까? – Shahbaz

+1

유니폼은 모든 정점에서 균일합니다.하지만 셰이더 바깥에서 유니폼을 설정해야합니다. 나는 당신이 무엇을하려고하는지 잘 모르겠다. 그러나 이것은 비범 한 방법으로 들리며, 기하학 쉐이더가 필요할지도 모른다. – andyvn22

답변

2

버텍스 쉐이더에 대한 생각은 모든 버텍스에 대한 모든 쉐이더가 적어도 하드웨어가 지원할 수있는 범위에서 거의 동시에 실행된다는 것입니다.

따라서 첫 번째 꼭지점에 액세스하는 동안 변수를 업데이트하는 아이디어는 두 번째 꼭지점에 액세스하는 동안 반영되어야합니다. 두 번째 꼭지점이 첫 번째 꼭지점보다 먼저 처리 될 수 있습니다.

0

당신처럼 쉐이더 균일 변수를 선언 할 필요가 액세스하는 동안 반영해야한다 동안 내가 변수의 그 갱신을 의미 :

uniform vec3 lightDir; 

를 한 후 C에서 값을 전달을/이 C++ :

glUseProgram(shader_id) 
GLint location = glGetUniformLocation(shader_id, "lightDir"); 
    if(location != -1)glUniform3f(location, x,y,z); 

편집 :

당신은 지오메트리 셰이더의 정점 (gl_VerticesIn에 대한 루프)를 반복하고, 당 설정할 수 있습니다 -vertex 데이터. http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/geometry-shader-examples/

+1

"유니폼은 특정 렌더링 호출 내에서 셰이더 프로그램의 한 실행에서 다음 실행으로 변경되지 않기 때문에 이름이 지정되었습니다." 그가이 변수를 꼭지점 사이에서 업데이트하려고한다면, 유니폼은 그를 위해 작동하지 않을 것입니다. – luke

+0

허, 응. 그가 무엇을하고 싶은지 확실하지 않지만 기하학 셰이더에서 정점을 반복하고 정점 데이터를 설정할 수 있습니다. – ChatCloud

관련 문제