openGL 線型和線寬以及線抗鋸齒

2021-06-28 22:07:25 字數 3474 閱讀 7145

opengl 的線寬設定: gllinewidth(width); width 為 float 型別值,在 0~10.0 ,大於 10 以上按 10 來處理。

若開啟線的反走樣 glenable(gl_line_smooth); ,設定小數值才起作用,否則就四捨五入的處理整數了。

函式為 gllinestipple(factor, pattern[patternmode]);

其中 pattern 值可以是任意的你想要的,把 01 轉換為 16 進製的值就可以了。 factor 為縮放因子。

pattern 引數是由 1 或 0 組成的 16 位序列,它們根據需要進行重複,對一條特定的直線進行點畫處理。從這個模式的低位開始,乙個畫素乙個畫素的進行處理。如果模式中對應的位是 1 ,就繪製這個畫素,否則就不繪製。模式可以使用 factor 引數(表示重複因子)進行擴充套件,它與 1 和 0 的連續子串行相乘。因此,如果模式中出現了 3 個 1 ,並且 factor 是 2 ,那麼它們就擴充套件為 6 個連續的 1 。必須以 gl_line_stipple 為引數呼叫 glenable() 才能啟用直線點畫功能。

三、線寬**

"font-size:14px;">void show_width_lines(int width,float red,float green,float blue)

//啟用反走樣

glenable(gl_blend);

glenable(gl_line_smooth);

glhint(gl_line_smooth_hint, gl_fastest); // antialias the lines

glblendfunc(gl_src_alpha, gl_one_minus_src_alpha);

//初始化直線寬度

width=1.0;

// line_2

glcolor4f(0,green,0,1.0);

for (int i = 0; i < 8;i++ )

glflush();

}

四、線型**

"font-size:14px;">void show_dot_lines(int width,float red,float green,float blue)

;static

float angle = 0.0;

glenable(gl_blend);

glenable(gl_line_smooth);

glenable(gl_line_stipple);

//初始化直線寬度

width=2.0;

// line_2

glcolor3f(0,0,blue);

for (int i = 0; i<6; i++)

width = 1.0;

glcolor3f(red,0,0);

for (int i = 0; i<6; i++)

gldisable(gl_line_stipple);

glflush();

}

五、結果

線的線寬

線型--點劃線的實現效果

開啟的反走樣,為fastest. 當然你可以根據你效果與效率之間選擇自己需要的。

六、 全部 實現**和工程

"font-size:14px;">

#include

#include "glew.h"

#pragma comment(lib,"opengl32.lib")

#pragma comment(lib,"glu32.lib")

#pragma comment(lib,"./glew32.lib")

#include

//#include "glut.h"

#include

#include

#define drawoneline(x1,y1,x2,y2) glbegin(gl_lines);glvertex3f((x1),(y1),0); glvertex3f((x2),(y2),0);glend();

#define qingxie_ 2.0

// function declear

void init (void)

void show_width_lines(int width,float red,float green,float blue)

//啟用反走樣

glenable(gl_blend);

glenable(gl_line_smooth);

glhint(gl_line_smooth_hint, gl_fastest); // antialias the lines

glblendfunc(gl_src_alpha, gl_one_minus_src_alpha);

//初始化直線寬度

width=1.0;

// line_2

glcolor4f(0,green,0,1.0);

for (int i = 0; i < 8;i++ )

glflush();

}void line3f(glfloat fromx, glfloat fromy, glfloat fromz,

glfloat tox, glfloat toy, glfloat toz)

void show_dot_lines(int width,float red,float green,float blue)

;static

float angle = 0.0;

glenable(gl_blend);

glenable(gl_line_smooth);

glhint(gl_line_smooth_hint, gl_fastest); // 反走樣的fastest效果,也可以根據需要選擇gl_nicest.etc.

glblendfunc(gl_src_alpha, gl_one_minus_src_alpha);

glenable(gl_line_stipple);

//初始化直線寬度

width=5.0;

// line_2

glcolor3f(0,0,blue);

for (int i = 0; i<6; i++)

width = 1.0;

glcolor3f(red,0,0);

for (int i = 0; i<6; i++)

gldisable(gl_line_stipple);

gldisable(gl_blend);

glflush();

}void pointfun()

int main (int argc, char** argv)

openGL線型和線寬以及線的抗鋸齒

opengl的線寬設定 gllinewidth width width為 float 型別值,在 0 10.0 大於10 以上按10 來處理。若開啟線的反走樣glenable gl line smooth 設定小數值才起作用,否則就四捨五入的處理整數了。函式為gllinestipple factor...

OpenGL之抗鋸齒 以及 線寬的設定

原文 opengl之抗鋸齒 以及 線寬的設定 抗鋸齒 1.線的抗鋸齒 glenable gl line smooth 啟用 glhint gl line smooth,gl nicest 繪製 gldisable gl line smooth 關閉 2.點的抗鋸齒 glenable gl point...

OPENGL 抗齒鋸和其他基礎知識

以前記的東西都隨手亂扔,後來再想看都找不到筆記了。現在從新記載現在學習的東西,補救以前遺忘的知識。第一學習抗齒鋸。在學習sph的時候,看到很多程式用到 glblendfunc gl src alpha,gl one minus src alpha blend color with new color...