我在使用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).所以,我看不出它是如何成为任何其他代码 - 至少我想不出它可能是什么.
每次我在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必须是引用,必须在初始化时设置它.此外,我真的不想创建一个新的变量,除非它是必要的,它不是它可以作为参考.
还有别的我做错了吗?或者传递错误的方法?还是某种类型的变量原型?
我在尝试使用浮点数时遇到了一个奇怪的错误.我正在尝试计算以下数字的log10(在"math.h"中):
-0.000000000000000000000000000000002584877722073 == -2.584877722073e-33
它一直在崩溃.这是一个有效的浮动吗?当然,我正在处理浮动本身的原始数据.
我已经研究了浮点数,根据我的理解,这不是NaN,Inf或非正规数.二进制文件似乎不匹配任何无效的东西:
1 | 00010010 | 10101101011111001000100
这种精度对数字有限制吗?可能导致问题的原因是什么?
我有一个有三列的Tkinter Toplevel窗口.所有三列都配置为具有相同的权重.内部列0和2子框架,其中是Listbox小部件.内部列1是一组按钮.出于某种原因,尽管我的3列具有相同的权重,但这些列表框"迫使"它们的列占用更多空间.
我写过,
window.columnconfigure(0,weight=1) window.columnconfigure(1,weight=1) window.columnconfigure(2,weight=1)
但我得到:
我还给出1了3和5的列权重,但它仍然很小.但是,完成此操作后,似乎列0和2具有一些最小尺寸,然后在从实际宽度中减去该值后,使用剩余宽度并除以重量.
这是一个错误吗?我需要对我的名单做些什么吗?我可能会忘记什么吗?
如果我正确理解基于范围的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扩展中使用的运算符的行为?
如果我选择实现自己的范围 - 可迭代数据结构,这对我来说特别重要.