opengl
文章平均质量分 61
juebai123
这个作者很懒,什么都没留下…
展开
-
使用vcglib库读取obj文件并显示(一或多个材质)
使用vcglib库读取obj文件,及多材质显示原创 2023-01-20 18:12:01 · 1020 阅读 · 0 评论 -
3ds模型--换纹理
前面的函数还是不能加载所有的TGA纹理,我们把不能显示的TGA转化成可以显示的文件格式,然后修改3ds中的纹理文件名。分成二步,1。把TGA转化为bmp(会丢失透明度)2。修改3ds中的纹理文件名这里用一个垮平台的qb64来转化。先来生成所有的TGA列表 批文件(bat)@rem 生成 list.txt@echo offfor %%i in (*.TGA) do翻译 2018-02-04 16:46:03 · 556 阅读 · 0 评论 -
3ds模型--换纹理续
第二步。修改3ds中的纹理文件名要修改先要知道原文件名和位置:在 CLoad3DS::ProcessNextMaterialChunk 中的 case MATMAPFILE: 中加两句case MATMAPFILE: // 材质文件的名称 { //------------------------------------------------+ long翻译 2018-02-04 22:09:52 · 414 阅读 · 0 评论 -
3ds模型--摆放地
这章加载一个地表图,也就是说画一个平面(长方形),并用一张图(纹理)贴在上面作为模型的停放地。为了方便使用单独写成一个cpp。定义一些变量:GLint DibiaoChangX,DibiaoKuanZ,DibiaoGaoY;//长度,宽度,高度(拼音)GLuint Dibiaotexture;//纹理ID加载和设置,放到前面的 init 部分://载入地表图set翻译 2018-01-29 11:18:18 · 603 阅读 · 0 评论 -
进入模型世界--漫游
以一个博文《OpenGL--摄像机漫游》为模板,把我们的3ds模型世界放到这个模板中把 Vector.h,Vector.cpp,Camera.h,Camera.cpp 和主程序复制过来,CBMPLoader.h,CBMPLoader.cpp 就不用了主程序加入我们的://主程序流程代码:#include <stdio.h>#include<gl/glut.h>#inc...翻译 2018-02-11 11:49:29 · 387 阅读 · 0 评论 -
3ds模型的天空
在《OpenGL--天空盒》为基础模板来实现。把SkyBox.h,SkyBox.cpp复制过来,由于不用 CBMPLoader(天空盒的bmp图太大,用jpg),对这两个文件略着修改.SkyBox.h://2,天空盒实现类//SkyBox.h 开始#ifndef __SKYBOX_H__#define __SKYBOX_H__#include <stdio.h>//#...翻译 2018-02-11 18:42:52 · 362 阅读 · 1 评论 -
3ds模型--流动的云
在“Pudn.com > 下载中心 > OpenGL > Sky”中找来Sky.h 和Sky.cpp 这个叫天空球,或叫天空穹,顶的代码把它加到我们的场景中,为了匹配我们的程序,部分代码需要修改.修改后的Sky.h:// Sky.h: CSky 类接口. // ///////////////////////////////////////////////////////...翻译 2018-02-12 19:00:44 · 417 阅读 · 0 评论 -
3ds模型--单模方阵(一模多用)
现在来试试同一个模型在多处显示。在《OpenGL读取3DS文件显示 + 屏幕虚拟球旋转》的基础上加减。一些全局变量:#define genum 100 //显示数量,可以是任意的(简单一点,不显示零头)typedef struct _boxbian //外框边界{ float xmin,xmax,ymin,ymax,zmin,zmax;}boxbian;boxb翻译 2018-02-07 15:44:02 · 310 阅读 · 0 评论 -
升级地球仪
前面的地球仪放大时,视点跑到内部去了,破坏了画面完整,现在来改进一下1。视点跟踪球大小。能如意调整地图清晰度和视野 gluLookAt(0.0, 0.0, m_sky.GetSkyR()*ArcBall->zoomRate+5.0,//视点跟踪球大小 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);2。全屏切换。充分利用屏幕空间。 cas...原创 2018-02-25 21:55:28 · 404 阅读 · 0 评论 -
全景图浏览器
让前面的程序成为一个全景图浏览器还要1。一个命令行载入图2。一个打开图像的对话框(右键菜单)命令行加载: init(); if(argc==2){ // 全路径读入一个纹理 PathBuildTexture(argv[1], SkyTexture[0]); m_sky.InitSky(0,0,0,R,SkyTexture[0]);//初始化天空球 }打开对话框:void...原创 2018-03-09 20:28:21 · 1449 阅读 · 2 评论 -
3DS轨迹球 + 光照
在前面的基础上 加个光照,会有什么效果?下面以博文《3D球体一个(纪念第一个opengl程序~~)》为模板,加入上一篇的代码下面是该文效果:加入我们的://显示有纹理贴图的3ds模型,+光照 +虚拟球旋转 //按a或d使...#define name3DS "Data/3ds/boy_back.3DS" //waji building_nb //wjj1_b翻译 2018-01-19 19:24:14 · 408 阅读 · 0 评论 -
3ds模型--光照开关菜单
由于显示效果不理想,现在来试试打开 和关闭光照效果有什么区别。加上菜单: glutCreateMenu(MenuProc); //菜单 glutAddMenuEntry("打开光照",1); glutAddMenuEntry("关闭光照",2); glutAttachMenu(GLUT_RIGHT_BUTTON);//关连到右键打开和关闭光照:void Men翻译 2018-01-28 09:48:26 · 275 阅读 · 0 评论 -
3ds多模型---排兵布阵
这一章来排一排模型位置。定义相关的结构:typedef struct _boxbian //外框边界{ float xmin,xmax,ymin,ymax,zmin,zmax;}boxbian;typedef struct _me3DS{ string fileName;//文件名 t3DModel Model;//模型 CLoad3DS *gothicL翻译 2018-01-26 21:33:23 · 275 阅读 · 0 评论 -
3DS多模块连动(机械臂)
现在来实现机械手臂运动,以一个挖掘机为例:我们把挖机分成几个部分1、底盘,2、可转车身,3、大臂,4、前臂,5、挖斗。流程:1。按名称分层2。找每层旋转轴3。计算每个的旋转角度4。分别绘制每层第1步。按名称分层:vector obj1vec,obj2vec,obj3vec,obj4vec ,obj5vec; //五层对象名 1、底盘,2、可转车身,3翻译 2018-01-22 21:27:57 · 739 阅读 · 2 评论 -
3DS各个模块的相对运动(续)
前面旋翼在直升机的外面旋转,应该是中心没求对,哪个旋翼毕竟不是四方盒,虽然它的名字叫Box03。现在,把它当作圆来求圆心,搜索网页找来一段代码:已知圆上三点计算圆心已知:startPoint、secondPoint、endPoint(不分先后)求:圆心坐标解:var tempA1,tempA2,tempB1,tempB2,tempC1,tempC2,temp,x,y;翻译 2018-01-21 14:04:18 · 323 阅读 · 0 评论 -
3DS浏览器(1)
看了一个博文《opengl载入多个3ds模型失败记》,他的方法非常好,就只差最后一步了。原程序运行图:下面用三种方法来做最后一步。1、运行外部程序2、点到一个文件就载入内存,并不释放内存直到程序结束(在内存中存放所有模型)3、释放上个文件,再载入当前的(只有一个模型)下面分别来实现:----------------------------------------转载 2018-01-23 16:01:09 · 752 阅读 · 0 评论 -
3DS浏览器(2)
第2种开始全局定义:typedef struct _me3DS{ string fileName;//文件名 t3DModel Model;//模型 CLoad3DS *gothicLoader;//类实例}me3DS;vector me3ds; // 所有模型t3DModel *gothicModel;//这个改为指针增加一个函数//按翻译 2018-01-23 19:55:31 · 432 阅读 · 0 评论 -
3DS浏览器(2)--之改进(居中显示)
接前面本来要实现第3种方法:原理也不复杂,在内存释放 t3DModel 占用空间,析构 CLoad3DS 的实例 gothicLoader由于对 c++ 的类不熟悉,可以说一窍不通,只能以后再说,再说真的实现了对效果是一样的,可能更不好,下次点击又要重新加载。现在先对前面的简单改进一下:1、在屏幕居中显示:把前面我们做好的 void zhong(GLvoid) 的加到这翻译 2018-01-25 10:27:00 · 439 阅读 · 0 评论 -
3ds预览---略缩图
为了一目了然知道模型是什么内容,我们来生成略缩图。分三步来实现:1、截屏保存图片(单个)2、搜索所有3ds模型,调用1,生成所有图3、同屏显示所有图片先来实现第一步,网页搜索找到一个截屏函数:void screenshot(void) { #define BMP_Header_Length 54 static GLubyte BMP_Header[BMP_H翻译 2018-01-25 16:07:42 · 615 阅读 · 0 评论 -
opengl 显示有纹理的四面体
在opengl贴吧中被人翻上来一个以前求助贴://照着NeHe的教程 lesson6,弄了个有纹理的四面体#include //用 auxDIBImageLoad 来加载纹理#include #pragma comment(lib,"GLAUX.lib")#includeGLuint texture[1];AUX_RGBImageRec *LoadBMP(char *Fi转载 2018-01-17 21:24:30 · 1200 阅读 · 2 评论 -
3ds模型大聚会--同时显示所有
略缩图的工作先放一下,先来有趣点调节一下。前面已经把所有模型加载,能不能所有的模型一起显示://绘制所有模型void drawAllModel(){ for (int i = 0; i < me3ds.size (); i++) { gothicModel=&me3ds[i].Model; printf("正在绘制 %d 中的第 %d 个模型\n",name翻译 2018-01-25 21:23:17 · 274 阅读 · 0 评论 -
OpenGL读取3DS文件显示 + 屏幕虚拟球旋转
这里要用到:1。CLoad3DS.h 和 CLoad3DS.cpp 用加载3DS模型2。ArcBall.h 和 ArcBall.cpp 用旋转查看,这个和meshlab中的旋转有一样效果(左键(+ 移动)旋转,右键(+ 移动)缩放)(sample.cpp 轨迹球例子)//显示有纹理贴图的3ds模型,+虚拟球旋转#define name3DS "Data/3ds/F111_L.3ds";//需转载 2018-01-18 09:28:40 · 1258 阅读 · 2 评论 -
3ds模型--完善TGA纹理显示
由前面知道,有几个模型不能显示纹理图,纹理文件名称被人改掉了,差不多都是TGA文件。哪人为什么要改呢?可能是CLoad3DS::BuildTexture不支持这些TGA。现在来解决这个问题。在博文《【OpenGL】游戏编程常用TGA图像格式详解以及加载纹理编程实现》中有 TGATexture.h 和 TGATexture.cpp 可以显示TGA文件,拿来测试下:这个"中景树.tga翻译 2018-02-02 11:12:32 · 968 阅读 · 0 评论 -
3DS各个模块的相对运动
由于3DS模型中分几个部分(模块),现在来研究下各个模块的相对运动,比如坦克的炮塔旋转,直升机螺旋浆转动来看一下 T_HELI_L.3DS 这个直升机的组成:for(unsigned int i=0;i<gothicModel.pObject.size();i++){ pVerts=gothicModel.pObject[i].pVerts; //显示对象名称 pri翻译 2018-01-21 10:11:03 · 413 阅读 · 2 评论