2012-08-19 50 views
-3

我想学习OpenGL,并已咨询了几个“指南”和“教程”。这些“指南”和“教程”说,“做这个,这个和这个,然后你有绘制命令”。不那么好想过OpenGL学习材料

我正在寻找一些OpenGL的学习材料,它实际上解释了引擎是如何工作的,而不是在这里给我无意识的东西 - 你是做什么的。我已经咨询过像www.glprogramming.com/red/这样的东西,并且一直都不高兴。到目前为止,在第一章中,我不知道配置选项如何工作,opengl有什么样的“上下文结构”,实际上有什么扩展,最重要的是,在读完所有内容后,这完全没有意义:The GL pipeline that nobody can explain

I也浏览过,看过“framebuffer”和“renderbuffer”以及“OpenGL context”。我仍然不知道这些是什么(我认为在阅读这些东西之前我至少知道帧缓冲是什么)。有冲突的解释是,帧缓冲区保存所有基元的数据,并且帧缓冲区被绑定(??)到一个渲染缓冲区,它执行某些操作?无论如何,所有这些“指南”都会在第1章中详细说明绑定和缓冲这些词。在红皮书的第1章中,我可以看到glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);。我不知道这是做什么的,因为这一章没有告诉我,下一个也没有。

想象一下,如果我只是向您投掷GObject系统,并说:“好吧,那么,就把这段代码放进去,然后定制它并编写您的应用程序。”这就是我读过的所有内容。 不可能这样学习,因为我不理解幕后发生了什么。

我想知道:

  • 什么帧缓冲是
  • 什么帧缓冲的内部结构是
  • 我如何使用/创建帧缓冲区对象
  • 同样的事情了“渲染” ,我怀疑我可能不需要
  • 什么是GL扩展以及它们如何与引擎交互
  • 如果我想要在屏幕上绘制3D立方体以及这些对象做什么,我必须创建哪些类型的对象
  • 如何从开始到结束初始化opengl系统,以便设置内存来绘制,跟踪顶点/基元/纹理/其他元数据,渲染等
  • 流水线从开始到结束的过程,比如说我想渲染一个红色方块到内存中的位置
  • 像glVertex3f这样的调用如何与引擎
  • 所有其他缓冲区如何工作,如“颜色缓冲区”和“顶点缓冲区”
  • 背后的所有理论有点废话像GL_COLOR_BUFFER_BIT
  • 什么是深度缓冲区和模板缓冲区,他们如何与绘图交互?它们是帧缓冲区对象的一部分吗?

基本上我想在人们向我抛出代码和奇怪术语之前,实际学习OpenGL背后的理论。我想知道系统是如何工作的,然后我开始无意识地从网上复制代码并称之为“学习”。出于某种原因,没有人写这样的材料。

任何人都可以在这里解释这些事情或指出我在正确的方向(最好是指导,明白我不知道GL)?

+1

http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html – 2012-08-19 01:07:22

+0

到目前为止,在链接上这么好,比我发现的任何东西都好,但我我仍然对“缓冲区”的术语感到困惑,特别是像“顶点缓冲区”这样的东西。这件事在什么地方浮现在内存中,系统如何与多个人一起工作?帧缓冲区和渲染缓冲区之间最大的区别是什么?非常不错的链接。 – Relish 2012-08-19 01:12:32

+0

这篇维基百科文章解释了缓冲区:http://en.wikipedia.org/wiki/Data_buffer – 2012-08-19 01:16:33

回答

2

什么帧缓冲是

排序您在使用OpenGL

什么帧缓冲的内部结构是画布提供了层的

类绘制画布

我如何使用/创建帧缓冲区对象

同样的事情了“渲染”,我怀疑我可能不需要反正

Renderbuffers是一个帧缓冲帆布

的“层”的一个排序

如何OpenGL的系统从开始初始化的问候完成对设置内存提请,

创建窗口(取决于操作系统)和与之匹配的OpenGL上下文 - 就是这样。你从不直接用OpenGL触碰内存。

跟踪顶点/基元/纹理/其它元数据,渲染等

你已经得到这方面自己创建。

这条管道从开始经过到结束的过程,说如果我想呈现一个红色的方形

看到像在http://arcsynthesis.org/gltut

教程内存中的位置

你不关心内存位置。

像glVertex3f电话如何与发动机

OpenGL是不是一个引擎进行交互。 OpenGL是一个绘图库。 glVertex是立即模式命令,根据状态,原始(点,线或三角形)被光栅化到目标帧缓冲区。

如何所有其他缓冲区的工作,像“颜色缓冲区”和“顶点缓冲区”

我想你的意思颜色的附件,而那些是一个抽象的名词。颜色附件可以是渲染缓冲区或纹理图像。颜色附件是数据目标,而顶点缓冲区是数据源。

后面的所有位垃圾一样GL_COLOR_BUFFER_BIT

这个“位废话”的理论是一个旧的时代计算技术卡列斯位标志和口罩。用N位变量,如32位整数(在这种情况下N = 32)。这些位中的每一位均可被解释为布尔标志。通过组合多个位掩码,您可以在一个N位宽的变量中编码多达N个标志。

+0

您可以更具体地了解帧缓存实际是什么吗?它是内存中的位图还是其他东西?另外,我认为opengl是一个“状态引擎”? glVertex如果不知道我们是否正在进行正交或透视渲染,如何进行光栅化? – Relish 2012-08-19 01:49:57

+0

@Relish:framebuffer是一个抽象对象,将内存区域和信息如何使用这些内存作为可以绘制的内容。但是,您绝对不要直接使用该内存。是的,OpenGL是一个状态机。 glVertex依赖的状态是绘图模式(由glBegin设置,以glEnd结束)以及当前投影和模型视图矩阵。然而,即时模式已被弃用,所以我不会投入太多时间来学习整个glBegin,glVertex和glEnd业务。 – datenwolf 2012-08-19 10:03:30