2013-05-14 3 views
1

다음 코드는 바다를 그리기 위해 사용되지만, C# 코드로 변환하려고했지만 3D 함수가 무엇인지 이해하지 못해 실패했습니다. 따라서이 함수에 대한 설명이 필요합니다. (3d 텍스쳐는 ...)OPENGL glTexImage3D 함수를 사용하는 방법

int res = 64; 
int nr = res/2; 
int nv = res * 2; 
int nb = res/2; 
int na = 8; 
f = fopen("E:\\New folder\\ConsoleApplication1\\Debug\\data\\inscatter.raw", "rb"); 
data = new float[nr*nv*nb*na*4]; 
fread(data, 1, nr*nv*nb*na*4*sizeof(float), f); 
fclose(f); 
glActiveTexture(GL_TEXTURE0 + INSCATTER_UNIT); 
glGenTextures(1, &inscatterTex); 
glBindTexture(GL_TEXTURE_3D, inscatterTex); 
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); 
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0); 
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA16F_ARB, na*nb, nv, nr, 0, GL_RGBA, GL_FLOAT, data); 
delete[] data; 

답변

4

3D 텍스처는 체적 상이다. 따라서 width × height · color_channels의 그림 대신 width × height × depth · color_channels의 그림이 있습니다.

이것은 체적 이미지 (내가 일하고있는 연구 작업 그룹의 법원)를 보여주는 애니메이션입니다 : http://www.bmo.physik.uni-muenchen.de/~z19/OCTanimation.gif (불행히도 StackOverflow는 애니메이션 GIF 링크를 허용하지 않습니다).

나는 그 sb를 보았다. 다른 게시물에서 바다 렌더링에 관한 내용이었습니다. 이것은 매우 정교한 알고리즘을 필요로하는 상당히 중요하지 않은 주제라는 것을 알아 두십시오. "inscatter"라는 3D 텍스처를 사용하면 찾은 코드가 복잡한 모델 중 하나를 구현하며 3D 텍스처는 산란 용어 찾아보기 테이블로 사용됩니다.

고체가없는 바다 렌더러를 구현하는 OpenGL 및 수치 방법에 대한 이해는 거의 불가능합니다. 기본을 먼저 이해하는 것으로 시작하겠습니다.

관련 문제