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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

soildworks模型导入MFC对话框

發布時間:2023/12/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 soildworks模型导入MFC对话框 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近項目需要把solidworks創建的設備模型導入MFC對話框中顯示,并且能鼠標控制移動、縮放。

軟件平臺包括 solidworks 2008 、3DS-Max 7.0 、 vs 2008 sp1;

openGL配置

提供最全的openGL庫,支持鼠標滾輪,配置方法


將下載的壓縮包解開,將得到5個文件(glut.dll, glut32.dll, glut.lib, glut32.lib,glut.h)
(1)把glut.h復制到x:\Program Files\Microsoft\Visual Studio 10.0\VC\include\gl文件夾中,如果沒有gl這個文件夾則可以自己新建一個。(x是你安裝VS的盤符號)
(2)把解壓得到的glut.lib和glut32.lib放到靜態函數庫所在文件夾(即與include并排的lib文件夾下)。
(3)把解壓得到的glut.dll和glut32.dll放到操作系統目錄下面的system32文件夾內。(典型的位置為:C:\Windows\System32)
(注:如在開發應用程序時用到OpenGL輔助庫函數,則還需下載相應動態鏈接庫,包含glaux.dll, glaux.lib, glaux.h,相應步驟同上)


在Visual C++中先右擊項目,選擇屬性,找到連接器標簽,最后在輸入中的附加依賴庫加上opengl32.lib glut32.lib glu32.lib.

3 #include<gl/glut.h>
?4?
?5 //#include<gl/glu.h>  //glut.h自動包含了glu.h 和 gl.h
?6?
?7 //#include<gl/gl.h>


點擊打開鏈接

1.在solildworks中創建設備模型,編輯好紋理,這里為了方便直接為模型上的顏色,沒有進行貼圖(關于soildworks的使用可另外參考教程)

2.保存模型文件為 .wtl格式

3.在3DS-Max 7.0中導入上面的.wtl文件,然后導出文件為.OBJ格式,同時導出素材庫即.mtl格式文件。


4.導入模型到MFC對話框

創建一個MFC對話框在OnInitDialog()中設置RC;

hrenderDC=::GetDC(this->m_hWnd);if(SetWindowPixelFormat(hrenderDC)==FALSE)// 設置像素格式return ;if(CreateViewGLContext(hrenderDC)==FALSE)//創建RC并選為所用return ; SetWindowPixelFormat( HDC hDC ) { PIXELFORMATDESCRIPTOR pixelDesc;pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);pixelDesc.nVersion = 1;pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |PFD_DOUBLEBUFFER |PFD_TYPE_RGBA;pixelDesc.iPixelType = PFD_TYPE_RGBA;pixelDesc.cColorBits = 32;pixelDesc.cRedBits = 0;pixelDesc.cRedShift = 0;pixelDesc.cGreenBits = 0;pixelDesc.cGreenShift = 0;pixelDesc.cBlueBits = 0;pixelDesc.cBlueShift = 0;pixelDesc.cAlphaBits = 0;pixelDesc.cAlphaShift = 0;pixelDesc.cAccumBits = 0;pixelDesc.cAccumRedBits = 0;pixelDesc.cAccumGreenBits = 0;pixelDesc.cAccumBlueBits = 0;pixelDesc.cAccumAlphaBits = 0;pixelDesc.cDepthBits = 0;pixelDesc.cStencilBits = 1;pixelDesc.cAuxBuffers = 0;pixelDesc.iLayerType = PFD_MAIN_PLANE;pixelDesc.bReserved = 0;pixelDesc.dwLayerMask = 0;pixelDesc.dwVisibleMask = 0;pixelDesc.dwDamageMask = 0;PixelFormat = ChoosePixelFormat(hDC,&pixelDesc);if(PixelFormat==0) // Choose default{PixelFormat = 1;if(DescribePixelFormat(hDC,PixelFormat,sizeof(PIXELFORMATDESCRIPTOR),&pixelDesc)==0){return FALSE;}}if(SetPixelFormat(hDC,PixelFormat,&pixelDesc)==FALSE){ return FALSE;}return TRUE; }
hrenderRC = wglCreateContext(hDC);if(hrenderRC==NULL)return FALSE;if(wglMakeCurrent(hDC,hrenderRC)==FALSE)return FALSE;隨后初始化openGL配置

glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_STENCIL);CRect clirc;GetClientRect(&clirc);window_width = clirc.Width();window_height = clirc.Height();glPolygonMode(GL_FRONT,GL_FILL);glPolygonMode(GL_BACK,GL_FILL);glClearColor(0.0, 0.0, 0.0, 0.0);//設置當前操作的矩陣為“模型”視圖矩陣glMatrixMode(GL_PROJECTION);//把當前矩陣設置為單位矩陣glLoadIdentity();//將當前控件設置為透視投影空間gluPerspective(45.0f, (float)window_width/(float)window_height, 0.1f, 100.0f);glMatrixMode(GL_MODELVIEW);glClearColor(0, 0, 0, 1);glClearDepth(1.0f); //把屏幕上的顏色清空glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);//啟動深度測試glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do 用于指定深度緩沖比較值。//glEnable(GL_NORMALIZE);//啟動剔除功能glEnable(GL_CULL_FACE);glEnableClientState(GL_VERTEX_ARRAY);glEnableClientState(GL_TEXTURE_COORD_ARRAY);// Setup other misc features.//打開光照功能glEnable( GL_LIGHTING );glEnable( GL_NORMALIZE );//設置顏色填充方式:GL_SMOOTH:平滑方式 GL_FLAT:單色方式glShadeModel( GL_SMOOTH );//glViewport(0,0,clirc.Width(),clirc.Height());// Setup lighting model.GLfloat light_model_ambient[] = {1.0f, 1.0f, 1.0f, 1.0f};GLfloat light0_diffuse[] = {1.0f, 1.0f, 1.0f, 1.0f};GLfloat light0_direction[] = {0.0f, 0.0f, 10.0f, 0.0f};GLfloat light_specular[] = {1.0f, 1.0f, 1.0f, 1.0f};// GL_LIGHT0 0號光源,以此類推// 光源位置由四個值表示(X,Y,Z,W)如果第四個值W為零,則表示該光源位于無限遠處,//前三個值表示了它所在的方向。這種光源稱為方向性光源,通常,太陽可以近似的被認為是方向性光源。//如果第四個值W不為零,則X/W, Y/W, Z/W表示了光源的位置。這種光源稱為位置性光源。對于位置性光源,//設置其位置與設置多邊形頂點的方式相似,各種矩陣變換函數例如:glTranslate*、glRotate*等在這里也同樣有效。//方向性光源在計算時比位置性光源快了不少,因此,在視覺效果允許的情況下,應該盡可能的使用方向性光源。glLightfv(GL_LIGHT0, GL_POSITION, light0_direction);//GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR屬性。這三個屬性表示了光源所發出的光的反射特性(以及顏色)。//每個屬性由四個值表示,分別代表了顏色的R, G, B, A值。GL_AMBIENT表示該光源所發出的光,經過非常多次的反射后,最終遺留在整個光照環境中的強度(顏色)。//GL_DIFFUSE表示該光源所發出的光,照射到粗糙表面時經過漫反射,所得到的光的強度(顏色)。//GL_SPECULAR表示該光源所發出的光,照射到光滑表面時經過鏡面反射,所得到的光的強度(顏色)。glLightfv(GL_LIGHT0, GL_AMBIENT, light_model_ambient);glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);glEnable( GL_LIGHT0 ); 然后讀取模型文件

// Center of the modelfloat modelCenter[] = {0.0f, 0.0f, 0.0f};if ( pModel ){glmDelete( pModel );pModel = NULL;}CString FileName;FileName = CommonFunction::GetApplicationPath() + _T("ESR.obj");//聲明標識符 USES_CONVERSION ;char * pFileName = T2A(FileName); // Load the new obj modelpModel = glmReadOBJ( pFileName);// Generate normal for the modelglmFacetNormals( pModel );// Scale the model to fit the screenglmUnitize( pModel, modelCenter );// Init the modelview matrix as an identity matrixglMatrixMode(GL_MODELVIEW);glLoadIdentity();glGetDoublev( GL_MODELVIEW_MATRIX, pModelViewMatrix );
繪制場景及模型

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslated( 0.0, 0.0, -5.0 );glMultMatrixd( pModelViewMatrix );if ( pModel ){glmDraw( pModel, GLM_FLAT|GLM_MATERIAL );}
窗口改變大小時候重繪模型 OnSize(UINT nType, int cx, int cy) {CDialog::OnSize(nType, cx, cy);window_width = cx;window_height = cy;// Reset the viewport//把像素繪制到窗口的哪個區域,前兩個參數定義了視口的左下腳(0,0表示最左下方),后兩個參數分別是寬度和高度glViewport(0, 0, window_width, window_height);//使用glMatrixMode來指定當前操作的究竟是模型視圖矩陣還是投影矩陣。glMatrixMode(GL_PROJECTION);glLoadIdentity();//為了得到透視效果,我們使用gluPerspective來設置可視空間。假定可視角為60度(如果調試時發現該角度不合適,可修改之。我在最后選擇的數值是75。),//高寬比為1.0。最近可視距離為1.0,最遠可視距離為200000000*2=400000000。即:gluPerspective(60, 1, 1, 400000000);gluPerspective(45.0f, (float)window_width/(float)window_height, 0.01f, 200.0f); }鼠標操作

OnLButtonDown(UINT nFlags, CPoint point) {// TODO: 在此添加消息處理程序代碼和/或調用默認值OldX = point.x;OldY = point.y;bLeftBntDown = true;CDialog::OnLButtonDown(nFlags, point); } OnLButtonUp(UINT nFlags, CPoint point) {// TODO: 在此添加消息處理程序代碼和/或調用默認值bLeftBntDown = false;CDialog::OnLButtonUp(nFlags, point); } OnMouseMove(UINT nFlags, CPoint point) {// TODO: 在此添加消息處理程序代碼和/或調用默認值if ( bLeftBntDown && pModel ){float fOldX = 2.0f*OldX/(float)window_width - 1.0f;float fOldY = -2.0f*OldY/(float)window_height + 1.0f;float fNewX = 2.0f*point.x/(float)window_width - 1.0f;float fNewY = -2.0f*point.y/(float)window_height + 1.0f;double pMatrix[16];trackball_opengl_matrix( pMatrix, fOldX, fOldY, fNewX, fNewY);glMatrixMode( GL_MODELVIEW );glLoadIdentity();glLoadMatrixd( pMatrix );glMultMatrixd( pModelViewMatrix );glGetDoublev( GL_MODELVIEW_MATRIX, pModelViewMatrix );OldX = point.x;OldY = point.y;}CDialog::OnMouseMove(nFlags, point); }
滾輪操作

OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) {// TODO: 在此添加消息處理程序代碼和/或調用默認值if (zDelta > 0){glMatrixMode( GL_MODELVIEW );glLoadIdentity();glLoadMatrixd( pModelViewMatrix );glScaled( 1.05, 1.05, 1.05 );glGetDoublev( GL_MODELVIEW_MATRIX, pModelViewMatrix );}if (zDelta < 0){glMatrixMode( GL_MODELVIEW );glLoadIdentity();glLoadMatrixd( pModelViewMatrix );glScaled( 0.95, 0.95, 0.95 );glGetDoublev( GL_MODELVIEW_MATRIX, pModelViewMatrix );}return CDialog::OnMouseWheel(nFlags, zDelta, pt); }
源碼 源碼

總結

以上是生活随笔為你收集整理的soildworks模型导入MFC对话框的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产性―交一乱―色―情人 | 播播开心激情网 | 干干操操| 欧美色图3p | 男人天堂v| 亚洲精品综合在线 | 人妻av无码一区二区三区 | 成人福利网址 | 久久久精品国产 | 嫩草视频在线免费观看 | 国产精品呦呦 | 日本一区不卡在线观看 | 自拍偷拍第一页 | 在线精品一区二区 | 伊人影院在线观看视频 | 天天爽夜夜操 | 福利免费视频 | 一眉道姑| 天堂成人在线视频 | 特级西西444www高清大胆 | 亚洲精选一区二区三区 | 日本全黄裸体片 | 高清一区二区三区 | 欧美又大粗又爽又黄大片视频 | 国产电影一区二区三区 | 亚洲大片在线观看 | 国产调教打屁股xxxx网站 | www.69视频 | 一级生活毛片 | 中国特级黄色大片 | av大片免费在线观看 | 91麻豆产精品久久久久久 | 欧美一级做a爰片久久高潮 久热国产精品视频 | 毛片高清| 涩涩片影院 | 成人免费视频毛片 | 色性av| 国产成人精品免高潮费视频 | 成人一级在线 | 日本免费网 | 狠狠操欧美 | 午夜三级av | 日韩第一区 | 开心激情深爱 | 黄色一级欧美 | 最近日韩中文字幕 | 欧美人和黑人牲交网站上线 | 青娱乐国产视频 | av一道本| 伊朗做爰xxxⅹ性视频 | 青娱网电信一区电信二区电信三区 | 日本丰满熟妇hd | 亚洲国产中文字幕 | 欧美精品在线观看视频 | 婷婷丁香社区 | 男生女生操操操 | 暗呦丨小u女国产精品 | 欧美在线亚洲 | 一本大道久久a久久综合婷婷 | 男人插入女人下面的视频 | 欧美久久久久久久久久 | 日韩欧美亚洲国产精品字幕久久久 | av天堂一区二区三区 | 女生扒开尿口让男生桶 | 高清欧美精品xxxxx在线看 | 法国极品成人h版 | 久久国产成人精品av | 二级毛片在线观看 | 成人黄网免费观看视频 | 亚洲国产精品成人无久久精品 | 青娱乐国产 | 国产一区二区自拍视频 | 男人久久久 | 99re在线视频播放 | 在线视频你懂得 | 亚洲va国产天堂va久久 en | 日本黄视频在线观看 | 久久金品 | 国内自拍第三页 | 日本成人a| 欧美性开放视频 | 亚洲欧洲在线播放 | 国产13页| 三上悠亚ssⅰn939无码播放 | 91小视频在线观看 | 久久久久久久久精 | 美女av在线免费观看 | 欧美一二三 | 亚洲视频导航 | 国产农村妇女精品一二区 | 亚洲乱码国产乱码精品精软件 | 小少妇哺乳喂奶播放 | 国产剧情一区在线 | 国产主播在线观看 | 老湿福利影院 | 涩涩屋视频 | 亚洲第一字幕 | 91高潮大合集爽到抽搐 | 国产又黄又湿 |