OpenGL编程指南5:学习绘制不同风格的曲线
生活随笔
收集整理的這篇文章主要介紹了
OpenGL编程指南5:学习绘制不同风格的曲线
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.不同風格曲線繪制
#include <vgl.h> //宏定義;當定義的宏不能用一行表達完整時,可以用"\"表示下一行繼續 #define drawOneLine(x1,y1,x2,y2) \glBegin(GL_LINES);\glVertex2f((x1),(y1));\glVertex2f((x2),(y2));\glEnd();void init(void) {glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_FLAT); } void display(void) {int i;glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,1.0,0);//in 1st row, 3 lines,each with a different stipplesglEnable(GL_LINE_STIPPLE);glLineStipple(1,0x0101);drawOneLine(50,125,150,125);glLineStipple(1,0x00FF);drawOneLine(150,125,250,125);glLineStipple(1,0x1c47);drawOneLine(250,125,350,125);//in 2nd row, 3 wide lines,each with different stippleglLineWidth(5.0);glLineStipple(1,0x0101);drawOneLine(50,100,150,100);glLineStipple(1,0x00FF);drawOneLine(150,100,250,100);glLineStipple(1,0x1c47);drawOneLine(250,100,350,100);glLineWidth(1.0);//in 3rd row,6 line,with dash/dot/dash stippleglLineStipple(1,0x1c47);glBegin(GL_LINE_STIPPLE);for (int i = 0; i<7; i++){glVertex2f(50+((GLfloat)i*50),75);}glEnd();//in 4th row,6 independent lines with same stipplefor (int i = 0; i<6; i++){drawOneLine(50.0+((GLfloat)i*50), 50,50+((GLfloat)(i+1)*50), 50);}//in 5th row, 1line,glLineStipple(5,0x1c47);drawOneLine(50,25,350,25);glDisable(GL_LINE_STIPPLE);glFlush(); }void reshape(int w,int h) {glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0,(GLdouble)w,0,(GLdouble)h); }int main(int argc,char **argv) {glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400,150);glutInitWindowPosition(200,200);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return 0; }輸出結果:2.程序中關鍵點剖析
2.1?#define宏定義中‘\’神奇用法
\=行繼續操作:當定義的宏不能用一行表達完整時,可以用"\"表示下一行繼續此宏的定義。注意:最后一行不要加續行符啊。VC的預處理器在編譯之前會自動將\與換行回車去掉(寫成多行時,反斜杠后不能有空格,否則編譯器(ARM或VC)會報錯!),這樣一來既不影響閱讀,又不影響邏輯,皆大歡喜.2.2?glLineStipple()
viod glLineStipple(GLint factor,GLshort pattern);從這個模式的低位開始,一個像素一個像素的進行處理。如果模式中對應的位是1,就繪制這個像素,否則就不繪制。模式可以使用factor參數(表示重復因子)進行擴展,它與1和0的連續子序列相乘。因此,如果模式中出現了3個1,并且factor是2,那么它們就擴展為6個連續的1。必須以GL_LINE_STIPPLE為參數調用glEnable()才能啟用直線點畫功能。為了禁用直線點畫功能,可以向glDisable()函數傳遞同一個參數。
3.參看資料
[1]施萊爾, GrahamSellers, JohnKessenich,等. OpenGL編程指南[M]. 機械工業出版社, 2014.總結
以上是生活随笔為你收集整理的OpenGL编程指南5:学习绘制不同风格的曲线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从 VC7 的 CHtmlView 不能
- 下一篇: 按摩椅控件?