- 博客(35)
- 资源 (13)
- 收藏
- 关注
原创 vc++面向对象与可视化程序设计——万花筒的绘制
就是把圆分成若干份对应若干个+1个点,每个点和他后面的每个点都连线,思路很简单,主要是对近几章学的Windows API函数进行一下复习。#include <Windows.h>#include <tchar.h>#include <time.h>#include <stdio.h>#include <math.h>#def...
2020-04-29 21:53:39 1023
原创 IntelliSense: "const char *" 类型的实参与 "LPCWSTR" 类型的形参不兼容
最近在学windows编程时初始化窗口名时遇到这样的问题,这种问题都是因为传统字符编码和Unicode编码不兼容。同样,比如错误 1 error C2440: “初始化”: 无法从“const char [9]”转换为“TCHAR []”解决方法:加入头文件<tchar.h>然后把"。。。“改成_T(”。。。")...
2020-04-28 16:49:31 425
原创 用Assimp模型加载库加载一个Crytek的游戏孤岛危机(Crysis)中的原版纳米装(Nanosuit)
用这个例子来对GitHub上的LearnOpenGL教程前四个单元用到的所有自定义或者引入的各种头文件和资源进行一个总结,不得不说这个教程简直太美妙了。这个模型是来自对GitHub上的LearnOpenGL的一个例子:准备工作:用的是OpenGL和glfw,glfw安装配置可见:https://blog.csdn.net/derbi123123/article/details/104...
2020-04-27 12:43:49 1800
原创 Assimp模型加载库下载、编译、配置全过程
最近学完图形学基础后在老师的推荐下去看GitHub上的learnOpenGL教程,讲的挺好的,因为总用自己设置的那些顶点画不出来什么有意思的东西,所以需要从外部导入模型,教程中用的就是Assimp模型加载库。Assimp是Open Asset Import Library(开放的资产导入库)的缩写。Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至...
2020-04-27 12:42:21 9112 4
原创 error C2668: “std::to_string”: 对重载函数的调用不明确
error C2668: “*****”: 对重载函数的调用不明确:说明了你的参数类型没有明确的指明。你可以右键找到它定义的地方,找到你需要的重载函数对应的参数类型,然后对你的参数强制类型转换即可。我遇上的是to_string函数出现这个问题,to_string就是用来把数字类型的变量装换为字符串类型,他在头文件中的重载函数有很多:随便选一个就可以,在参数前强制类型转换即可。inline st...
2020-04-27 11:44:54 9178
原创 写一个自己的加载、绑定、设置纹理应用方式的函数
我用的stb_image.h加载图片到程序中,它下载地址和配置方式可见https://blog.csdn.net/derbi123123/article/details/105610298加载、绑定、设置纹理应用方式的函数:unsigned int loadTexture(char const * path){ //纹理也是使用ID引用的。让我们来创建一个 //glGenTextures...
2020-04-25 22:21:28 247
原创 我们自己的摄像机类(在OpenGL中造一个摄像机)
在学图形学时,我们都是通过把场景中的所有物体向z轴负方向移动来模拟出摄像头的感觉,但那样的话我们模拟摄像机移动时其实也只能移动物体,当然我们还可以用glLookAt改变对应参数来模拟摄像机移动会更真实一些。但我们如果要应用到着色器中只用glLookAt很不方便,比如我们经常要计算镜面反射光就需要视线方向,而且OpenGL本身没有摄像机的概念,但我们可以通过摄像机向后移动来模拟出摄像机,产生一种我...
2020-04-25 21:53:57 634 1
原创 将汉诺塔问题简单的可视化来形象的理解递归
在初学c语言时我们就是用汉诺塔问题来理解递归的,因为最近又看到了,然而我已经忘记当时是怎么操作的,所以利用最近学的图形学将其可视化加深理解。汉诺塔问题:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:...
2020-04-25 20:41:40 634
原创 实现游戏的读档和存档
最近学图形学经常用EasyX图形库去实现一些图形学算法,因为这个函数库使用方便,简化了很多配置,我也用它来做了一些小游戏,怎么储存上一次用户运行的信息就很关键,这里的实现也仅仅就是简单的文件读写操作,但是文件不仅仅可以实现游戏的读档和存档,还可以用来处理用户账户、登录信息、玩家统计、地图信息、关卡设计、游戏配置等持久化数据。很多时候我们按下“ESC”就会让游戏暂停,这时如果我们不想玩了,可以选择...
2020-04-24 19:53:11 6502 1
原创 互动粒子仿真效果(摩擦力、引力、击打力)
其实模仿力的作用,莫过于模仿力造成的加速度或者物体的形变,所以要模拟现实世界中的摩擦力、引力、击打力只需要根据他们作用力度给与一定的加速度去影响物体的速度即可,所以这个问题其实很简单。互动粒子仿真的主要功能:(1)粒子运动会受到摩擦力的影响(2)粒子会受到鼠标引力的影响,且距离越近引力越大(加速度越大)(3)粒子会受到鼠标单击(击打力)的影响,且距离越近力越大(加速度越大)(4)粒子会受...
2020-04-23 21:09:30 805
原创 实现黑客帝国的片头字符雨并控制其停止,显示“The Matrix”
最近在学图形学,作业涉及到做一个字符雨动画,这不禁让我想到黑客帝国的片头,黑客帝国的特效以及其跨时代意义在今天看来都令人惊叹,可见创作者对未来的洞悉,也能深深感受到计算机图形学的无穷魅力。因为OpenGL的框架略微繁琐,之前对一些图形学原理知识比如图形生成算法、裁剪算法、曲线生成算法等等,一直用EasyX二维图形库去进行绘制,这里也一样,其实和OpenGL相比不过就是简化了那些配置,变成了2维,...
2020-04-23 00:16:30 570
原创 通过一块半透明(Alpha值为0.5)的蓝色玻璃观察一个红色茶壶表面的效果
程序是很简单,但是不写确实发现不了其中的问题(其实是没认真复习忘了这个常识),既然是通过一块半透明(Alpha值为0.5)的蓝色玻璃观察一个红色茶壶表面的效果,所以蓝色玻璃在前,茶壶在后,所以我先画了一个蓝色的正方形,透明度为0.5,再画了一个茶壶,然后就成下面这样了。为什么蓝色玻璃不透明?因为在混合起来实现半透明效果时必须从远到近画,这很难以理解,不过仔细想想深度缓存的原理,其实就是让我们人...
2020-04-22 20:05:03 979
原创 关于聚光灯各种衰减系数的尝试体会聚光灯的效果
这是计算机图形学基础的课后题:编制OpenGL程序,显示包含一个球体和正四面体,使用有衰减的聚光灯进行光照,球面和正四面体具有不同的材质,分别调整球面和正四面体的材质属性,以及聚光灯的衰减系数(包括沿光线路径和聚光灯光锥体内的衰减),观察结果。OpenGL给的光照的相关函数真的多,分类非常细,需要根据光照计算公式以及函数说明去尝试并体会不同光照打在不同材质的物体上的效果。可以通过改变其中的参数...
2020-04-21 21:35:44 1318
在OpenGL中创建一个球体动画,使球体在窗口内做自由落体运动,并在撞击地面后能够返回原来高度
这是计算机图形学基础的一道单元练习题,看题的时候觉得没什么,写出来才发现其中大有门道,其中有几个值得关注的地方:首先如果你是以窗口底部为地面的话,你会发现小球在第二次下落时无法回弹,这就很恶心了,做了很多无谓的尝试查了一些资料最后也只是找到了一个合适的位置让小球可以一直下落和回弹。还有一个细节就是我初始化小球y坐标为9.0001,而其回弹的最高位置是9.0,如果初始化小球y坐标也是9.0,小...
2020-04-21 16:09:06 3000
原创 GLM数学库的配置,比之前的 SOIL2 配置简单多了,还更好用。
GLM是OpenGL Mathematics的缩写,它是一个只有头文件的库,也就是说我们只需包含对应的头文件就行了,不用链接和编译。GLM可以在它们的网站上下载。关于版本的问题,有一个重点:GLM库从0.9.9版本起,默认会将矩阵类型初始化为一个零矩阵(所有元素均为0),而不是单位矩阵(对角元素为1,其它元素为0)。如果你使用的是0.9.9或0.9.9以上的版本,你需要将所有的矩阵初始化改为 ...
2020-04-19 10:36:45 872
原创 用stb_image.h轻松地加载图片到程序中(比如纹理)
stb_image.h是Sean Barrett的一个非常流行的单头文件图像加载库,它能够加载大部分流行的文件格式,并且能够很简单得整合到你的工程之中。stb_image.h可以在https://github.com/nothings/stb下载。解压后找到stb_image.h加入你的工程,并另创建一个新的C++文件,输入以下代码:#define STB_IMAGE_IMPLEMENTA...
2020-04-19 09:50:05 10624 3
原创 我们自己的着色器类(为了不每次使用shader都搞那么多代码用来配置各种东西)
在https://blog.csdn.net/derbi123123/article/details/105566292中我总结了glfw+shader的程序框架,在https://blog.csdn.net/derbi123123/article/details/105566505中我总结了freeglut+shader的程序框架。然而:编写、编译、管理着色器是件麻烦事。其实下面的类也就是对在...
2020-04-17 10:22:05 923
原创 freeglut+shader的程序框架
最近学图形学学到了shader,刚开始接触简直要吐了,但是看过几个例子程序后逐渐习惯了,也体会到用shader要远比正常绘制香很多,尤其是当数据过大时,但是他有一套繁琐的机制,在看过很多不同教程后我总结了一套程序框架,重点还是在于shader的配置。关于glew:它提供了所有扩展功能函数的接口,在freeglut中使用shader必须要用glew。使用glewInit(); 进行初始化,具体...
2020-04-16 20:49:27 516
原创 glfw+shader的程序框架
最近学图形学学到了shader,刚开始接触简直要吐了,但是看过几个例子程序后逐渐习惯了,也体会到用shader要远比正常绘制香很多,尤其是当数据过大时,但是他有一套繁琐的机制,在看过很多不同教程后我总结了一套程序框架,重点还是在于shader的配置。关于shader的函数(都是自己封装的):void setShaders(void);其中有对shader的基本配置链接等等超全的集合。void...
2020-04-16 20:42:28 514
原创 编程实现多边形的平移、比例(缩放)、旋转、对称和错切等二维仿射变换(大有门道)
这是计算机图形学基础的一个课后题,其实完全可以直接用OpenGL提供的几何变换的函数轻松的实现,但是毕竟学就要学明白,仔细写这个题一是为了回顾一下各种变换对应的变换矩阵和数学规律,二是加深一下对交互的使用,三是去体会OpenGL绘图时交换不同变换的顺序时会有什么变化(体会为什么有时候不能交换变换顺序)。首先声明一个十分鸡肋的概念:什么是二维仿射变换?仿射变换是一种二维坐标到二维坐标之间的线性变...
2020-04-13 23:36:16 9469 6
原创 对交互式绘制三次贝塞尔曲线的改进(二)——鼠标交互实现曲线的拼接
关于贝塞尔曲线在我的分类专栏的计算机图形学总结中有几篇文章分别给出了定义、递推公式、OpenGL贝塞尔曲线函数取实现贝塞尔曲线的绘制以及贝塞尔曲线的原理,至于交互式绘制三次贝塞尔曲线则是课后题,这次终于把这道课后题完整的实现了。课后题:交互式绘制三次贝塞尔曲线,要求可以实现曲线的拼接,并据此验证贝塞尔曲线的凸包性、端点等性质。贝塞尔曲线拼接的条件:首先肯定是连接处的坐标相等了,在程序中有...
2020-04-09 21:40:32 1520
原创 本想以等边三角形实现kock雪花曲线,却错误的画出与之完全不同的皇冠上的钻石,体会到了分形学的奥妙
首先来看kock曲线是如何生成的:(1)过程:主要分为三大步骤:第一步,给定一个初始图形(这里是线段);第二步,将这条线段中间的1/3从中点向外折起(夹角为60度);第三步,按照第二步的方法不断的把各段线段中间的1/3处向外折起。(2)新生成图形的坐标:假设原直线的首尾点是P0(x0,y0)和P1(x1,y1),那么新生成的图形的五个端点就是:(注意第三个端点的正负号表示中间两条新直线位...
2020-04-08 22:25:31 1148 2
原创 以等边三角形实现迭代次数在6次以内的kock雪花曲线并用键盘交互控制迭代次数
在https://blog.csdn.net/derbi123123/article/details/105397176中详细说明了kock曲线的原理并以直线段实现迭代次数在6次以内的kock曲线并用键盘交互控制迭代次数代码:功能:按a增加迭代次数,按d减少迭代次数。迭代六次(按六次a)效果:#include <GL/freeglut.h>#include <math...
2020-04-08 22:14:22 918
原创 以直线段实现迭代次数在6次以内的kock曲线并用键盘交互控制迭代次数
最近学图形学学到了分形学的一些相关概念和知识,恰好课后题中有一道题就是要去实现kock曲线的绘制,分形学的魅力太大了,自然界的很多东西都可以用分形学中迭代/递推的思想的绘制出来,而且只要找到规律/公式可以非常简单的编写程序去实现,很方便,也利于计算机提高效率。首先来看kock曲线是如何生成的:(1)过程:主要分为三大步骤:第一步,给定一个初始图形(这里是线段);第二步,将这条线段中间的1/3...
2020-04-08 21:31:40 796 1
原创 对交互式绘制三次贝塞尔曲线的改进(一)
之前做的https://blog.csdn.net/derbi123123/article/details/105345888这个交互式绘制三次贝塞尔曲线只能选中四个控制点之后再把控制图形画出来,由于昨天实现了连续折线的绘制,所以我们可以边选取控制点,边画控制图形和三次贝塞尔曲线了。右键点击可以清除上一次绘制,左键点击可以选择控制点,鼠标移动可以控制控制图形边的斜率。#include ...
2020-04-08 10:17:04 735
原创 OpenGL交互式连续折线的绘制
没什么难的,都是调用OpenGL的API函数去实现即可,却也有一些小的细节处理:flag:用来标记是否开始交互,因为所有折线(直线段)的第一个端点和最后一个端点都是仅被一条直线占有,而中间的端点因为绘制的是连续折线,都是被两条直线共同占有,这在交互时设定端点坐标和重绘是有一个小细节。看代码中有注释。功能:左键点击选择端点,鼠标移动控制线的斜率,再次点击第二个端点画线,右击可以清除上一次画...
2020-04-07 15:28:27 1539
原创 设置随机种子的函数: srand(种子);的重要性
游戏中,许多情况都是随即发生的。还有一些图案程序,例如屏保,也是随即运动的。这就需要用随机函数。随机函数很简单,只有一个:rand()该函数返回 0~32767 之间的一个整数。(不需要记住 32767 这个数字,大概知道这个范围就行了),该函数在头文件 <stdlib.h> 中,使用前记得引用。然而!!!!虽然产生的数字是随机的,但每次产生的数字序列都一样。 为什么????因为...
2020-04-06 23:19:49 2659
原创 交互式地绘制三次贝塞尔曲线(OpenGL中贝塞尔曲线函数实现)
在下面两篇文章中我分别用贝塞尔曲线的定义公式和递推公式实现了贝塞尔曲线的绘制https://editor.csdn.net/md/?articleId=105316199https://editor.csdn.net/md/?articleId=105317678这里我们使用OpenGL中贝塞尔曲线函数实现贝塞尔曲线的绘制,另外可以让用户自己通过鼠标选择四个控制点,画三次贝塞尔曲线。重要函...
2020-04-06 16:33:46 2101 4
原创 根据Bezier曲线的定义公式实现Bezier曲线的绘制
Bezier曲线的定义公式Pi是曲线上点的坐标(x,y,(z=0)), Bi,n(t)伯恩斯坦公式,绘制Bezier曲线的第一种方法是根据这个公式来绘制。首先看看绘制的效果:(1)计算定义中多项式的值首先要求伯恩斯坦公式的多项式的值Cni,写成后面这种阶乘的形式方便用程序去表达了://计算定义中多项式的值void GetCnk(GLint n,GLint *c)//n是控制点的个数...
2020-04-04 22:51:38 3416
原创 根据de Castel jau的递推算法实现Bezier曲线的绘制
de Castel jau的递推算法(1)原理(2)这么说很难看懂,举个例子结合理解:首先画出控制点:然后取两条曲线的1/3处的点并连线:p01 中1表示第一层,也就是第一次取等比例的点,0表示这一层的第0个点,其他同理再取连线上的1/3处的点:显然p02 已经是最后一个可以取等比例处的曲线的点了,所以曲线上t=1/3处的点就是p02 ,同理可以求t=1/2、1/4.。。...
2020-04-04 22:50:36 3026
转载 分形学——无穷放大的曼德布洛特集
先给出这篇文章的链接https://codebus.cn/yangw/post/zoomable-mandelbrot-set最近在学计算机图形学,学到kock曲线时无意中看到了这篇文章,更加深刻地体会了迭代在图形学中的无穷魅力,曼德布洛特集可以看下面的draw函数,理论上是可以无穷放大,但实际受 double 类型精度的影响,放大到一定程度就会是马赛克了。看看效果:代码:// 程序名称:...
2020-04-02 20:54:57 1385
原创 用OpenGL的字符函数在屏幕上写OpenGL
在OpenGL实用程序工具包中包含了一些预定义的字符库,用来显示点阵和矢量字符。函数 void glutBitmapCharacter(void *font,int character);显示一个GLUT位图字符。用函数glutBitmapCharacter 显示字符时,是将当前的光栅位置作为字符的左下角点,函数执行后,点阵字符装入刷新缓冲存储器,当前的光栅位置会在x坐标方向上获得一个字符宽度的...
2020-04-01 22:08:05 2047
原创 OpenGL分别用点和折线模式实现正弦和余弦曲线的绘制
点就是直接用vertex,折线就用GL_LINE_STRIP的模式其次就是正弦和余弦曲线用程序表示就是:先看看用点画的-π到π区间的正弦曲线 //用点画正弦曲线 glColor3f(1.0,0.0,0.0); glTranslatef(250,250,0); glBegin(GL_POINTS); for(float x=-PI ; x<PI ; x+=2*PI/180){ ...
2020-04-01 21:51:04 2278
原创 OpenGL结合书中画苍蝇对位图的思考——镂空效果的实现以及利用位图实现用黑白相间的棋盘图案填充多边形
原理及重要函数说明其实在画虚线和点划线时就已经利用16进制的每位来代表线段的一部分是开还是关(转换为二进制后也就是1画,0不画),这里的道理类似,只不过因为是绘制平面所以规则更多,但原理和画线一样。所谓镂空,不就是舍弃一部分不画来达到更好的效果吗。用到的重要函数:(1)glEnable(GL_POLYGON_STIPPLE);启用多边形填充模式顾名思义,POLYGON是多边形,STIPPL...
2020-04-01 21:17:21 1167
Unity游戏UI界面框架设计系列视频课程
2022-01-06
OpenGL(glfw)实现的一个消砖块的游戏
2020-05-23
Assimp.rar
2020-05-04
glfw-glad-Cmake.rar
2020-03-26
适用于vs2010、2015freeglut、glew编译好的.h、lib、dll文件以及测试程序.rar
2020-03-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人