这个想法是项目中有一个文件__DATE__和一个文件__TIME__.在没有明确更改其修改日期的情况下重新编译它可能会很酷.
编辑:$(shell touch -c ..)可能是一个很好的解决方案,如果只是笨拙.
我正在尝试使用 Assimp 库将模型导入到使用 VBO 的基本 OpenGL 应用程序。
如果我理解正确, glDrawElements 是理想的现代绘画方式之一。
但是我们如何从通用导入库中获取这些信息呢?
如果您有特定的 Assimp 库知识,将不胜感激。
——
生成这些的过程通常是什么?
我有这个代码是上下文"#version 330 core"
gl_Position = PerspectiveViewMatrix(90.0, AspectRatio, 0.01, 1000.0 )
* TranslationMatrix(0, 0, -4 -0.35*MouseWheel)
* RotationMatrix(MouseMovement.y, X_AXIS)
* RotationMatrix(-MouseMovement.x, Y_AXIS)
* RotationMatrix(float(Strafing*3), Z_AXIS)
* TransformationMatrix
* in_Vertex;
Run Code Online (Sandbox Code Playgroud)
哪个部分是旧的gl_ModelViewMatrix,哪个部分是gl_ModelViewProjectionMatrix?(什么是用于创建ModelViewProjection的gl_ProjectionMatrix?)
http://www.lighthouse3d.com/opengl/glsl/index.php?ogldir2 报告说,OpenGL上下文中的一半矢量是"眼睛位置 - 光线位置",但随后它继续说'幸运的是,OpenGL为我们计算它'[现已弃用].
如何,实际上可以计算(一个简单的例子将非常感激)[主要是,它困惑我什么是"眼睛"是什么以及如何得出].
目前我设法使镜面计算工作(具有良好的视觉效果),半矢量等于Light所在的Light
vec3 Light = normalize(light_position - vec3(out_Vertex));
Run Code Online (Sandbox Code Playgroud)
现在,我不知道为什么会这样.
[如果至少我知道"眼睛"是什么以及如何实际得出它.]
我注意到了
float f;
[..]
printf("%i\n", f);
Run Code Online (Sandbox Code Playgroud)
不合理
但
printf("%i\n", (int)f);
Run Code Online (Sandbox Code Playgroud)
是
但是也
int func(float f) {
return f;
}
Run Code Online (Sandbox Code Playgroud)
没问题
printf("%i\n", func(f));
Run Code Online (Sandbox Code Playgroud)
是由返回流程或标准支持的功能完成的转换/转换,还是理想的需要
int func(float f) {
return (int) f;
}
Run Code Online (Sandbox Code Playgroud)
?
众所周知,OpenGL驱动程序通常不会容忍[多线程]线程.但是,是否必须处理带来GL上下文的主线程(例如SDL)?如果一个产生一个线程,然后从那里开始发送OpenGL命令会安全吗?或者它是否必须限制在提升GL上下文的主线程中?
我对有关此事的规则感到困惑[一个好的URL可能会节省回答的时间].我注意到很多时间转换隐含地起作用,但其他时候它是必需的.
例如,我曾预料到它会起作用:
long long a;
int b;
[..]
a = b * 1000;
Run Code Online (Sandbox Code Playgroud)
但事实证明,'a'溢出并且它是必需的
a = (long long) b * 1000;
Run Code Online (Sandbox Code Playgroud)
这是特殊的,因为'a'是我认为它会打扰的'大'.
无论如何,除了这个例子,您是否知道有关此事的全面信息来源?没有"大部分时间都没事",这让我变得偏执.
编辑:这只是'第二部分首先进行计算并且溢出,遵循该规则'的问题吗?
EDIT2:如果有计算如
long long a;
int b;
short c;
[..]
c = b + a * 3;
Run Code Online (Sandbox Code Playgroud)
,会做的
c = b + (int) a * 3;
Run Code Online (Sandbox Code Playgroud)
确保正确转换?
还是需要呢?
c = (short) b + (int) a * 3;
Run Code Online (Sandbox Code Playgroud)
或者,它是否足够
c = (short) b + a * 3;
Run Code Online (Sandbox Code Playgroud) 我注意到在windows和linux x86上,float是4bytes,double是8,但long xins分别是x86和x86_64上的12和16.C99应该用特定的整体尺寸打破这种障碍.
最初的技术限制似乎是由于x86处理器无法处理超过80位的浮点运算(加上2个字节来进行舍入),但为什么标准与int类型相比不一致?他们为什么不至少达到80bit标准化?
例如地震发动机
typedef enum {qfalse, qtrue} qboolean;
Run Code Online (Sandbox Code Playgroud)
当一个人这样做
static qboolean variable;
Run Code Online (Sandbox Code Playgroud)
变量的启动值是0吗?