摘要:
一直以为Unity中的相机FOV指的是frustum两个对角边的方向夹角,所以在看一篇教程的时候怎么算都算不对。后来灵机一动,查了一下,才发现Unity中的Fov指的是垂直方向的FOV: 参见这里:https://docs.unity3d.com/ScriptReference/Camera-fie 阅读全文
摘要:
I. Replication Replication指的是 从服务端向客户端 传递数据和信息的行为。注意是单向的,不会从客户端传递信息和数据到服务端。 假设一个Actor被设置为Replicates, 当且仅当它被服务端生成 ,那么它会被所有客户端生成,并被Replicated。言外之意,即使是Re 阅读全文
摘要:
在上一节的案例中,我们使用了四个Buffer Object,立方体的VertexBuffer,立方体的索引Buffer,四面体的VertexBuffer,四面体的索引Buffer。 我们这节尝试把两个图形的Vertex Buffer结合,两个图形的索引Buffer结合,形成两个Buffer,让程序更 阅读全文
摘要:
大部分OpenGL教程都会在一开始就讲解VAO,但是该教程的作者认为这是很不合理的,因为要理解它的作用需要建立在我们此前学过的知识基础上。因此直到教程已经进行了一大半,作者才引入VAO这个概念。在我看来这也是非常合理和自然的。 先预览一下最终的代码逻辑: 准备工作 为了讲解后面的内容,我们对代码进行 阅读全文
摘要:
移动相机需要用到键盘按键,按键事件的引入需要包含头文件 #include <Qt3DInput\qkeyevent.h> 并实现QWidget中定义的虚函数keyPressEvent 我们首先在MyGlWindow中重写这个虚函数。 在MyGlWindow.h加入 在MyGlWindow.cpp中定 阅读全文
摘要:
在11节我们说过,MVP矩阵中目前只应用了两个矩阵,World to View 矩阵被省略了,这就导致我们的画面没有办法转换视角。 本节我们将添加这一环节,让相机可以旋转。 为了实现这一目的,我们添加一个相机类, Camera类。 Camera.h: Camera.cpp: glm::lookAt 阅读全文
摘要:
我们使用15节学到的知识来绘制14节的立方体。 在第14节我们使用了两次glDrawElements实现了OpenGL实例化,发现这样仍然不太方便,如果需要绘制成千上万的立方体,就需要手写成千上万次的glDrawElements(). 而15节我们知道了glDrawElementsInstanced 阅读全文
摘要:
友情提示:继续本节之前,需要保存此前的代码,本节为了试验,会对代码做一些修改,但后续的修改需要我们把代码返回之前的进度。 OpenGL内置支持Instancing,有专门的函数来处理这件事情。 为了方便,我们先使用最简单的三角形来学习 先修改sendDataToOpenGL()函数: 相应的修改ve 阅读全文
摘要:
如果我们需要绘制两个(或者多个)一样的立方体(或者物体),只是位置、缩放、旋转不一样,那么我们可以不需要多次将这个物体的顶点信息、颜色信息等发送到显卡,而是发送一次,绘制多次,仅仅是每次绘制之前应用不同的转换矩阵。这种方法叫做OpenGL Instancing。它的效率比每次都重新发送一次数据到显卡 阅读全文
摘要:
上节说过矩阵是可以结合的,而且相乘是按照和应用顺序相反的顺序进行的。我们之前初始化translationMatrix和rotationMatrix的时候,第一个参数都是使用的一个初始矩阵 glm::matrix4(),实际上我们可以对代码稍作优化,让初始化过程精简一些。 对比一下优化之前和优化之后的 阅读全文