用Vc++opengl三维显示

用Vc++opengl实现读取TXT文件的坐标显示三维图像 用为彩色渲染

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

用Vc++opengl三维显示

用Vc++opengl实现读取TXT文件的坐标显示三维图像 用为彩色渲染

如何使用OpenGL做三维的桌面?

如何利用vc6.0制作三维场景桌子并在一个对话框中显示?有完整的代码是最好了,求大神赐教

OpenGL显示的图形没有三维效果,请大神帮忙看看是什么问题。万分感激。

![OpenGL显示时是这个样子](https://img-ask.csdn.net/upload/201706/29/1498723077_735831.png) ![想要的效果是这样的](https://img-ask.csdn.net/upload/201706/29/1498723089_182966.png) 我是读取了一个STL文件,想用OpenGL显示,但是显示出的效果却是第一幅图像平面的,我希望是像第二幅图那样显示的。请问是光照或者其他什么设置问题吗?希望大家能帮我看看,非常感谢!部分代码是这样的。 ``` Public Sub CreateGLPannel(Pannel As PictureBox)'创建绘图场景 Dim PixelFormat As GLuint Dim pfd As PIXELFORMATDESCRIPTOR With pfd .cColorBits = Bits .cDepthBits = 16 .dwFlags = PFD_DRAW_TO_WINDOW Or PFD_SUPPORT_OPENGL Or PFD_DOUBLEBUFFER .iLayerType = PFD_MAIN_PLANE .iPixelType = PFD_TYPE_RGBA .nSize = Len(pfd) .nVersion = 1 End With PixelFormat = ChoosePixelFormat(Pannel.hdc, pfd) SetPixelFormat Pannel.hdc, PixelFormat, pfd hrc = wglCreateContext(Pannel.hdc) wglMakeCurrent Pannel.hdc, hrc InitGL ResizeGLScene Pannel, 4000, 4000, 4000 End Sub Private Sub InitGL()‘绘图场景初始化 glShadeModel smSmooth glClearColor 0, 0, 0, 0 glClearDepth 1 glEnable glcDepthTest glDepthFunc cfLEqual glHint htPerspectiveCorrectionHint, hmNicest Lighting End Sub Private Sub Lighting()‘光照渲染 Dim Specular(0 To 3) As GLfloat Specular(0) = 0.5: Specular(1) = 1.5: Specular(2) = 2.5: Specular(3) = 3.5 glMaterialf faceFrontAndBack, Shininess, 0.5 glMaterialf faceFrontAndBack, mprSpecular, Specular(0) glMaterialf faceFrontAndBack, AmbientAndDiffuse, 0 glEnable glcColorMaterial glLightf ltLight0, lpmPosition, -100 glEnable glcLighting glEnable glcLight0 End Sub Public Sub DrawPart()‘绘制部件 glMatrixMode mmModelView glLoadIdentity Select Case isfrontview Case True gluLookAt 0, 0, 0, 0, -1, 0, 1, 0, 0 Case False gluLookAt 0, 0, 0, 0, 0, -1, 0, 1, 0 End Select Select Case zoomcounter Case 1.5 glScalef 1.5, 1.5, 1.5 Case 2 glScalef 2, 2, 2 Case 2.5 glScalef 2.5, 2.5, 2.5 Case 3 glScalef 3, 3, 3 End Select glTranslatef gpQuadX, 1000, -800 glRotatef grQuadX, 1, 0, 0 glRotatef grQuadY, 0, 1, 0 glRotatef grQuadZ, 0, 0, 1 DrawPartList End Sub Private Sub DrawPartList()‘以三角形的方式绘制 Dim i As Integer Dim Temp As Integer Dim TrangleCounter As Integer TrangleCounter = CInt((PartVertexCounter - 1) / 3) glColor3f PartColor.R, PartColor.G, PartColor.B glBegin bmTriangles For i = 1 To TrangleCounter Temp = (i - 1) * 3 + 1 glVertex3f Abs_PartVertex(Temp).x, Abs_PartVertex(Temp).y, Abs_PartVertex(Temp).z glVertex3f Abs_PartVertex(Temp + 1).x, Abs_PartVertex(Temp + 1).y, Abs_PartVertex(Temp + 1).z glVertex3f Abs_PartVertex(Temp + 2).x, Abs_PartVertex(Temp + 2).y, Abs_PartVertex(Temp + 2).z Next i glEnd End Sub ```

基于VS2013,如何用opengl读取stl文件,并且能够在VS里生成三维图形

如题! 因为刚学习opengl,很多东西不是很懂。老师最近又催的比较急,网上搜了很多资料,也是看的雾里云里的。所以希望大神们可以带我一下,教教我读取stl文件的具体操作以及涉及到的编程的东西。拜谢!!!

使用vc++6.0如何绘出三维立方体?

使用vc++6.0如何绘出三维立方体?是不是先要编三维场景的程序? 我是个新手 请高手帮忙指导一下

在MFC中实现交互,拖动鼠标使三维图像旋转的问题

是我的毕设中的一个目标,之前是实现了MFC的三维数据图像显示,现在导师要我做一个交互,拖动鼠标使图像旋转,不用openGL 目前是使用trackball,通过获取鼠标点击和释放点的坐标得到旋转矩阵,然后对视点进行旋转,实现图像的旋转。可是程序运行的问题是我拖动鼠标,图像没有旋转而是在放大跟缩小,找了两三天都不知道问题出在哪里,求大神指导! 本人c++小白,MFC小白·····

如何实现二维/三维地图?

怎么利用opengl绘制二维或者三维地图啊,想模仿一个飞机在空中飞的场景?求指导!

基于OpenGL的立体模型库开发

各位大神: 这是我的毕业设计题目,我不是学习软件的 我学的和计算机没关系 但是阴差阳错选了这个课题 短时间学不会 但是短时间要用,恳请有大神帮帮我 模型库不用 只要在vc6.0建立OpenGL的程序可以查看三维软件就好 求源文件 不好意思只有4个 都给了 要是可以的话 另有重谢

vs2015环境下OpenGL中怎样实现鼠标右键控制物体旋转

#include "StdAfx.h" #include "CloudPoint.h" #define GLUT_DISABLE_ATEXIT_HACK #include <GL/glut.h> #include <math.h> #include <stdio.h> CCloudPoint::CCloudPoint(void) { } CCloudPoint::~CCloudPoint(void) { } CCloudPoint *CCloudPoint::s_pCurrent = NULL; char *m_cFilename = NULL; //int CCloudPoint::s_argc = 0;//char** CCloudPoint::s_argv = 0; bool mouseLeftDown; bool mouseRightDown; float CCloudPoint::c=3.1415926535/180.0f; //弧度和角度转换参数 int CCloudPoint::du=90,CCloudPoint::oldmy=-1,CCloudPoint::oldmx=-1; //du是视点绕y轴的角度,opengl里默认y轴是上方向 float CCloudPoint::r=0.3f,CCloudPoint::h=0.0f; //r是视点绕y轴的半径,h是视点高度即在y轴上的坐标 int CCloudPoint::scale = 10; int CCloudPoint::iWindowsWidth = 800, CCloudPoint::iWindowHeight = 800; float CCloudPoint::x[1000000], CCloudPoint::y[1000000], CCloudPoint::z[1000000]; int CCloudPoint::iPointNumber = 0; int mButton = -1; void CCloudPoint::setFilename(char * m_cFilename) { this->m_cFilename = m_cFilename; } char* CCloudPoint::getFilename() { return m_cFilename; } void CCloudPoint::MouseCallback(int button, int state, int x, int y) { CCloudPoint::s_pCurrent->Mouse(button, state, x, y); } void CCloudPoint::onMouseMoveCallback( int x,int y) { CCloudPoint::s_pCurrent->onMouseMove( x,y); } void CCloudPoint::reshapeCallback(int w,int h) { CCloudPoint::s_pCurrent->reshape(w,h); } void CCloudPoint::myDisplayCallback(void) { CCloudPoint::s_pCurrent->myDisplay(); } void CCloudPoint::Mouse(int button, int state, int x, int y) //处理鼠标点击 { if (state == GLUT_DOWN) { oldmx = x, oldmy = y; } else { if (state == GLUT_UP && button == GLUT_WHEEL_UP) { if (scale>1) scale -= 1; else scale = 1; //glutPostRedisplay(); } else if (state == GLUT_UP && button == GLUT_WHEEL_DOWN) { scale += 1; //glutPostRedisplay(); } else if (state == GLUT_DOWN && button == GLUT_RIGHT_BUTTON) { mouseRightDown = true; } else if (state == GLUT_DOWN && button == GLUT_LEFT_BUTTON) { mouseLeftDown = true; } } } void CCloudPoint::onMouseMove(int x,int y) //处理鼠标拖动 { //printf("%d\n",du); if (mouseRightDown) { du += x - oldmx; //鼠标在窗口x轴方向上的增量加到视点绕y轴的角度上,这样就左右转了 h += 0.03f*(y - oldmy); //鼠标在窗口y轴方向上的改变加到视点的y坐标上,就上下转了 if (h > 1.0f) h = 1.0f; //视点y坐标作一些限制,不会使视点太奇怪 else if (h < -1.0f) h = -1.0f; oldmx = x, oldmy = y; //把此时的鼠标坐标作为旧值,为下一次计算增量做准备 } } void CCloudPoint::init() { glEnable(GL_DEPTH_TEST); } void CCloudPoint::reshape(int w,int h) { glViewport( 0, 0, (GLsizei)w, (GLsizei)h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective(90.0f, (GLfloat)w / (GLfloat)h, 1.0f, 1.0f); glMatrixMode( GL_MODELVIEW ); } void CCloudPoint::loadFile(char *cFileName) { FILE* file = fopen(cFileName,"r"); if (!file) { printf("load file %s failed\n",cFileName); } else { /*fseek(file,0,SEEK_END); long fileSize = ftell(file);*/ char buffer[1000]; while(fgets(buffer,300,file) != NULL) { sscanf(buffer,"%f, %f, %f", &x[iPointNumber], &y[iPointNumber], &z[iPointNumber]); iPointNumber++; //printf("x=%f, y=%f, z=%f\n", x, y, z); } } } void CCloudPoint::myDisplay(void) { int i; /*glClear(GL_COLOR_BUFFER_BIT);*/ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); //printf("At:%.2f %.2f %.2f\n",r*cos(c*du),h,r*sin(c*du)); //这就是视点的坐标 gluLookAt(r*cos(c*du), h, r*sin(c*du), 0, 0, 0, 0, 1.0f, 0); //从视点看远点,y轴方向(0,1,0)是上方向 glBegin(GL_POINTS); /*glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(0.5f, 0.5f, 0.5f);*/ for (i = 0; i < iPointNumber; i++) { glVertex3f(x[i]/scale, y[i]/scale, z[i]/scale); } glEnd(); glFlush(); glutSwapBuffers(); } void CCloudPoint::LoadAndShow() { int argc=1; char* argv[]={"good"}; //loadFile(CCloudPoint::getFilename()); glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowPosition(100, 0); glutInitWindowSize(iWindowsWidth, iWindowHeight); glutCreateWindow("OpenGL程序"); init(); glutReshapeFunc(CCloudPoint::reshapeCallback); glutDisplayFunc(myDisplayCallback); /*glutDisplayFunc(display);*/ glutIdleFunc(CCloudPoint::myDisplayCallback); //设置不断调用显示函数 glutMouseFunc(CCloudPoint::MouseCallback); glutMotionFunc(CCloudPoint::onMouseMoveCallback); glutMainLoop(); return; } 上面是我的代码,但是没有用,如果将void CCloudPoint::onMouseMove(int x,int y) 中的if语句去掉,就是任意鼠标键移动控制旋转,想问问大神

计算机图形学——如何用z-buffer算法画5个三角形

计算机图形学——如何用z-buffer算法画5个三角形 有哪位大佬知道怎么编写吗,能发一下源代码吗

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

Python可以这样学(第一季:Python内功修炼)

Python可以这样学(第一季:Python内功修炼)

C++语言基础视频教程

C++语言基础视频教程

Python可以这样学(第四季:数据分析与科学计算可视化)

Python可以这样学(第四季:数据分析与科学计算可视化)

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

Python数据分析与挖掘

Python数据分析与挖掘

微信小程序开发实战之番茄时钟开发

微信小程序开发实战之番茄时钟开发

软件测试2小时入门

软件测试2小时入门

相关热词 c# 开发接口 c# 中方法上面的限制 c# java 时间戳 c#单元测试入门 c# 数组转化成文本 c#实体类主外键关系设置 c# 子函数 局部 c#窗口位置设置 c# list 查询 c# 事件 执行顺序
立即提问
相关内容推荐