opengl中點精靈的使用

2021-06-17 16:38:48 字數 1582 閱讀 3270

本人的個人部落格首頁為: 

csdn部落格首頁為:

現在假設在乙個opengl的場景中存在大量的點,在繪製中你可以使用glvertex3d函式,繪製出來後,如果點很小,你看到了是場景中大量的「點」,如果用glpointsize使點變大,你看到的是場景中有大量的「方格」。是的,opengl中的點,其實都是方格,只是如果尺寸太小,看上去就像是點了。

既然是方格,如果我現在就是希望點的尺寸很大,又使得大量的點都是圓形,怎麼辦呢?可以進行紋理貼圖。做乙個png格式的,中部是圓球,旁邊不需要的部分設定為透明,貼到各個點上就行了。

可是問題就來了,是乙個「矩形」,怎麼貼到「點」呢(雖然這個點顯示出來是矩形,但實際上你只有乙個座標,在數學上它是點)?這就要用到點精靈(point sprite)了。

這裡主要參考自:

在opengl中,讀取紋理,然後在後面加上一條語句 。

gltexenvi(gl_point_sprite, gl_coord_replace, gl_true);

在opengl的初始化函式中新增。

glalphafunc(gl_greater, 0.3);

表示只有當不透明度大於0.3的畫素才使用。

alpha值,即不透明度,opengl中被規劃到0到1中,值越大,就越不透明。當alpha值為1.0時是完全不透明的,即完全可見。

接下來在繪製中,**為:

glenable(gl_texture_2d);

glenable(gl_point_sprite);

glenable(gl_alpha_test);

glpointsize(15.0f);

glbegin(gl_points);

for(int i=0;i粒子通常是圓形,而貼圖是方形,所以需要用rgba格式,而不用rgb格式,即有alpha通道的格式。

這裡主要參考  

使用 glpng 來載入png格式的紋理

pnginfo info;

glgentextures(1, &texture[0]);

glbindtexture(gl_texture_2d, texture[0]);

texture[0] = pngbind("ball.png", png_nomipmap, png_alpha, &info, gl_clamp, gl_linear, gl_linear_mipmap_linear);

if( texture[0] == 0 )

/* 等同於

gltexparameteri(gl_texture_2d, gl_generate_mipmap, gl_true);

gltexparameteri(gl_texture_2d, gl_texture_mag_filter, gl_linear);

gltexparameteri(gl_texture_2d, gl_texture_min_filter, gl_linear_mipmap_linear);

pngload("ball.png", png_nomipmap, png_alpha, &info);

*/

openGL 中點Bresenham繪製直線演算法

macos xcode編譯器 include include include include include using namespace std float wid 400 設定視窗的大小,約定視窗必須為正方形 float height wid 設定視窗的大小 int numbers 20 設定...

OpenGL 利用中點演算法畫y kx b直線

本文直接用 0 k 1 來說明中點演算法畫直線。其他的斜率可直接按照此方法進行類推。1。設乙個函式為f x,y y kx b 若f x,y 0,那麼該點在這條直線的上方 若f x,y 0,那麼該點在這條直線上 若f x,y 0,那麼該點在這條直線下方 2。因為k的範圍是 0 k 1,那麼x平均每單位...

OpenGL擴充套件的使用

副檔名每個擴充套件都有乙個副檔名,副檔名類似如下形式 gl arb multitexture 第一段gl 用來表示針對 opengl 哪部分開發的擴充套件,有以下幾個值 gl 針對opengl 核心的擴充套件 wgl 針對windows 平台的擴充套件 glx 針對unix linux 平台的擴充套...