안드로이드 응용 프로그램,이 표면의 다른 정점에 depanding 표면의 법선을 계산하고 싶습니다. 많은 시간이 걸리기 때문에 나는 "마스터"프로그램에서 그것을하고 싶지 않습니다.OpenGL 2의 버텍스 쉐이더 프로그램에서 다른 버텍스에 접근하는 방법은 무엇입니까?
attribute vec3 a_bottom;
attribute vec3 a_left;
attribute vec3 a_right;
attribute vec3 a_top;
vec3 calculNormal() {
return normalize(cross((a_left - a_right) , (a_bottom - a_top)));
}
은 내가 아는 아주 아주 더러운 코드를 매우, 그래서 대신 4 개 배열을 전달하는, 내가하고 싶지 : 실제로 각 정점 나는 각 vextex 4 float 배열을 통과
vec3 calculNormal() {
vec3 a_left = CURRENT_FLOATBUFFER[ CURRENT_FLOAT_BUFFER_POSITION - 1 ];
vec3 a_bottom = CURRENT_FLOATBUFFER[ CURRENT_FLOAT_BUFFER_POSITION - X ];
...
return normalize(cross((a_left - a_right) , (a_bottom - a_top)));
}
그래서 버텍스 쉐이더 프로그램에서 현재의 float 버퍼에 접근 할 수 있습니까? currentFloat와 같은 특별한 키워드가 있습니까? 아니면 내가 그리워 할 또 다른 가능성이 있니?
안녕 datenwolf. 런타임에 객체를 생성 한 후 하이트 맵을 샘플링하려면 어떻게해야합니까? 셰이더를 통해 이것을 실행하여 하이트 맵을 샘플링하고 꼭지점을 변환 한 다음 다시 보내고 다른 VBO를 업로드해야합니까? 나는 CPU에서 텍스처를 샘플링하는 것이 실제로는 아니라고 생각합니다. 글 텍스는 glTexImage를 사용하여 업로드되었고 CPU는 실제로 그것을 가지고 있지 않습니다. – Zebrafish
@TitoneMaurice : 원래 질문은 일반적인 메쉬에 관한 질문이었습니다. 그러나 하이트 맵은 특별한 경우이며, 표면 법선은 오른쪽 커널 (이산 차이, 일명 그래디언트 커널)과의 컨볼 루션을 사용하여 계산할 수 있습니다. 'textureGather' (GLSL-4 이후)를 사용하면 2 × 2 그리드의 텍셀을 가져올 수 있습니다. 이것이 필요한 것입니다.그러나 법선을 미리 계산할 것을 권장합니다. 법선은 텍스처에 대한 법선 맵이 효과적인지를 알려줍니다. – datenwolf
@TitoneMaurice : 응용 프로그램 아이디어 : 고해상도에서 하이트 맵을 생성하고 그로부터 노멀 맵을 생성하고, 조명 계산을위한 전체 해상도 노멀 맵 (조각 셰이더에서) 및 버텍스 위치 변경을위한 하향 샘플 하이트 맵을 사용하십시오. 추가 아이디어 : 전체 해상도 높이 - 노멀 맵을 저장하고 버텍스 단계에서 더 낮은 해상도의 LoD에 액세스 할 수 있으며 프래그먼트 셰이더에서는 전체 해상도와 꼭지점 높이 값의 차이를 시차 매핑에 대한 입력으로 사용하여 시각적 품질을 높일 수 있습니다. – datenwolf