我知道过去几年也有类似的问题,但在做了一些研究之后,我仍然无法决定从哪里学习以及应该学习什么。 我还想看看您当前对现代 OpenGL 编程的实际看法,以及更多的 C++ OOP 和着色器方法。并确保我对某些事情的实际理解是有效的。
所以...目前我们有 OpenGL 4.2,正如我在某处读到的,它需要 dx11 硬件 (这是什么意思?)和一组“side”库,例如创建窗口。
有最常见的 GLUT,我非常讨厌。主要原因之一是函数调用,它不允许我们在创建主循环的方式上自由。正如一些人所说,它不适合游戏。
还有 GLFW,它实际上对我来说非常好和直截了当。出于某种原因,人们将它与 GLUT 一起使用。 (它不仅提供窗口初始化,还提供其他实用程序?)
还有 SFML 和 SDL ( SDL < sfml="" imo="" ),而它们有时都需要奇怪的方法来使用="">
我们还有 GLEW,它是扩展加载实用程序...等等...不是 GLUT/GLFW 已经是一个扩展了吗?有什么理由使用它,比如有什么真正重要的扩展让你感兴趣吗?
到目前为止,我们已经创建了窗口(和一些实用程序),但是...... OGL 不负责加载纹理,也不负责加载 3D 模型。我还需要多少其他库?
现在让我们谈谈教育部分。有(在)著名的 NeHe 教程。使用 WinApi 用 C 语言编写,代码非常不清晰,解决方案过时,但仍然是最受欢迎的。可以找到一些像红皮书这样的东西,它们与 2.x 或 3.x 等版本相关,但是只有少数(和未完成的)教程提到 4.x。
搭配什么?
最佳答案
So... currently we have OpenGL 4.2 out, which as I read somewhere requires dx11 hardware (what does it mean?) and set of 'side' libraries, to for example create window.
DX11 硬件是...在盒子侧面写有“支持 DirectX 11”的硬件。我不确定你在这里问的是什么;您是否不清楚 Direct3D 是什么、D3D 11 是什么,或者 D3D 11 与以前的版本有什么区别?
仅供引用:D3D 是使用 OpenGL 访问渲染硬件的仅 Windows 替代方案。版本 11 只是 API 的最新版本。与 D3D10 相比,D3D11 增加了一些新东西,但对于初学者来说并不需要太多。
OpenGL 是一种描述图形操作的特定接口(interface)的规范。这个接口(interface)是如何创建的不是 OpenGL 的一部分。因此,每个平台都有自己的方式来创建 OpenGL 上下文。 Windows 使用带有 WGL 的 Win32 API。 X-Windows 使用带有 GLX 函数的 X-Windows API。以此类推。
GLUT、GLFW 等库是抽象所有这些差异的库。他们为您创建和管理一个 OpenGL 窗口,因此您不必使用特定于平台的详细信息弄脏您的代码。您不必使用其中任何一个。
当然,如果您有兴趣学习 OpenGL,最好避免处理特定于平台的细节,例如如何处理 HWND 等。
And we have also GLEW, which is extension loading utility... wait... isn't GLUT/GLFW already an extension? Is there any reason to use it, like are there any really important extensions to get interested with?
这是另一个误解。 GLUT 是一个库,而不是扩展。 OpenGL 扩展是OpenGL 的一部分。看,OpenGL 只是一个规范,一个文档。您当前使用的 OpenGL 实现实现了 OpenGL 图形系统,但它也可能实现该图形系统的许多扩展。
GLUT 不是 OpenGL 的一部分;它只是一个图书馆。 GLUT 的工作是创建和管理一个 OpenGL 窗口。 GLEW 也是一个库,用于 loading OpenGL functions .这不是唯一的选择,但它是一种流行的选择。
Untill now we have window creation (and some utilities), but... OGL doesn't take care of loading textures, neither 3D models. How many other libs do I need?
OpenGL 不是游戏引擎。它是一个图形系统,专为与专用图形硬件接口(interface)而设计。这项工作与从任何类型的文件加载任何内容之类的事情无关。是的,制作游戏需要这个,但如前所述,OpenGL 不是游戏引擎。
如果您需要加载文件格式来执行您想做的事情,那么您将需要编写代码来执行加载(以及与 GL 接口(interface)所需的格式调整)或下载一个库来为您完成. OpenGL Wiki 维护着 pretty good list of tools for different tasks .
There is (in)famous NeHe tutorial. Written in C with use of WinApi, with extremely unclear code and outdated solutions, yet still the most popular one. Some stuff like Red Book can be found, which are related to versions like 2.x or 3.x, however there are just few (and unfinished) tutorials mentioning 4.x.
What to go with?
OpenGL Wiki 维护着 learning OpenGL stuff 的在线资料列表。 ,既老派又更现代。
警告:无耻的 self 推销随之而来!
My tutorials on learning graphics非常好,有很多部分,并且仍在积极进行中。它没有教授任何 OpenGL 4.x 特定的功能,但 OpenGL 3.3 与 4.2 完全兼容。所有这些程序都可以在 4.x 硬件上正常运行。
关于c++ - 学习现代 OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8733663/
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“
有没有办法让Ruby能够做这样的事情?classPlane@moved=0@x=0defx+=(v)#thisiserror@x+=v@moved+=1enddefto_s"moved#{@moved}times,currentxis#{@x}"endendplane=Plane.newplane.x+=5plane.x+=10putsplane.to_s#moved2times,currentxis15 最佳答案 您不能在Ruby中覆盖复合赋值运算符。任务在内部处理。您应该覆盖+,而不是+=。plane.a+=b与plane.a=
如何学习ruby的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/