草庐IT

纹理表

全部标签

c++ - Qt3D纹理参数

我正在使用Qt3D(5.11),当我尝试设置要由自定义片段着色器使用的QParameter值时遇到断言。这是似乎不起作用的代码部分:autoentity=newQt3DRender::QEntity(mRootEntity);automaterial=newQt3DRender::QMaterial(entity);//Setupthecustomgeometryandmaterialfortheentity,whichworks//fineintestsaslongasthefragmentshaderdoesnotusetexturemappingautoimage=newQt3D

c++ - 可以在着色器中找到纹理的内部格式吗?

是否可以在着色器(glsl)中找到纹理的内部格式?例如,如果我有一个格式为GL_RG的纹理,是否可以在着色器中识别出蓝色和alpha值是“常量”并且可以忽略?我知道我可以使用制服将纹理类型从C++传递到着色器。但是是否有一种“内在”的方法可以从着色器中找出答案? 最佳答案 不,我认为没有任何东西可以直接为您提供此信息。查看最新的GLSL规范(此时为4.50),我希望一个假设的函数可以在第158页开始的“8.9.1.纹理查询函数”部分中列出该信息。但是列出的唯一函数有:textureSize:获取纹理的大小。textureQueryL

c++ - 将 OpenGL 纹理打印到文件而不显示?

我正在尝试使用OpenGL来帮助将Kinect深度图输入处理成图像。目前,我们将Kinect用作​​基本运动传感器,该程序会计算路过的人数,并在每次检测到新人时拍摄屏幕截图。问题是我需要让这个程序在没有显示的情况下运行。我们希望通过SSH远程运行它,而来自其他服务的网络流量对于X11转发来说将是一个好主意。将显示器连接到运行程序的机器是可能的,但出于能源消耗的原因,我们希望避免这样做。该程序确实为OpenGL生成了一个2D纹理对象,并且通常只是在读取像素并使用FreeImage将它们输出到.PNG文件之前使用GLUT对其进行渲染。我遇到的问题是,一旦删除了GLUT函数调用,所有打印到.

C++Amp 将 16 位图像从一个纹理复制到另一个纹理(来自 openCV Mat)

此问题是此问题的下一步link.简而言之,我正在处理来自kinect的深度图像,它可以检索16位图像。使用C++Amp,我们确实对数据的位大小有一些限制。所以,我正在尝试使用纹理来处理它。现在,我确定我正在写入正确的像素。但是,从我的纹理原始数据中检索似乎存在一些问题。这是代码:typedefconcurrency::graphics::textureTextureData;typedefconcurrency::graphics::texture_viewTexture;cv::Matimage(480,640,CV_16UC1);cv::Matimage2(480,640,CV_1

c++ - OpenGL:使用球坐标在球体上映射纹理

我有一个地球纹理,我想将其映射到一个球体上。由于它是一个单位球体,模型本身没有纹理坐标,我能想到的最简单的事情就是计算每个顶点的球坐标并将它们用作纹理坐标。textureCoordinatesVarying=vec2(atan(modelPositionVarying.y,modelPositionVarying.x)/(2*M_PI)+.5,acos(modelPositionVarying.z/sqrt(length(modelPositionVarying.xyz)))/M_PI);在片段着色器中执行此操作时,效果很好,因为我从(插值的)顶点位置计算纹理坐标。但是当我在顶点着色器

c++ - OpenGL 加载将最后加载的纹理绑定(bind)到所有 textureID

所以我的问题是我尝试在启动时加载多个纹理,然后存储所有ID,以便我可以绑定(bind)它们以使用它们。现在我知道ID已正确存储,因为我可以调试它并在分配和使用中看到ID是相同的。对于每个绑定(bind),它都使用我加载的最后一个纹理。这是我的代码:GLuintTextureLoader::LoadTexture(constchar*fileName,Material&material,intwidth,intheight){GLuinttextureImage;FILE*textureFile;textureFile=fopen(fileName,"rb");unsignedchar*

c++ - 如何在 Pi 上使用 OpenGL ES 在绘制到屏幕之前旋转纹理

最近才知道树莓派的GPU只支持OpenGLES。我有一个任务要完成,问题是,每当我搜索OpenGLES时,我都会得到基于Android和IOS的结果。谢天谢地,我只有一个小问题。我偶然发现了simple2d库,它抽象了OpenGLES与pi上的视频核心IVGPU的接口(interface)。它是一个开源库,似乎不支持旋转纹理。这是我想要清除所有障碍的唯一功能。这是对DrawTextures的调用。我将非常感谢任何帮助我解决这个问题的人。staticvoidS2D_GLES_DrawTexture(intx,inty,intw,inth,GLfloatr,GLfloatg,GLfloat

c++ - 着色器纹理值与创建纹理时写入的值不同

我创建了一个纹理并填充了纹理:size_tsize=width*height*4;float*pixels=newfloat[size];for(size_ti=0;i我使用线性过滤(GL_LINEAR)并固定到边界。但是当我绘制图像时:color=texture(atlas,uv);最后一行看起来它的alpha值小于1。如果在着色器中我将alpha设置为1:color.a=1.0f;它绘制正确。这可能是什么原因? 最佳答案 问题来自GL_LINEAR和GL_CLAMP_TO_BORDER的组合:Clamptoborder意味着[0

c++ - 维度不是 2^x 的 openGL 纹理

我正在尝试在openGL环境中显示图片。图片的原始尺寸为3648x2432,我想用256x384的图像显示它。问题是,384不是2的幂,当我尝试显示它时,它看起来被拉长了。我该如何解决? 最佳答案 我知道有三种方法-Albert建议的那个(调整大小直到适合)。将纹理segmentation为2**n大小的矩形,并以某种方式将它们拼接在一起。看看您是否可以使用GL_ARB_texture_non_power_of_two。不过,最好避免使用它,因为它看起来像是特定于Xorg的扩展。 关于c

c++ - 对纹理进行增量更新的最佳方法? (渲染到纹理)

我想在OpenGL中渲染纹理,但对纹理进行增量更改。这是我想象的过程:清除Color&glViewport()到纹理大小绘制原始纹理(glOrtho或其他),如何以完美的质量复制原始纹理?绘制增量更改再次清除,将视口(viewport)设置为屏幕大小绘制场景并翻转有没有更好的方法来做到这一点? 最佳答案 你有两个选择。如果您的硬件不支持FBO,您将不得不按照您编写的方式进行操作。要绘制原始纹理,只需绘制一个具有[0,1]纹理坐标的屏幕大小的四边形。确保使用GL_NEAREST作为过滤模式,使用GL_CLAMP_TO_EDGE作为环绕