日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图解opengl曲线和曲面绘制

發布時間:2025/4/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解opengl曲线和曲面绘制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

VC6 下載
http://blog.csdn.net/bcbobo21cn/article/details/44200205

opengl環境配置
http://blog.csdn.net/bcbobo21cn/article/details/51044614#t4
?

以下的demo工程

http://pan.baidu.com/s/1kVGmRAJ

?

一?使用二維求值器繪制一個曲面

#include <windows.h> #include <GL/GLAUX.h> #include <GL/glut.h> #include <math.h> //GLfloat ctrlpoints[5][5][3] = {{{-2,0,0},{-1,1,0},{0,0,0},{1,-1,0},{2,0,0}}, //{{-2,0,-1},{-1,1,-1},{0,0,-1},{1,-1,-1},{2,0,-1}}, //{{-2,0,-2},{-1,1,-2},{0,0,-2},{1,-1,-2},{2,0,-2}}, //{{-2,0,-3},{-1,1,-3},{0,0,-3},{1,-1,-3},{2,0,-3}}, //{{-2,0,-4},{-1,1,-4},{0,0,-4},{1,-1,-4},{2,0,-4}}};GLfloat ctrlpoints[5][5][3] = {{{-3,0,0},{-1,1,0},{0,0,0},{1,-1,0},{3,0,0}}, {{-3,0,-1},{-1,1,-1},{0,0,-1},{1,-1,-1},{3,0,-1}}, {{-3,0,-3},{-1,1,-3},{0,0,-3},{1,-1,-3},{3,0,-3}}, {{-3,0,-3},{-1,1,-3},{0,0,-3},{1,-1,-3},{3,0,-3}}, {{-3,0,-4},{-1,1,-4},{0,0,-4},{1,-1,-4},{3,0,-4}}};GLfloat mat_ambient[] = {0.1,0.1,0.1,1.0}; GLfloat mat_diffuse[] = {1.0,0.6,0.0,1.0}; GLfloat mat_specular[] = {1.0,1.0,1.0,1.0};GLfloat light_ambient[] = {0.1,0.1,0.1,1.0}; //GLfloat light_diffuse[] = {1.0,1.0,1.0,0.0}; GLfloat light_diffuse[] = {0.2,1.0,0.2,0.0}; GLfloat light_specular[] = {1.0,1.0,1.0,0.0}; GLfloat light_position[] = {2.0,23.0,-4.0,1.0};void myInit(void) {glClearColor(0.0,0.0,0.0,0.0);//設置背景色/*為光照模型指定材質參數*/glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);glMaterialf(GL_FRONT,GL_SHININESS,60.0);/*設置光源參數*/glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);glLightfv(GL_LIGHT0,GL_POSITION,light_position);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);/*enable depth comparisons and update the depth buffer*/glEnable(GL_DEPTH_TEST);/*設置特殊效果*/glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE);glEnable(GL_BLEND);glEnable(GL_AUTO_NORMAL);glEnable(GL_NORMALIZE);glFrontFace(GL_CW);glShadeModel(GL_SMOOTH);glEnable(GL_LINE_SMOOTH);}void myDisplay(void) {glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(0.4,0.4,0.4);glTranslatef(0.0,-1.0,0.0);glRotatef(50.0,1.0,0.0,0.0);glPushMatrix();/*繪制曲面*/glEnable(GL_MAP2_VERTEX_3);glMap2f(GL_MAP2_VERTEX_3,0,1,3,5,0,1,15,5,&ctrlpoints[0][0][0]);glMapGrid2f(10.0,0.0,1.0,10.0,0.0,1.0);glEvalMesh2(GL_FILL,0,10.0,0,10.0);glPopMatrix();glutSwapBuffers(); }void myReshape(GLsizei w,GLsizei h) {glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,100.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(0.0,0.0,-5.0); }int main(int argc,char ** argv) {/*初始化*/glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);glutInitWindowSize(400,400);glutInitWindowPosition(200,200);/*創建窗口*/glutCreateWindow("lighted Bezier surface");/*繪制與顯示*/myInit();glutReshapeFunc(myReshape);glutDisplayFunc(myDisplay);/*進入GLUT事件處理循環*/glutMainLoop();return(0); }

?

void glMap2f(GLenum target,GLfloat u1,GLfloat u2,Glint ustride, Glint uorder, GLfloat v1, GLfloat v2, Glint vstride, Glint vorder, const GLfloat *points);
定義2維求值器。
  target指定求值器生成的數值類型。本例中的GL_MAP2_VERTEX_3 指明每一個控制點為x、y、z表示的三個浮點值。
  u1,u2指定線性映射。
  ustride 指定控制點Rij的起始點和控制點 R(i+1)j的的起始點之間單精度或雙精度浮點值的個數。這里i和j分別是u和v控制點索引,它允許控制點裝入任意的數據結構中。唯一的限制是對于特定控制點的數值必須存在連續的內存單元。
  uorder控制點數組在u軸方向上的維數。
  v1,v2指定線性映射v
  vstride指定控制點Rij的起始點和控制點 Ri(j+ 1)的起始點之間單精度或雙精度浮點值的個數。這里i和j分別是u和v控制點索引,它允許控制點裝入任意的數據結構中。唯一的限制是對于特定控制點的數值必須存在連續的內存單元。
  vorder控制點數組在v軸方向上的維數。
  points 一個指向控制點數組的指針。


glMapGrid定義一維或二維網格。
void glMapGrid2f(Glint un, GLfloat u1, GLfloat u2,Glint vn, GLfloat v1,GLfloat v2);
  un 在網格[u1,u2]中的分段數目。
  u1,u2 指定整數網格范圍 i= 0;i= un的映射。
  vn在網格[v1,v2]中的分段數目。
  v1,v2 指定整數網格范圍 j = 0;j= vn的映射。


glEvalMesh 計算一維或二維點或線網格。
void glEvalMesh2(GLenum mode,Glint i1,Glint i2,Glint j1,Glint j2);
  mode 指定是否計算二維點、線或多邊形的網格。
  i1,i2 分別為網格定義域變量i的第一個和最后一個整數值。
  j1,j2分別為網格定義域變量j的第一個和最后一個整數值。
  glMapGrid和glEvalMesh用來生成并求取一系列等間隔的網格點,glEvalMesh逐步計算一維或二維網格,他的定義范圍由glMap指定。mode決定最終計算的頂點是繪制為點、線還是充實的多邊形。

?

以下分別是兩組不同控制點的效果;控制點坐標在代碼中;

?

?

二?opengl繪制Bezier Curve

#include "gl/glut.h" int Line_Count = 80; // 線條數越大 曲面越平滑 // 線條數越小 曲面越粗糙 // 可以從 左下 右下 兩條曲線得到對比 // 左上曲線控制點 GLfloat ControlPoints0[4][3] = { { -4.0 , 1.0 , 0.0 } , // 控制點在數組中的順序決定曲線樣式 { -1.0 , 1.0 , 0.0 } , { -1.0 , 4.0 , 0.0 } , { -4.0 , 4.0 , 0.0 } }; // 右上曲線控制點 GLfloat ControlPoints1[4][3] = { { 4.0 , 1.0 , 0.0 } , { 1.0 , 4.0 , 0.0 } , { 1.0 , 1.0 , 0.0 } , { 4.0 , 4.0 , 0.0 } }; // 右下曲線控制點 GLfloat ControlPoints2[4][3] = { { 1.0 , -4.0 , 0.0 } , { 4.0 , -4.0 , 0.0 } , { 1.0 , -1.0 , 0.0 } , { 4.0 , -1.0 , 0.0 } }; // 左下曲線控制點 GLfloat ControlPoints3[4][3] = { { -4.0 , -4.0 , 0.0 } , { -1.0 , -4.0 , 0.0 } , { -4.0 , -1.0 , 0.0 } , { -1.0 , -1.0 , 0.0 } }; void Display( void ) { int i; glClear( GL_COLOR_BUFFER_BIT ); glLoadIdentity(); // 先繪制控制點 再繪制曲線 // 左上曲線 glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ControlPoints0[0][0]); glColor3f( 0 , 0 , 1.0 ); glBegin( GL_POINTS ); for( i = 0 ; i < 4 ; i++ ) { glVertex3fv( ControlPoints0[i] ); } glEnd(); glColor3f(0.0, 1.0, 0.0); glBegin( GL_LINE_STRIP ); for( i = 0 ; i <= Line_Count ; i++ ) { glEvalCoord1f( (GLfloat)i/Line_Count ); } glEnd(); // 右上曲線 glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ControlPoints1[0][0]); glColor3f( 1.0 , 0.0 , 0.0 ); glBegin( GL_POINTS ); for( i = 0 ; i < 4 ; i++ ) { glVertex3fv( ControlPoints1[i] ); } glEnd(); glColor3f(0.0, 1.0, 0.0); glBegin( GL_LINE_STRIP ); for( i = 0 ; i <= Line_Count ; i++ ) { glEvalCoord1f( (GLfloat)i/Line_Count ); } glEnd(); // 右下曲線 glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ControlPoints2[0][0]); glColor3f( 0.0 , 0.0 , 1.0 ); glBegin( GL_POINTS ); for( i = 0 ; i < 4 ; i++ ) { glVertex3fv( ControlPoints2[i] ); } glEnd(); glColor3f(0.0, 1.0, 0.0); glBegin( GL_LINE_STRIP ); for( i = 0 ; i <= Line_Count ; i++ ) { glEvalCoord1f( (GLfloat)i/Line_Count ); } glEnd(); // 左下曲線 Line_Count = 8; // 降低線條數 曲線變粗糙 glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ControlPoints3[0][0]); glColor3f( 1.0 , 1.0 , 0.0 ); glBegin( GL_POINTS ); for( i = 0 ; i < 4 ; i++ ) { glVertex3fv( ControlPoints3[i] ); } glEnd(); glColor3f(0.0, 1.0, 0.0); glBegin( GL_LINE_STRIP ); for( i = 0 ; i <= Line_Count ; i++ ) { glEvalCoord1f( (GLfloat)i/Line_Count ); } glEnd(); glFlush(); } void Initialize() { glClearColor( 0.0 , 0.0 , 0.0 , 0.0 ); glShadeModel( GL_SMOOTH ); glEnable(GL_MAP1_VERTEX_3); glEnable( GL_LINE_SMOOTH ); // 平滑線條 glPointSize( 6.0 ); // 把點變大一點 看的清楚 } void Reshape( int Width , int Height ) { glViewport( 0 , 0 , (GLsizei)Width , (GLsizei)Height ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); if( Width <= Height ) { glOrtho( -5.0 , 5.0 , -5.0 * (GLfloat)Height / (GLfloat)Width , 5.0 * (GLfloat)Height / (GLfloat)Width , -5.0 , 5.0 ); } else { glOrtho( -5.0 * (GLfloat)Width / (GLfloat)Height , 5.0 * (GLfloat)Width / (GLfloat)Height , -5.0 , 5.0 , -5.0 , 5.0 ); } glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); } void main() { glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB ); glutInitWindowSize( 700 , 700 ); glutInitWindowPosition( 162 , 34 ); glutCreateWindow( "Bezier Curve" ); Initialize(); glutDisplayFunc( Display ); glutReshapeFunc( Reshape ); glutMainLoop(); }

?

總結

以上是生活随笔為你收集整理的图解opengl曲线和曲面绘制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男生和女生一起差差差视频 | www精品一区二区三区 | 国产精品尤物 | 亚洲免费网 | 日产精品久久久久 | 翔田千里88av中文字幕 | 被灌满精子的波多野结衣 | 911av| 免费午夜视频在线观看 | 欧美整片在线 | 色播视频在线 | 日韩在线一二三区 | 欧美精品99 | 黑人巨大精品一区二区在线 | 大肉大捧一进一出好爽mba | 久久aⅴ国产欧美74aaa | 嫩草www | 日韩aⅴ在线观看 | av综合站 | 久久精品综合网 | 天天操天天干视频 | 日韩日日日 | 亚洲av成人片无码 | 国产欧美日韩视频在线观看 | 色综合久久久久 | 欧洲av一区| 后宫秀女调教(高h,np) | 四虎影视永久地址 | 国产乱淫av片 | av撸撸在线 | 亚洲免费av电影 | 一区在线观看视频 | 国产精品地址 | www.超碰在线观看 | 奇米成人网 | 午夜激情久久久 | 97人人澡 | 国产一级理论片 | 97超视频 | 黑人巨大国产9丨视频 | 小辣椒导航 | 久久99国产精品久久99果冻传媒 | 中文字幕一区二区在线观看视频 | 亚洲欧美中日韩 | 成年人黄色片 | 日韩精品激情 | 91婷婷色 | 亚洲精品久久久久久久久久吃药 | 精品欧美一区二区精品久久 | 香蕉久久久久 | 永久精品视频 | 日韩一区二区三区视频在线 | 久久网页 | 国产乱码久久久久久 | 少妇人妻好深好紧精品无码 | av免费观看大全 | 久草久操 | 小泽玛利亚一区二区三区在线观看 | av天堂一区二区三区 | 精品无码黑人又粗又大又长 | 日韩三级免费 | 国产成人av免费 | 亚洲欧美日韩成人 | 日本一区免费电影 | 合欢视频在线观看 | 特黄做受又粗又大又硬老头 | 中文字幕无码精品亚洲资源网久久 | 狠狠撸在线 | 18视频在线观看男男 | 极品美女无套呻吟啪啪 | 秋霞影院午夜老牛影院 | 又污又黄的网站 | 黄片毛片在线 | 亚洲一区二区三区电影在线观看 | 最近2019中文字幕大全第二页 | 欧美一级淫片免费 | 1000部啪啪未满十八勿入 | 中文字幕第23页 | 色狠狠一区二区三区香蕉 | 欧美精品一级 | 中文字幕人妻一区二 | 三级免费观看 | 久久久国 | 色戒在线免费 | 精品国产青草久久久久96 | 亚欧精品视频一区二区三区 | 色www国产亚洲阿娇 自拍一区在线 | 伊是香蕉大人久久 | 国产区免费观看 | 午夜一区二区三区免费观看 | 亚洲男人第一网站 | 91成年视频 | 亚洲欲妇| 日本成人久久 | 精品视频免费观看 | www色网站 | 户外露出一区二区三区 | 国产一级免费片 | 精品在线91|