- 博客(6)
- 收藏
- 关注
原创 关于Assertion failed: abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0)line:251报错
主要在于我的glm::perspective(glm::radians(45.0f),(float)WIDTH/HEIGHT,01f,100.0f);我的WIDTH与HEIGHT会随着我的窗口改变而改变,但是却忘记限定我的width与height范围。注意:当WIDTH/HEIGHT无穷大或者接近与0的时候,会由于float精度值限制而导致计算错误。在运行程序时,编译是没有问题的,但是运行时出现以下错误。限制WIDTH与HEIGHT的值就可以正常运行了。
2024-12-20 10:33:58
163
原创 谈OpenGL光照基础-基础光照
还有就是,环境光照总是存在的。当我们讲到材质一节的时候,物体材质的环境光照就等于其漫反射光照。所以可以将物体本身的环境光照忽略。同时要注意一点,求一个物体的光照,我们应该要考虑的是环境光照+漫反射光照+镜面光照,这样会更加的真实。环境光照:环境光照=环境光*环境因子*物体光(环境因子可理解为控制环境光的强度)漫反射:漫反射光照=环境光照*(入射光与法线的余弦值)*物体光照;镜面光照:镜面光照=环境光*镜面光照因子*反光度*物体光。以上光照相加就是我们要的作用在物体身上的总光照啦!下图为漫反射角度图形理解。
2024-12-02 20:32:23
255
原创 OpenGl中的顶点缓冲区、顶点数组、顶点属性数组的关系(修正)
3、顶点属性数组:是顶点数组的一种表现形式,对每个顶点指定属性。所以顶点属性数组要在顶点数组之前创建。2、顶点数组:顶点数组的数据需要被复制到顶点缓冲区,它是顶点缓冲区对象的基础,所以要在顶点缓冲区之前创建。1、顶点缓冲区:本质上是GPU上的一段显存,主要用来存储顶点数据(包括了顶点属性);顶点数组创建->顶点缓冲区创建->顶点属性数组创建。
2024-11-26 19:09:29
154
原创 再谈OpenGl中的glDrawElements和glDrawArrays
也就是我们的顶点缓冲区不能直接写成四个顶点,OpenGL无法识别它,不知道它是一个正方形,我们也可以把它写成两个三角形。循环渲染:glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,NULL);在opengl中,它们的主要差别除了是否要用索引缓冲区之外,还有一个区别就是在顶点缓冲区中,布局是这样的。因为我们要告诉OpenGL每个顶点是如何构成一个图形的。比如说:下面这个顶点缓冲区的布局,我是想创建一个正方形的。需要注意的是,有两个顶点是共用的,就是2号与0号顶点。
2024-11-26 15:19:06
378
原创 解决头文件重复包含的问题
用内联函数,在被包含的文件的函数中,普通函数前面加上inline,类中的成员函数在类中定义。头文件重复包含会造成头文件循环依赖,导致无法编译,可以通过以下办法解决。
2024-11-25 20:44:26
164
原创 关于OpenGL的gldrawArrays和gldrawElements用法
之前跟着Cherno学OpenGL时,很少讲到直接用gldrawArrays来渲染图形的,而是用gldrawElements来渲染。然后我跟learnopengl学的时候,直接用gldrawarrays来渲染的时候,一直出错。因此我把三角形那部分从头看了一遍。发现这是因为我的顶点数组的原因。顶点数组要写在顶点缓冲区和顶点属性等等这些内容的前面,这样的话,顶点数组是可以缓存这些内容的。因为是索引缓存取将位置给它的,而与顶点数组关系不大。
2024-11-25 15:12:21
262
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人