計算著色器中三維工作組使用三維紋理

2021-09-02 13:27:24 字數 1767 閱讀 2367

三維紋理的定義、資料繫結和二維、一維紋理相同,紋理有最大寬度、高度、深度限制,gl_max_texture_size的值是紋理的最大寬度和高度(二維和三維的最大寬度和高度一致,一維的最大寬度應該也是這個一維紋理使用較少),gl_max_3d_texture_size的值是三維紋理的最大深度。

查詢方式

glint max;

glgetintegerv(gl_max_texture_size, &max);

使用glbindimagetexture函式傳送紋理資料到著色器時需注意第四個引數設定。

glgentextures(1, &texid);//為紋理物件保留名稱

glbindtexture(gl_texture_3d, texid);//繫結到紋理目標

//設定紋理模式

gltexparameteri(gl_texture_3d,gl_texture_min_filter,gl_nearest);

gltexparameteri(gl_texture_3d,gl_texture_mag_filter,gl_nearest);

gltexparameteri(gl_texture_3d,gl_texture_wrap_s,gl_clamp);

gltexparameteri(gl_texture_3d,gl_texture_wrap_t,gl_clamp);

//定義紋理的資料格式,即生成乙個空紋理

glteximage3d(gl_texture_3d,0,gl_rgba32f_arb,width,height,deep,0,gl_rgba,gl_float,0);

//給紋理傳入資料

glbindtexture(gl_texture_3d,texid);

gltexsubimage3d(gl_texture_3d,0,0,0,0,width,height,deep,gl_rgba,gl_float,data);

#version 430 core

layout (local_size_x=4, local_size_y=4, local_size_z = 4) in;

layout (rgba32f, binding = 0) uniform image3d input_image;

layout (rgba32f, binding = 1) uniform image3d output_image;

void main(void)

gluseprogram(computerprogram);

//第四個引數設定是gl_true,當texid是一維或者二維紋理時不需要分層是gl_false;

glbindimagetexture(0, texid, 0, gl_true, 0, gl_read_only, gl_rgba32f);

glbindimagetexture(1, outputtexid, 0, gl_true, 0, gl_write_only, gl_rgba32f);

注意在opengl4.2及以上版本才可以使用。

void glbindimagetexture(gluint unit​, gluint texture​, glint level​, glboolean layered​, glint layer​, glenum access​, glenum format​);

參考**:(

python三維座標 python中三維輪廓的座標

感謝在這個 上獲得的知識。我能寫乙個簡單的指令碼,列印出等高線圖的座標 x和y 在 下面是乙個例子 from numpy import from pylab import generate a set of random points npts 500 phi random npts 2 pi th...

Webg中三維座標

1 webgl座標系 在現實世界中,所有的事物都是三維的的,而計算機螢幕顯示的是二維的圖形,將三維和二維聯絡在一起的紐帶就是座標。webgl處理的是三維圖形,所以它使用三維座標系統,具有x軸 y軸 z軸。當你面像計算機螢幕時,x軸是水平的 正 方向為右 y軸是垂直的 正方向為下 z軸垂直於螢幕 正方...

MATLAB中三維曲面命令

曲面圖是在網格圖的基礎上,在小網格之間用顏色填充。可以通過surf命令來畫曲面圖。如果想看曲面背後圖形的情況,可以在曲面的相應位置打個洞孔,即將資料設定為nan,所有的matlab作圖函式都忽略nan的資料點,在該點出現的地方留下乙個洞孔。例 觀察山峰在x 0.6,0.5 y 0.8,1,2 時曲面...