在我的应用程序中进行一些更改后,我的纹理不再显示.到目前为止,我已经检查了以下内容:
任何通常的嫌疑人?
This is just a quick question before I dive deeper into converting my current rendering system to openGL. I heard that textures needed to be in base 2 sizes in order to be stored for rendering. Is this true?
My application is very tight on memory, but most of the bitmaps are not powers of two. Does storing non-base 2 textures consume more memory?
我试图找出原始摩托罗拉Droid的最大纹理大小.我相信G1的最大纹理大小为512,但如果有更正式的方式我会发现它会很好,所以我可以建立一个合适的瓷砖系统.
我正在使用/目标OpenGL 4.20,GSLSL 4.20,核心.使用C.
我正在使用OpenGL探索图形,并决定制作基于图块的游戏.我正在想要实际绘制一堆瓷砖,我正在尝试使用glDrawElements绘制单个三角形.
相关代码:
const float vertexPositions[] = {
-1.0f, -0.8f, //0
-0.8f, -0.8f, //1
-0.6f, -0.8f, //2
-0.4f, -0.8f, //3
-0.2f, -0.8f, //4
0.0f, -0.8f, //5
-1.0f, -1.0f, //6
-0.8f, -1.0f, //7
-0.6f, -1.0f, //8
-0.4f, -1.0f, //9
-0.2f, -1.0f, //10
0.0f, -1.0f, //11
//The following are the texture coordinates.
0.00f, 1.00f,
1.00f, 1.00f,
0.00f, 1.00f,
1.00f, 1.00f,
0.00f, 1.00f,
1.00f, 1.00f,
0.00f, 0.00f,
1.00f, 0.00f,
0.00f, 0.00f,
1.00f, 0.00f,
0.00f, 0.00f,
1.00f, 0.00f,
};
const GLubyte indices[] …
Run Code Online (Sandbox Code Playgroud) 在我的2D等距引擎中,我有以下类:
`maps(variable)/layers(variable)/cubes(variable)/sides(6)/points(4)/coordinates(3)`
Run Code Online (Sandbox Code Playgroud)
sides
包含4 points
(1 point
= 1 coordinate
(x,y,z)).Folers:
assets/numTexture/numLight.png
Run Code Online (Sandbox Code Playgroud)
我用numTexture和numLight计算一个数字,它是textureNumberEntry(我在数组中加载了所有numLight.png(纹理)).
但纹理化的错误是错误的:
我在图层类中定义了立方体坐标:
for(int J = 0; J < mapSize; J++)
{
for(int I = 0; I < mapSize; I++)
{
x = (J - I) * (cubeSize/2);
y = (J + I) * (cubeSize/4);
c = new cube(cubeSize, x, y, z, I, J);
cs.push_back(*c);
}
}
Run Code Online (Sandbox Code Playgroud)
在side.cpp中,我在sideType上有一个开关(如果它是顶部,左边等等......我用不同的方式定义我的点'坐标).每个立方体我有6个(这里只有数据)像这样:
switch(typeSide)
{
case 0://DOWN_SIDE
light = 0;
tmp_x = x + (size/2);
tmp_y = y + …
Run Code Online (Sandbox Code Playgroud) 量化图像某一部分纹理的方法有哪些?我正在尝试检测图像中纹理相似的区域,这类似于"它们的相似程度如何?"
所以问题是关于图像的信息(边缘,像素值,梯度等)可以被视为包含其纹理信息.
请注意,这不是基于模板匹配.
维基百科没有提供有关实际实施任何纹理分析的详细信息.
在MSDN文档解释说,在DirectX 11有多种方法以编程方式填充的DirectX 11质地:
(1)使用默认使用纹理创建纹理,并使用内存中的数据对其进行初始化
(2)使用动态用法创建纹理,使用DeviceContext Map获取指向纹理内存的指针,写入它,然后使用Unmap指示你已完成(此时我猜它被复制到gpu)
(3)使用分段用法创建纹理,并按照与动态纹理相同的步骤进行,但是通过调用ID3D11DeviceContext.CopyResource来使用此分段纹理依次填充(非不可变)默认或动态纹理.
然而,文档并没有解释每种方法的优缺点,而且我对directx还是一个新手,所以对我来说一点也不清楚.
在directx 11中以编程方式创建纹理的每种方法的优缺点是什么?
旁注:我已经读过,在分段纹理的上下文中,从gpu 读回不是缓冲的,所以你必须做自己的双缓冲.但我不知道这是否准确,是否适用于使用分段纹理(甚至真正意味着什么)写作.
第二方面注意: Map方法文档说它获取了一个指向子资源中数据的指针,并拒绝GPU访问该子资源.当GPU想要访问其底层数据已被Map调用的纹理时,它会做什么?失速?(我问,因为这听起来像是我询问的利弊的一部分)
我想将原始纹理数据转储到磁盘上(稍后再回读),我不确定glReadPixel会从当前绑定的纹理中读取.
如何从纹理中读取缓冲区?
我正在努力学习SDL2.旧SDL和SDL2之间的主要区别(我可以看到)是旧的SDL具有由其表面表示的窗口,所有图片都是表面,所有图像操作和blits是表面到表面.在SDL2中,我们有表面和纹理.如果我做对了,表面在RAM中,纹理在图形内存中.是对的吗?
我的目标是为SDL2制作面向对象的包装器,因为我对SDL有类似的东西.我想拥有类窗口和类图片(具有私有纹理和表面).窗口将使其内容由图片类的实例表示,并且所有blits将是图片到图片对象的blits.如何组织这些图片操作:
一般来说,什么时候应该使用表面?什么时候应该使用纹理?
感谢您的时间,欢迎所有的帮助和建议:)
我想将texture1复制到texture2.最愚蠢的方法是将tex1数据从GPU复制到CPU,然后将CPU数据复制到GPU.愚蠢的代码如下:
float *data = new float[width*height*4];
glBindTexture(GL_TEXTURE_2D, tex1);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_FLOAT, data);
glBindTexture(GL_TEXTURE_2D, tex2]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_FLOAT, data);
Run Code Online (Sandbox Code Playgroud)
据我所知,它必须存在一种方法,支持从GPU tex到GPU tex的数据复制,而不涉及CPU.我考虑使用将tex1 quad渲染为tex2的FBO.但不知何故,我认为它还是天真的.那么实现这个的最有效方法是什么?