我今天刚开始从本教程开始学习OpenGL:http://openglbook.com/the-book/
我到了第2章,在那里画了一个三角形,我理解除了VAO之外的一切(这个首字母缩略词好吗?).本教程有以下代码:
glGenVertexArrays(1, &VaoId);
glBindVertexArray(VaoId);
Run Code Online (Sandbox Code Playgroud)
虽然我知道代码是必要的,但我不知道它的作用.虽然我从不使用VaoId(除了销毁它),但如果没有它,代码就无法运行.我假设这是因为它需要被绑定,但我不知道为什么.这个确切的代码是否只需要成为每个OpenGL程序的一部分?该教程将VAO解释为:
顶点数组对象(或VAO)是描述顶点属性如何存储在顶点缓冲区对象(或VBO)中的对象.这意味着VAO不是存储顶点数据的实际对象,而是顶点数据的描述符.顶点属性可以通过glVertexAttribPointer函数及其两个姐妹函数glVertexAttribIPointer和glVertexAttribLPointer来描述,我们将在下面探讨其中的第一个.
我不明白VAO如何描述顶点属性.我没有以任何方式描述它们.它是否从glVertexAttribPointer获取信息?我想这一定是它.VAO只是glVertexAttribPointer信息的目的地吗?
另外,我遵循的教程是否可以接受?有什么我应该注意的或更好的教程可以遵循?
我真的没有听说过Qyoto.我的问题是,它仍然存在且使用效果好吗?在我的一个项目中使用它是否聪明,还是应该坚持使用另一种语言的gtk#或qt?目前有没有使用Qyoto的项目?
首先,我是编程的绝对初学者,所以不要嘲笑我太多.
我见过的唯一信号是GUI工具包,GUI工具包都带有自己的信号.那么,Boost:信号甚至可以与这些GUI工具包一起使用吗?这是个好主意吗?信号有哪些其他应用?
在Qt中,要么实现keyPressEvent或创建QAction并为其分配一个组合键,我就可以根据键盘进行操作.
通常首选哪种方法?
大约一年前我正在玩游戏.为了加快速度,我编辑了主要的.py文件并在一开始就添加了psyco.游戏跑得越来越快,但它不会让我发送我的分数.我进入了文件,它正在检查自己的md5sum.困惑我的部分是他们在文件中有md5.我的问题是,如何获取文件的md5与文件的总和,包括我还没有的md5.对我来说似乎有一个问题,但他们做到了.
希望我解释得那么好.例:
文件:Example.example
check md5 of Example.example
If md5 I just obtained == "###################################"
allow send score.
Run Code Online (Sandbox Code Playgroud) 在另一个问题(如何将数字拆分成单个数字?)中,他们Select
在字符串上调用该方法.该网站还表明它是可能的.
但是,当我尝试使用在其中任何一个地方找到的代码示例执行此操作时,我收到编译错误.可能导致这种情况的原因,我如何Select
在字符串上使用该方法?
我多次被告知由于函数调用递归很慢,但在这段代码中,它似乎比迭代解决方案快得多.充其量,我通常期望编译器优化递归到迭代(看着程序集,似乎确实发生).
#include <iostream>
bool isDivisable(int x, int y)
{
for (int i = y; i != 1; --i)
if (x % i != 0)
return false;
return true;
}
bool isDivisableRec(int x, int y)
{
if (y == 1)
return true;
return x % y == 0 && isDivisableRec(x, y-1);
}
int findSmallest()
{
int x = 20;
for (; !isDivisable(x,20); ++x);
return x;
}
int main()
{
std::cout << findSmallest() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在这里汇编:https://gist.github.com/PatrickAupperle/2b56e16e9e5a6a9b251e
我很想知道这里发生了什么.我确信这是一些棘手的编译器优化,我可以惊讶地了解.
编辑:我刚刚意识到我忘了提到如果我使用递归版本,它运行大约0.25秒,迭代,大约.6. …
我有一段代码我正在尝试调试,这会产生奇怪的结果.一个非常明显包含值为6的整数,将false与文字6进行比较.
在我的代码中,此代码:
int allGreen = 0;
int index = 0;
while (ch->fb[index]->selection_color() == FL_GREEN)
{
++allGreen;
++index;
}
std::cout << allGreen << std::endl;
std::cout << std::boolalpha << (allGreen == 6) << std::endl;
Run Code Online (Sandbox Code Playgroud)
产生输出:
6
false
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu上使用g ++ 4.8.2进行编译.
怎么可能发生这种情况?
编辑:从条件中删除所有绿色无济于事.编辑2:索引和allGreen是相同的,如预期的那样.尽管两者都是6,但两者都不等于6.
我正在写一个俄罗斯方块克隆,这是我真正做过的最大的项目.在实现行删除代码时,我已经开始收到堆栈溢出异常.我认为这可能与我的大量收藏或Linq的低效率使用有关.以下是导致此问题的具体方法:
void MoveAllAboveDown(int row)
{
List<Block> newBlockList = new List<Block>();
for (int rowCheck = row; rowCheck > _VertOffset; --rowCheck)
{
for (int i = _HorizOffset; i < _HorizOffset + _Width; ++i)
{
//If the spot above this is filled
if (_blockList.Where(block => block.Contains(new Vector2(i, rowCheck - 1))).ToList().Count > 0)
{
//insert block here
newBlockList.Add(new Block(new Vector2(i, rowCheck), new[,] { { true } }, Color.Black, _texture));
}
else
{
var list = _blockList.Where(tempBlock => tempBlock.Contains(new Vector2(i, rowCheck - 1))).ToList();
if (list.Count …
Run Code Online (Sandbox Code Playgroud)