小编Cod*_*ith的帖子

在OpenGL中进行Mipmapping

我在使用mipmap工作时遇到了很多麻烦.我正在使用OpenGL 1.1,我没有glu,所以我使用以下纹理启动代码:

  glGenTextures(1,&texname);
  glBindTexture(GL_TEXTURE_2D,texname);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_NEAREST);
  w=width;h=height;
  for(int i=0;i<mipmaps;i++,w/=2,h/=2)
    glTexImage2D(GL_TEXTURE_2D,i,GL_RGBA8,w,h,0,GL_RGBA,GL_UNSIGNED_BYTE,tex[i]);

变量:

// data types:
unsigned long int *tex[20];
int mipmaps, width, height, w, h;
GLuint texname;

tex是一个包含纹理mipmap像素数组列表的数组.mipmap正确处理(我单独测试).mipmaps是将原始图像缩小为1x1像素纹理的mipmap数量(原始纹理为256x256 - 因此在代码中此时为8).width并且height是原始纹理的尺寸(256x256).

结果是它甚至不使用纹理.一切都呈现出平坦的灰色(由于照明而呈灰色).

有什么我忘了吗?我检查了这个参考,我找不到任何冲突.

其他细节:总的来说,我正在启用GL_DEPTH_TEST,GL_TEXTURE_2D,GL_LIGHTING,GL_CULL_FACE,GL_FOG(和GL_LIGHT0,GL_LIGHT1,这可能没有什么区别).此外,我正在使用Mesa 3D的OpenGL实现(Mesa版本4.0,转换为OpenGL版本1.3),如果这可能与它有任何关系.

编辑:

问题是,当我将GL_NEAREST_MIPMAP_NEAREST更改为GL_NEAREST时,纹理工作正常(不使用mipmap).所以,我看不出它是如何成为任何其他代码 - 至少我想不出它可能是什么.

c++ opengl mipmaps

2
推荐指数
1
解决办法
6106
查看次数

if语句块中的变量初始化

每次我在if语句的块及其else的块中初始化变量,并在之后使用它时,编译器会发出错误:未声明变量.例如:

if (/*Some expression*/)
  int a=5;
else
  int& a=c;

//...

a++; // Variable not declared
Run Code Online (Sandbox Code Playgroud)

我的编译器会说a未声明.关于除if语句之外的任何声明的主要问题是,在一种情况下,变量a必须是引用,必须在初始化时设置它.此外,我真的不想创建一个新的变量,除非它是必要的,它不是它可以作为参考.

还有别的我做错了吗?或者传递错误的方法?还是某种类型的变量原型?

c++

1
推荐指数
1
解决办法
740
查看次数

将log10()用于浮点数-2.584877722073e-33时出错

我在尝试使用浮点数时遇到了一个奇怪的错误.我正在尝试计算以下数字的log10(在"math.h"中):

-0.000000000000000000000000000000002584877722073    ==    -2.584877722073e-33

它一直在崩溃.这是一个有效的浮动吗?当然,我正在处理浮动本身的原始数据.

我已经研究了浮点数,根据我的理解,这不是NaN,Inf或非正规数.二进制文件似乎不匹配任何无效的东西:

1 | 00010010 | 10101101011111001000100

这种精度对数字有限制吗?可能导致问题的原因是什么?

c++ logarithm floating-point-precision

1
推荐指数
1
解决办法
236
查看次数

Tkinter - 相同重量的列不等于宽度

我有一个有三列的Tkinter Toplevel窗口.所有三列都配置为具有相同的权重.内部列02子框架,其中是Listbox小部件.内部列1是一组按钮.出于某种原因,尽管我的3列具有相同的权重,但这些列表框"迫使"它们的列占用更多空间.

我写过,

window.columnconfigure(0,weight=1)
window.columnconfigure(1,weight=1)
window.columnconfigure(2,weight=1)

但我得到:

不等的尺寸

我还给出1了3和5的列权重,但它仍然很小.但是,完成此操作后,似乎02具有一些最小尺寸,然后在从实际宽度中减去该值后,使用剩余宽度并除以重量.

这是一个错误吗?我需要对我的名单做些什么吗?我可能会忘记什么吗?

layout tkinter python-2.7

1
推荐指数
1
解决办法
709
查看次数

C++ 11基于范围的for循环for std :: list

如果我正确理解基于范围的for循环,它会扩展

for ( range_declaration : range_expression ) loop_statement
Run Code Online (Sandbox Code Playgroud)

{
    auto && __range = range_expression ;
    for (auto __begin = begin_expr, __end = end_expr;
            __begin != __end; ++__begin) {
        range_declaration = *__begin;
        loop_statement
    }
}
Run Code Online (Sandbox Code Playgroud)

因此增加指针,如果我理解std::lists在内部实现为双链表,那么假设这样的东西不能打印是不正确的0 1 2 3,因为内存地址不是连续的(隐含的++__begin)?

std::list<int> myList = {0, 1};
std::list<int> otherList = {10, 11};
myList.push_back(2);
myList.push_back(3);

for(auto& i: myList)
    std::cout << i << " ";
Run Code Online (Sandbox Code Playgroud)

然而它确实打印正确.那么,是否std::list::iterator覆盖了for-for-loop扩展中使用的运算符的行为?

如果我选择实现自己的范围 - 可迭代数据结构,这对我来说特别重要.

c++ for-loop stdlist c++11

1
推荐指数
2
解决办法
1469
查看次数