- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 C++ 中,最好默认使用 double
,只有当我们确实需要它们时才使用 float
或 long double
。不过对于 OpenGL,我看到 GLfloat
似乎是默认值。考虑到 double 现在在最新的 GPU 上很常见,它仍然有意义吗?
最佳答案
情况正好相反。你应该在 C++ 中默认使用 float
并且只有在你确定你确实需要那些额外的精度数字时才使用 double
(对于某些科学,可能是天文或粒子物理、模拟)。通常当您认为需要 double
时,您应该使用定点,或者您应该将 float
值置于正确的范围内。
您不对图形使用 double 。尽管所有现代 GPU 都很好地支持它,但 double 学通常比单精度慢,而且它没有明显的优势。与“图形”相关的一切(或者假设 99.99%,因为“一切”是一个非常明确的措辞)就此而言使用 float
或 GLfloat
工作得很好。
即使在几年前,当一些 GPU 仅以 24 位精度工作时,也没有明显的区别。
事实上,当人们使用 double
是因为他们认为他们应该这样做时,那么 99% 的时间他们都做错了。
Tom Forsyth 甚至将“ double ”作为他 Offend-O-Matic 的第一点.他专门与“游戏”相关,但它实际上适用于几乎所有软件,一些科学模拟除外。请务必阅读随附的文章 A Matter of Precision理解他的推理。
埃里克森的 epsilon is not 0.000001 关于 float 的必读内容不那么令人反感。演示文稿。
在 OpenGL 中非常相似。如果您了解 float 的工作原理并正确使用它,那么 float
就可以正常工作。应用变换矩阵等时的舍入误差是不可见的。
如果您不理解它是如何工作的,使用 double 会将问题向后转移一点,但当您不期望它时它仍然会咬住您。
令人惊讶的是,即使是现在人们仍然使用 double 浮点,即使是出于货币或时间等荒谬的原因(因为它的精度是两倍,嗯?)并且当它在他们面前爆炸时会感到惊讶人们开始对他们大喊大叫。
关于c++ - 默认情况下是 GLfloat 还是 GLdouble?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20121105/
有没有更快的方法将下面的数据转换成c风格的指针数组? GLfloat verticalLines [] = { 0.59, 0.66, 0.0, 0.59, -0.14, 0.0 } 我目前的方
我正在 OpenGL ES 2.0 中创建一个应用程序,想要设置一个 2D 投影矩阵来解决由屏幕纵横比引起的拉伸(stretch)和扭曲。我使用一个函数创建了一个具有所需值的矩阵。该函数的结果是一个
我在 Objective-C 中动态声明 GLfloat 数组时遇到了一些问题。这是c我正在使用的颂歌: GLfloat *m_bindPositions; @implementation int n
为什么我不能这样做? #include GLfloat posX; posX=0.0f; Visual Studio 说: error C4430: missing type specifier
我想在我创建的项目中添加一些光照,但出现以下编译器错误: error C2440: 'initializing' : cannot convert from 'float' to 'GLfloat [
当声明为局部变量时,不会发生旋转 GLfloat 对象。当它被声明为全局时,它会相应地轮换,它背后要求全局的原因是什么? OpenGL 程序的 display() 函数是否调用其他东西? 最佳答案 我
在使用此类声明时遇到一些问题,我正在尝试为 Dijktra 最短路径算法的 openGL 实现创建节点。 getX()、getY()、getZ() 方法导致错误: 错误:ISO C++ 禁止声明没有类
这个问题在这里已经有了答案: Do I have to use the OpenGL data types (GLint, CLchar, ...) for a cross platform game
我知道 CGFloat 应该在 Cocoa 应用程序中使用,以使它们成为 64 位干净的。但是,在一个简单的 OpenGL 游戏中,除了渲染(到 NSOpenGLView)之外,其他所有事情都使用 C
在使用 OpenGL 分配 VBO 之后,我使用 clCreateFromGLBuffer 从中创建了一个 OpenCL 缓冲区. 我将 VBO 用作 GLfloat 数组,将 OpenCL 缓冲区用
我尝试使用 创建 GLfloat 缓冲区数组 GLfloat mat_diffuse[] = { .2f, .2f, .6f, 1f }; 但是java找不到类GLfloat,当我尝试使用普通的 fl
我目前正在 iOS 中使用 OpenGL,我想听听是否有任何方法可以将向量转换为 GLfloat? 由于 glBufferData: void glBufferData(GLenum target,
我试图在这里做点什么,但出现了错误我真的不知道如何正确完成它我试图将 Figure.h 中的所有变量作为 GLfloat 而不是 float 并且相同的错误不断出现主意?这是我的图.h Class F
在 C++ 中,最好默认使用 double,只有当我们确实需要它们时才使用 float 或 long double。不过对于 OpenGL,我看到 GLfloat 似乎是默认值。考虑到 double
如何将 float 数组转换为 Glofloat 数组?我需要制作图表,并且需要发送 float 数组来显示函数。我的 float 组是全局变量/ 最佳答案 GLfloat 是 float 的类型定义
我有一个 GLKMatrix4 变量,并且想将它的 GLfloat *array 值用于 glUniformMatrix4fv 函数。我用谷歌搜索但没有找到任何有用的信息。 cocos3d SDK中有
最后Mr.Chris 帮我用GLKview 和drawInRect: 方法画了一条线。它工作正常。但是,我需要一些说明, 我们如何为 GLFloat 赋值? const GLfloat line[]
我正在使用 GLKit 绘制一个像素。我可以在 (10, 10) 坐标处成功绘制像素,如果我有: glClearColor(0.65f, 0.65f, 0.65f, 1.0f); glClear(GL
关于如何正确初始化 GLFloats 数组逐行,目前我的脑子里有个结。据我所知,数组可以这样写: int a[2][2] = {{1,2},{3,4}} 在我的例子中,我有数组 GLfloat tar
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to find the sizeof(a pointer pointing to an array)
我是一名优秀的程序员,十分优秀!