เปิดวิธีใช้ฟังก์ชัน glTexImage3D

รหัสต่อไปนี้ใช้ในการวาดมหาสมุทร ฉันพยายามแปลงเป็นรหัส c# แต่ฉันล้มเหลวเพราะฉันไม่เข้าใจว่าฟังก์ชัน 3 มิติทำอะไร ดังนั้นฉันจึงต้องการคำอธิบายเกี่ยวกับฟังก์ชันเหล่านี้ (ฉันหมายถึงพื้นผิว 3 มิติ)...

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;

person Tarek    schedule 14.05.2013    source แหล่งที่มา


คำตอบ (1)


พื้นผิว 3 มิติเป็นภาพเชิงปริมาตร กล่าวคือ เป็นรูปทรงลูกบาศก์ที่เต็มไปด้วยว็อกเซลของสี ดังนั้นแทนที่จะเป็นรูปภาพของ width × height · color_channels คุณจะมีรูปภาพของ width × height × depth · color_channels

นี่คือแอนิเมชั่นที่แสดงภาพปริมาตร (ได้รับความอนุเคราะห์จากคณะทำงานวิจัยที่ฉันเป็นสมาชิก): http://www.bmo.physik.uni-muenchen.de/~z19/OCTanimation.gif (น่าเสียดายที่ StackOverflow ไม่อนุญาตให้ลิงก์ GIF แบบเคลื่อนไหว)

ฉันเห็นมันแล้ว ส่วนเรื่องอื่นเกี่ยวกับการเรนเดอร์มหาสมุทรในอีกโพสต์หนึ่ง โปรดทราบว่านี่เป็นเรื่องที่ไม่สำคัญอย่างยิ่งซึ่งต้องใช้อัลกอริธึมที่ซับซ้อนมาก การใช้พื้นผิว 3 มิติที่เรียกว่า "inscatter" แสดงให้เห็นว่าโค้ดใดก็ตามที่คุณค้นหาใช้หนึ่งในโมเดลที่ซับซ้อนเหล่านั้น โดยที่พื้นผิว 3 มิตินั้นถูกใช้เป็นตารางค้นหาคำที่กระจัดกระจาย

โปรดทราบว่าหากไม่มีความเข้าใจที่มั่นคงเกี่ยวกับ OpenGL และวิธีการเชิงตัวเลขในการนำโปรแกรมสร้างภาพมหาสมุทรไปใช้ แทบจะเป็นไปไม่ได้เลยที่จะดำเนินงานนี้ ฉันจะเริ่มต้นด้วยการทำความเข้าใจพื้นฐานก่อน

person datenwolf    schedule 14.05.2013