LearnOpenGL网站打砖块小游戏项目复现心得


       LearnOpenGL网站打砖块小游戏项目复现心得。
https://learnopengl.com/以及作者在GitHub上传的资料中我们可以获取该项目的全套的代码和资源素材,这里将不再补充。
在整个项目复现过程中,主要问题基本集中在环境配置上,分享一下我在项目中遇到的三个问题及其解决办法。
一、莫名其妙的问题
    在项目中会出现一些莫名其妙的问题,例如会出现找不到main函数或找不到opengl32.lib等错误。
解决办法:在创建空项目之后,在配置环境之前,首先创立一个.cpp文件,在文件中输入如下代码
int main()
{
    return 0 ;
}
将这个项目运行一次后再配置环境,可以解决如上问题。
二、配置环境
    头文件和dll文件在这个项目中,除了作者在项目中打包好的,还有窗口接口文件glad,glfw,矩阵运算文件glm,后面音乐文件irrKlang,在作者的LearnOpenGL-master\includes下可以找到
 而文本文件freetype,则需要在https://freetype.org/中下载,在解压文件中freetype-2.10.0\builds\windows\vc2010,点击freetype.sln,

生成后可在,freetype-2.10.0\objs\Win32\Debug中找到生成的freetype.dll。
freetype.dll、irrKlang.dll、ikpMP3.dll都放到game_breakout\x64\Debug目录下,与game_breakout.exe同一目录即可。
三、代码问题
    在作者源代码game.cpp中
void Game::Init()函数下

    Renderer = new SpriteRenderer(ResourceManager::GetShader("sprite"));
会出现如下报错

所以替换为
    Shader shader_temp = ResourceManager::GetShader("sprite");
    Renderer = new SpriteRenderer(shader_temp);

同理在
void Game::Render()函数下 
 Renderer->DrawSprite(ResourceManager::GetTexture("background"), glm::vec2(0.0f, 0.0f), glm::vec2(this->Width, this->Height), 0.0f);
会出现如下报错

如法炮制替换为
        Texture2D texture_temp = ResourceManager::GetTexture("background");
        Renderer->DrawSprite(texture_temp, glm::vec2(0.0f, 0.0f), glm::vec2(this->Width, this->Height), 0.0f);



#图形图像#
全部评论

相关推荐

11-06 12:10
已编辑
中南大学 Unity3D客户端
图形开发时间线TimeLine:9.21投-10.17笔试-10.24一面-11.1二面-11.5hr面已经是还在流程的几家里唯一的大厂了,球球收了孩子叭,牛客许愿会灵吗,会的吧?总之,先发个一面面经涨涨人品,后续秋招结束会发总结篇,里面有鼠鼠为数不多的十来场面试的面经,以及一堆的笔经(总之就是非常惨)(83min)- 自我介绍- 平时怎么学习图形学?看过Unity,UE源码没有?- 说说C++的共享指针?- weak_ptr是怎么工作的?- shared_ptr是线程安全的吗?- 构造函数可以是虚函数吗?- 虚函数机制?- 虚函数表什么时候构建的?存在哪?- 虚函数表怎么构建的?内存空间连续吗?- 虚函数表除了虚函数地址还存了别的其他什么东西吗?- 如果一个基类函数不标明为virtual,子类重写了这个函数,那指向子类对象的基类指针调用该函数会发生什么?- 只有纯虚函数的类有虚函数表吗?- 子类不实现纯虚函数会怎么样?在什么时候会报错?会报什么错?- 说说vector的扩容机制?- 说说list的实现?- 如何高效的查找有序的list里的元素?- list二分查找的复杂度是多少?(O(n),我当时没想出来)- 如果考虑空间换时间,时间复杂度可以是多少?(这里脑子抽了,我说分别存储每一次list二分之后的结果,存储在vector里,然后二分的时候只需要比较尾节点,然后转移到对应的list里进行下一步查询, 事后感觉应该是想引导我说,把list用vector存一遍,然后在vector上做二分)- 说说优先队列的实现?- 堆是怎么实现的?插入数据的时间复杂度是多少?- 插入的逻辑是怎样的?- 你的渲染引擎是怎么考虑跨平台的?- 你写的shader是怎样在目标平台运作的?- shader里你是怎样采样贴图的?讲讲API的使用?- textureLod怎么用?- 如果不提供level,GPU怎么知道要采样哪一层的Mipmap呢?(通过贴图uv在屏幕上的变化率决定)- 你刚刚说的u对x,v对y的偏导里的x和y是什么坐标?- 除了这个坐标空间还有哪些坐标空间?- 三线性插值是怎么做的?- 讲讲OpenGL的一个渲染管线?- 顶点的裁剪坐标空间坐标怎么得到的?- 后续会被怎样处理?- NDC标准空间的xyz取值是多少?- 锯齿是怎么形成的?在哪个阶段生成的?- 有哪些抗锯齿手段?- MSAA和FXAA有什么区别?- MSAA的硬件实现是怎么做的?- FXAA怎么做的?- 实时阴影你怎么做的?- 点光源的阴影要怎么实现?- 只能是生成CubeMap吗?不能生成Texture2D吗?(傻了,忘记CubeMap可以展开在一个Texture2D上或者干脆用柱状投影图了,我说你非要搞那就整一个Texture2DArray)- 你实现BVH的目的是什么?- 视锥剔除有必要吗?不是裁剪阶段也会做剔除?- 平时渲染方面怎么Debug?- 如何优化shader的效率?- 为什么尽量不要写if/else语句?那什么时候能用呢?- 减少采样操作?怎么减少?哪些采样操作可以移到CPU做?- 如果必须要采样呢?怎样做优化?以PCSS为例?- 为什么尽量少做那些复杂的数学运算?反三角函数,矩阵的逆什么的?- 线程和协程的区别?(太久没看真忘了,支支吾吾嗯是说不出啊,早知道直接说不知道了)- 那线程和进程的区别呢?- 反问?  - 图形开发工程师隶属于什么部门?引擎部?中台?(统一校招,进去之后再细分,可能进项目组可能进中台)  - 这个职位入职的培训和游戏开发那边的培训有什么区别?(差不多也是miniGame,内容上可能区别比较大)  - 可以知道具体的工作室吗?(进去之后双选)  - 如果我想胜任图形开发工程师这个岗位,需要再巩固加强哪些方面?(被说计算机基础不牢固了,奶奶滴,我就那个协程没说好嘛!(ㄒoㄒ)) #网易# #网易互娱# #游戏开发# #许愿# #时间线# #一面#
查看55道真题和解析
点赞 评论 收藏
分享
评论
1
1
分享
牛客网
牛客企业服务