Sun as a light source using opengl and c++

I am working on the solar system and I am trying to get the sun to be the central light source of this program but it's not working the way I thought it would. Here is a picture of what I have without lighting. Here is the same program with lighting. A different angle here so you can see that the Earth has no shadow as it is supposed to (ignore the red on the moon, that's for my ref

Sun作为使用opengl和c ++的光源

我正在研究太阳系,我试图让太阳成为这个计划的中心光源,但它并不像我想象的那样工作。 这里是我没有照明的照片。 这是与照明相同的程序。 这里有一个不同的角度,所以你可以看到地球没有它应该的阴影(忽略了月球上的红色,这是我的参考) 我不知道你是否可以说出来,但看起来光线是在每个球体的中心,而不是在太阳中。 地球上的影子仿佛光线从顶部传来。 与太阳一样。 这里的太阳不是一个光源,它只是一个球体,也

safe and concurrent by default? Why or why not?

What does it mean to make a dynamic array thread-safe and concurrent? Say, for example, std::vector . Two threads may want to insert at the same position. No synchronization needed as it will be done as per thread scheduling. One thread erasing and another going to access the same element? This is not a data structure issue I believe, it is a usage problem. So is there anything that need

安全和默认并发? 为什么或者为什么不?

使动态数组成为线程安全和并发的意味着什么? 比如,说std::vector 。 两个线程可能想要插入相同的位置。 不需要同步,因为它将按照线程调度完成。 一个线程擦除,另一个去访问相同的元素? 这不是我认为的数据结构问题,它是一个使用问题。 那么是否有任何需要通过std::vector完成的任务,以使它成为线程安全并发的,还是默认情况下是线程安全的和并发的? C ++ 11对标准库中容器的线程安全地说了以下内容: 23.2.

Do you (really) write exception safe code?

Exception handling (EH) seems to be the current standard, and by searching the web, I can not find any novel ideas or methods that try to improve or replace it (well, some variations exist, but nothing novel). Though most people seem to ignore it or just accept it, EH has some huge drawbacks: exceptions are invisible to the code and it creates many, many possible exit points. Joel on software

你(真的)写出异常安全的代码吗?

异常处理(EH)似乎是当前的标准,并且通过搜索网络,我找不到任何尝试改进或取代它的新颖想法或方法(当然,存在一些变化,但没有新颖性)。 尽管大多数人似乎忽略了它,或者只是接受它,但EH 有一些巨大的缺点:代码中看不到异常,它创造了许多可能的退出点。 乔尔在软件上写了一篇关于它的文章。 与goto的比较非常适合,这让我再次想到了EH。 我尽量避免使用EH,只使用返回值,回调或任何符合目的的东西。 但是当你必

insensitive string comparison in C++

What is the best way of doing case-insensitive string comparison in C++ without transforming a string to all uppercase or all lowercase? Please indicate whether the methods are Unicode-friendly and how portable they are. Boost包含一个方便的算法: #include <boost/algorithm/string.hpp> // Or, for fewer header dependencies: //#include <boost/algorithm/string/predicate.hpp> std::stri

在C ++中不敏感的字符串比较

在不将字符串转换为全部大写或全部小写的情况下,在C ++中执行不区分大小写的字符串比较的最佳方式是什么? 请说明这些方法是否适用于Unicode,以及它们的便携性。 Boost包含一个方便的算法: #include <boost/algorithm/string.hpp> // Or, for fewer header dependencies: //#include <boost/algorithm/string/predicate.hpp> std::string str1 = "hello, world!"; std::string str2 = "HELLO, WORLD!"; if (

Is C++ context

I often hear claims that C++ is a context-sensitive language. Take the following example: a b(c); Is this a variable definition or a function declaration? That depends on the meaning of the symbol c . If c is a variable, then ab(c); defines a variable named b of type a . It is directly initialized with c . But if c is a type, then ab(c); declares a function named b that takes a c and ret

是C ++的上下文

我经常听到C ++是上下文敏感语言的说法。 以下面的例子: a b(c); 这是一个变量定义还是函数声明? 这取决于符号c的含义。 如果c是变量,则ab(c); 定义了一个名为b的变量a 。 它直接用c初始化。 但如果c是一个类型,那么ab(c); 声明一个名为b的函数,它接受一个c并返回一个a 。 如果你查找上下文无关语言的定义,它基本上会告诉你,所有的语法规则都必须有左侧包含一个非终端符号。 另一方面,上下文敏感的语法允许

How to execute a command and get output of command within C++ using POSIX?

I am looking for a way to get the output of a command when it is run from within a C++ program. I have looked at using the system() function, but that will just execute a command. Here's an example of what I'm looking for: std::string result = system( "./some_command" ) ; I need to run an arbitrary command and get it's output. I've looked at Boost.org but I have not found any

如何使用POSIX在C ++中执行命令并获取命令的输出?

我正在寻找一种方法来获取从C ++程序运行时的命令输出。 我已经看过使用system()函数,但那只是执行一个命令。 以下是我正在寻找的一个例子: std::string result = system( "./some_command" ) ; 我需要运行一个任意的命令并获取它的输出。 我看过Boost.org,但我还没有找到任何能够给我所需的东西。 #include <cstdio> #include <iostream> #include <memory> #include <stdexcept> #include &

When to use reinterpret

I am little confused with the applicability of reinterpret_cast vs static_cast . From what I have read the general rules are to use static cast when the types can be interpreted at compile time hence the word static . This is the cast the C++ compiler uses internally for implicit casts also. reinterpret_cast s are applicable in two scenarios, convert integer types to pointer types and vice ve

何时使用重新解释

我对reinterpret_cast vs static_cast的适用性感到困惑。 从我读过的一般规则来看,当编译时可以解释类型时使用静态转换,因此使用static 。 这是C ++编译器内部用于隐式强制转换的强制转换。 reinterpret_cast s适用于两种情况,将整数类型转换为指针类型,反之亦然,或将一种指针类型转换为另一种类型。 我得到的一般想法是不可移植的,应该避免。 我有点困惑的地方是我需要的一种用法,我从C调用C ++,C代码需要保持C

Practical Use of Zero

I am not totally sure about C, but C++ allows unnamed bit-fields of 0 length. For example: struct X { int : 0; }; Question one: What practical uses of this can you think of? Question two: What real-world practical uses (if any) are you aware of? Edited the example after ice-crime's answer Edit: OK, thanks to the current answers I now know the theoretical purpose. But the questio

实际使用零点

我对C没有完全确定,但C ++允许0长度的未命名位字段。 例如: struct X { int : 0; }; 问题一:你能想到这有什么实际用途? 问题二:你知道现实世界的实际用途(如果有的话)是什么? 在冰毒犯罪的答案后编辑了这个例子 编辑:好的,感谢目前的答案,我现在知道理论的目的。 但问题是关于实际用途,所以他们仍然拥有:) 您使用零长度位域作为一种拙劣的方式让编译器布局结构以匹配某些外部需求,无论是其他编译器

Double Negation in C++ code

I just came onto a project with a pretty huge code base. I'm mostly dealing with C++ and a lot of the code they write uses double negation for their boolean logic. if (!!variable && (!!api.lookup("some-string"))) { do_some_stuff(); } I know these guys are intelligent programmers, it's obvious they aren't doing this by accident.

C ++代码中的双重否定

我刚刚进入一个具有相当庞大代码库的项目。 我主要处理C ++,他们编写的许多代码都使用双重否定布尔逻辑。 if (!!variable && (!!api.lookup("some-string"))) { do_some_stuff(); } 我知道这些家伙都是聪明的程序员,很明显他们不会偶然这样做。 我不是经验丰富的C ++专家,我唯一的猜测是他们为什么要这样做,他们想要绝对肯定被评估的值是实际的布尔表示。 所以

End iterator invalidation rules

Regarding this question on iterator invalidation rules, it seems obvious that the spirit of the standard means, for example, that "an erase in the middle of the deque invalidates all the iterators and references to elements of the deque" also refers to the end iterator. However, I can't find anywhere that the standard makes this explicit, and strictly speaking the end iterator is

结束迭代器失效规则

关于迭代器失效规则的这个问题,看起来显而易见的是,标准的精神意味着,例如,“在deque中间的擦除使所有迭代器和对deque元素的引用无效”也指末端迭代器。 但是,我无法在标准中明确指出任何地方,严格地说,结束迭代器不是容器中元素的迭代器。 2003年的标准是否明确地表明了这一点? 例如,23.1 / 10: 没有swap()函数会使任何引用,指针或迭代器引用正在交换的容器元素。 [注意: end()迭代器不引用任何元素,所以它