4 Jaihk662

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 1k+

OpenGL基础28:模型

参考文献:https://learnopengl.com/#!Getting-started/OpenGL前置:OpenGL基础27:网格一、模型有了mesh类之后,接下来就是实现一个model类将各个mesh拼成一个模型首先是模型的创建:很好理解,就是一次绘制其所有的mesh:public: Model(const GLchar* path) { this->loadModel(path); } void Draw(Sha...

2020-06-30 20:05:16

OpenGL基础27:网格

一、网格(Mesh)从字面上的意思来看就是下面这个东西:其实差不多,如果你是游戏开放相关的工作者,又或者了解过图形学,应该都听过网格(Mesh)这个词,大概印象是下面这样的:...

2020-06-23 16:33:24

OpenGL基础26:Assimp库

一、模型文件游戏中有很多复杂的模型往往都是美术通过3D建模工具构建出来的,当然不是程序将顶点写死在代码里的,想想看一个简单的人物模型可能就有上千个顶点,这个时候按之前“生成木箱子”的方法肯定就不可行了从3D模型的设计到最后体现在场景中,整个过程可以分为2个步骤当使用3D建模工具导出模型文件时,建模工具会自己生成所有的顶点坐标、顶点法线和纹理坐标等信息,这些图像技术细节并不需要美工去处理,美工只需要关心如何构建高品质的模型,所有的技术细节内容都隐藏在里导出的模型文件里。而对于图形开发者,就必...

2020-06-19 17:15:14

OpenGL基础25:多光源(附简单GLSL配置)

到这里,光照基础就已经接近尾声了,当然对于光照渲染的学习,这可能只是百步中的一步,尽管如此,至少是做到了从 0 到 1 的一个过程,就像之前刚学会“HelloWorld”一样,一切伟大的行动和思想,都有一个微不足道的开始再次声明:直至这一章,主要还是参考于https://learnopengl.com/,当然这不仅是翻译,也结合了不少其它的文献和教学视频,和原文略有不同,很多地方去掉了繁杂或不重要的描述,加入了自己的看法,整体更加整洁易懂如有问题/错误,求反馈一、GLSL配置之前...

2020-06-16 20:24:51

OpenGL基础24:聚光灯

前置:OpenGL基础23:平行光与点光源一、聚光灯三种基础光源在上一章讲了2种,现在只剩下聚光灯了手电筒就是一个很经典例子,相对于点光源,聚光灯拥有以下特点依然有衰减,但是聚光灯的光照一般都是非常强的(也就是有着非常远的射程) 有一定的范围,在这个范围外光照极速衰减,距离聚光方向超过一定角度,哪怕离光源很近,也有可能完全没有光照 依上,既有位置属性,又有方向属性(聚光方向)那么也就是说,相对于点光源,聚光灯会额外多出2个属性:聚光方向和切光角如下图:其中就是入射光向量与...

2020-06-16 11:49:30

OpenGL基础23:平行光与点光源

前面几章主要是针对物体,现在开始针对光源!一、平行光在OpenGL基础18:光照基础这一章里面讲了几种常见光源,先看平行光吧一个很好的例子就是太阳光,因为离我们的距离过远,所以太阳光的特点就是“无限范围”且平行所有的光线都是平行的,这样的话物体与光源的相对位置是不重要的,在之前的章节,Light里面都有position这一属性,对于平行光而言,这个属性就由direction替代,代码改动如下:struct Light{ // vec3 position; v...

2020-06-15 19:46:22

OpenGL基础22:贴图

在OpenGL基础13:第一个正方体中给正方体加了箱子的纹理,但是在后面介绍光照的时候又把纹理属性给丢了,现在尝试在有纹理的基础之上增加光照一、漫反射贴图先把之前的纹理加回去顶点着色器和主代码的处理和之前OpenGL基础9:纹理 纹理这一章一样,而对于片段着色器,需要进行稍加修改在OpenGL基础21:材质这一章里,给予了物体材质属性,包括:ambient:定义了在环境光照下这个物体反射的是什么颜色,通常是和物体颜色相同的颜色 diffuse:定义了在漫反射光照下物体的...

2020-06-11 19:45:48

OpenGL基础21:材质

前置:OpenGL基础20:镜面光照一、材质前面环境光、漫反射光照和镜面光照都已经安排上了,但是物体的属性是写死的在真实的世界里,不同的物体会对光产生不同的反应,例如一颗金属球或一块橡木,它们在完全相同的光照下显示出来的效果必然是不同的,前者以反射(Reflect)为主,后者以散射(Scatter)为主,如果想在OpenGL中模拟不同的材质,就必须为每个物体定义材质(Material)属性,尽管现在还是在用正方体ambient:定义了在环境光照下这个物体反射的是什么颜色,通常是和物体颜...

2020-06-10 17:35:51

OpenGL基础20:镜面光照

前置:OpenGL基础19:法向量与漫反射一、镜面光照前面物体已经拥有了环境光和漫反射光,现在再加上镜面光照就完美了,镜面光照的效果是:当我们去看光被物体所反射的那个方向的时候,会看到一个高光和镜面反射一样,不过我们希望得到的是下图与的夹角我们在求漫反射光照时,已经获得了向量和接下来我们求出,Viewer正是我们的摄像机:GLint viewPosLoc = glGetUniformLocation(shaderObj.Program, "viewPos...

2020-06-10 11:49:59

OpenGL基础19:法向量与漫反射

前置:OpenGL基础18:光照一、法向量法向量:垂直于当前点所在面的向量无论是漫反射光照还是镜面光照,我们都需要知道当前反射点的法向量单纯的对于一个顶点来讲,它肯定是没有法向量的,所以我们需要考虑这个顶点与其周围的顶点(他们可以构成唯一的一个面,即顶点所在的面),并可以通过叉乘来获取法向量,当然对于一个不能再简单的正方体,我们也可以直接将每个顶点的法向量数据加入顶点数据中,也就是类似于离线+存储方法:GLfloat vertices[] = { -0.5f, -0.5...

2020-06-09 19:21:45

OpenGL基础18:光照基础

真实的光照非常的复杂,所以有关光照的算法和论文也有不少,想要模拟出更真实的光照往往需要很强的实力,很牛的算法以及很高的数学/物理水平,与此相关的技术到现在为止也只是在发展中(包括目前比较火的“光线追踪”),当然,肯定要从最简单的入手,尽可能以最低的门槛,最简单的算法先入手,做出个大致的样子来一、光照模型与光源之所以说光照比较复杂,主要是在物理和数学专业上的难度,光通常都不是来自于同一光源,而是来自散落于我们周围的很多光源,即使它们可能并不是那么显而易见,光的一个属性是,它可以向很多方向发散和反...

2020-06-09 09:54:59

OpenGL基础17:颜色

一、RGB三原色回想一下初中物理知识:三原色:自然界中所有的颜色都可以用红、绿、蓝(RGB)这三种颜色频率的不同强度组合而得,白色包含了所有颜色 能看到一个物体的颜色,是这个物体(Reflected)反射的颜色,换句话说,就是不能被当前物体吸收(Absorb)的颜色 之所以能看到五彩斑斓的世界,是因为存在光源(发光的物体),否则将是完全的黑暗 结合②③,颜色从光源到我们的眼睛,大致就是这样一个过程:光源发出光线 → 照射到物体上 → 物体反射所有光源中存在,但不能被其吸收的颜色计算机如...

2020-06-05 20:15:42

OpenGL基础16:视角

一、欧拉角三种欧拉角:俯仰角(Pitch):沿x轴旋转的角,从上往下看的角 偏航角(Yaw):沿y轴旋转的角,从左往右看的角 滚转角(Roll):沿z轴旋转的角(对于摄像机而言,一般不关心这个)关于坐标轴:自身坐标系:物体自身的坐标轴,显然如果物体进行了俯仰、偏航、滚筒的旋转操作,那么坐标轴方向也会被改变 世界坐标系:和物体无关,用来描述物体在世界中的位置,有唯一的原点和轴向 惯性坐标系:自身坐标系到世界坐标系的过渡,原点为对应物体的原点,会随物体的移动而改变,轴向和世界坐标...

2020-06-03 21:07:05

OpenGL基础15:输入控制

接上一章:OpenGL基础14:摄像机现在来尝试通过输入控制摄像机一、键盘输入其实从第一章开始,代码里面一直都有实现键盘输入:void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode){ if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) glfwSetWindowShouldClose...

2020-06-02 17:27:59

OpenGL基础14:摄像机

很可惜,openGL没有摄像机的概念一、摄像机我们当然需要想办法模拟出一个摄像机,也就是玩家的视角,在前面这一章:第一个正方体,我们仅将“摄像机”往z轴正方向移动了3个单位,并且正对着(0, 0, 0),但是大部分的情况下,类似于我们处于一个3D场景中,摄像机的视角都是从上斜向下的,这个时候若想要计算摄像机的位置和方向信息,就是需要一定的运算了既然摄像机如此重要,我们当然需要知道它的很多信息,包括:摄像机位置 观察方向(摄像机z轴) 垂直于观察方向,指向摄像机右侧的向量(摄像机...

2020-05-26 15:25:08

OpenGL基础13:第一个正方体

我们已经进入了3D世界了,想办法生成一个最简单的3D图形:正方体吧一、生成一块箱子接上一章的代码,其实如果前面12章都完全理解了,应该可以直接写出生成正方体的代码(不就是多5个面嘛)为了简单化,我们保留纹理,把颜色这一属性也去掉,除此之外顶点缓冲也不用了,直接拉36个顶点出来代码如下(当然也顺便换了个纹理):#include<iostream>#include<opengl/glew.h>#define GLEW_STATIC#include<...

2020-05-21 19:47:46

OpenGL基础12:进入3D世界

前置:OpenGL基础11:空间一、坐标系我们都学过坐标系,根据z轴的方向,一般有两种不同的坐标系表示方法:其中拇指是x轴正方向,食指是y轴正方向,中指是z轴正方形OpenGL约定是右手坐标系,而在标准化设备坐标系(NDCSpace)中OpenGL使用的是左手坐标系还记得上一章的这个公式嘛:再看看下面的这个顶点着色器,是不是有种亲切感#version 330 corelayout (location = 0) in vec3 position;layout ...

2020-05-21 16:49:03

OpenGL基础11:空间

一、局部空间即对象被创建时,所在的空间例如我们用模型软建(ZBrush、Blender、3DMax等)创建了一条龙的模型,那么它在创建的时候,就处于它的局部空间内,一般来讲,模型的中心即局部空间的中心(0, 0, 0),如果我们这里说龙的眼睛的坐标为(2.2, 1.5, -2),那么也就是这个龙的眼睛相对于自身的中心,偏移量为(2.2, 1.5, -2)就如下图,一个球体和一个正方体,它们都处于各自的局部空间,并且中心都在(0, 0, 0)的位置二、世界空间如果我们...

2020-05-21 11:44:27

OpenGL基础10:变换

必须掌握的前置技能:https://blog.csdn.net/Jaihk662/article/details/103811465(向量与矩阵)其实也不难,也就是一些线性代数的基本知识,暂时只需要理解到这种程度就好,后面可以再说一、GLM库和SOIL一样,GLM也是一个openGL的库,里面存着各种数学公式和算法OpenGL环境配置(超全整合版)GLM库也可以从这篇文章中的链接中下载到,有个叫做glm-0.9.9.8的文件夹就是了,打开后将其中整个glm文件夹丢到VS的include...

2020-05-15 16:05:00

OpenGL基础9:纹理

其实上一章就是在讲纹理了,不过上一章的目的仅是在想办法生成一张有纹理的矩形一、纹理坐标与环绕方式为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分,每个顶点都会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样,之后在图形的其它片段上进行片段插值(Fragment Interpolation)我们很长的一段时间只需要考虑2D的图象,2D纹理坐标范围为(0~1),起始于左下角(0, 0),终止于右上角(1, ...

2020-05-13 19:55:47

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 1024超级勋章
    1024超级勋章
    授予原创文章总数达到1024篇的博主,感谢你对CSDN社区的贡献,CSDN与你一起成长。
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。