草庐IT

Textures

全部标签

c++ - 我应该垂直翻转加载有 stb_image 的图像的线条以在 OpenGL 中使用吗?

我正在研究OpenGL驱动的2d引擎。我正在使用stb_image加载图像数据,以便创建OpenGL纹理。我知道OpenGL的UV原点是左下角,我还打算在该空间中为我的屏幕空间2d顶点工作,即我正在使用glm::ortho(0,width,0,height,-1,1),不反转0和高度。您可能猜到了,我的纹理是垂直翻转的,但我100%确定我的UV指定正确。那么:这是不是stbi_load存储像素数据造成的呢?我目前只加载PNG文件,所以我不知道如果我使用其他文件格式是否会导致此问题。会吗?(我现在不能测试,我不在家)。我真的很想将屏幕坐标保持在“标准”OpenGL空间中...我知道我可以

c++ - glUniform 无法设置采样器值

我正在使用OpenGL和GLSL在简单的网格上绘制纹理。我的问题是,当我使用glUniform1i设置sampler2Duniform的值时,它没有被设置。例如在这段代码中:glUseProgram(programObject);glUniform1i(glGetUniformLocation(programObject,"texture"),1);GLintval;glGetUniformiv(programObject,glGetUniformLocation(programObject,"texture"),&val);printf("Valueis%d\n",val);命令行输

c++ - OpenGL 混合在纹理周围创建白色边框

我正在尝试使用OpenGL(C++)将两个纹理渲染到一个矩形上。不过,我在混合这两者时遇到了一些麻烦。第一张图片来自.jpg文件(https://learnopengl.com/img/textures/container.jpg)。此图像没有alphachannel。第二张图片来自.png文件(https://learnopengl.com/img/textures/awesomeface.png),并且确实有一个alphachannel。问题是当我尝试混合两个图像时,它会在透明图像周围创建一个白色边框。我尝试了几种不同的混合模式(正如OP在这个问题中所推荐的:Alphablendi

c++ - 从高度图计算纹理坐标

我目前正在使用OpenGL构建高度图地形生成器。这是一个加载高度图图像、迭代图像数据并生成顶点、索引和法线的简单程序。在其当前状态下,它可以基于法线渲染具有单一颜色的高度图。我的问题是为漫反射贴图生成正确的UV坐标。结果是错误的:这是我要加载的漫反射贴图:这是我目前拥有的:生成顶点、法线和索引//GenerateVerticesandtexturecoordinatesfor(introw=0;rowimageHeight;row++){for(intcolumn=0;columnimageWidth;column++){floatx=(float)column/(float)this

c++ - 如何在 OpenGL 中使纹理透明?

我试图在Google上对此进行研究,但在我看来没有任何连贯的简单答案。这是因为它不简单,还是因为我没有使用正确的关键字?尽管如此,这是我迄今为止取得的进步。创建了8个顶点以形成2个正方形。创建了一个具有200位alpha值的纹理(因此,大约80%透明)。为每个正确显示的正方形分配相同的纹理。注意到当我使用255alpha的纹理时,它看起来更亮。初始化是这样的:glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_FLAT);glEnable(GL_DEPTH_TEST);glEnable(GL_CULL_FACE);glEnable(GL_BLEN

c++ - 向由顶点构成的平面添加纹理

我用这段代码在OpenGL中创建了一个平面:glBegin(GL_TRIANGLE_STRIP);glColor4f(0.8,0.8,0.5,1.0);glVertex3f(startlen,height,startwid);glVertex3f(startlen,height,startwid+width);glVertex3f(startlen+length,height,startwid);glVertex3f(startlen+length,height,startwid+width);glEnd();现在我想在这个平面上应用纹理。我已阅读本教程here但我在“在OpenGL中

c++ - Cuda - 从设备全局内存复制到纹理内存

我正在尝试使用Cuda和C++在GPU上执行两项任务(分为2个内核)。作为输入,我采用NxM矩阵(作为float组存储在主机的内存中)。然后,我将使用一个内核对该矩阵执行一些操作,使其成为NxMxD矩阵。然后我有第二个内核,它对这个3D矩阵执行一些操作(我只是读取值,我不必向它写入值)。在纹理内存中操作对于我的任务来说似乎要快得多所以我的问题是是否可以在内核1之后从设备上的全局内存复制我的数据并将其直接传输到内核2的纹理内存而不将其取回给主人?更新我添加了一些代码来更好地说明我的问题。这是两个内核。第一个现在只是一个占位符,将2D矩阵复制到3D中。__global__voidcompu

c++ - 对 VBO 中的特定三角形使用不同的纹理

我有9个由三角形组成的四边形,如下所示:我正在使用VBO来存储关于它们的数据-它们的位置和纹理坐标。我的问题是-是否可以通过仅使用一个VBO和shader使四边形5具有与其余四边形不同的纹理?:绿色代表纹理1,黄色代表纹理2。到目前为止我得到了:GLfloatvertices[]={//Positions0.0f,0.0f,...//Texturecoordinates0.0f,0.0f,...};我正在使用vertices[]数组创建VBO,然后绑定(bind)我的第一个纹理m_texture1(我也可以访问第二个-m_texture2)并调用着色器:glBindTexture(GL

c++ - 如何从 2D 纹理中成功读取

我怎样才能:将cudaMallocPitch浮点内存绑定(bind)到2D纹理引用复制一些主机数据到设备上的二维数组将一个添加到纹理引用并写入a.)Pitch二维数组或b.)写入线性内存数组读回答案并展示。下面是一个应该完成这个的代码。请注意,对于NxN数组大小,我的代码有效。对于NxM,其中N!=M,我的代码基本没问题(不是正确的结果)。如果你能解决这个问题,我将奖励你1个互联网(数量有限)。也许我疯了,但根据文档,这应该有效(而且它确实适用于方阵!)。附加代码应使用“nvccwhateveryoucallit.cu-orunit”运行。感谢您的帮助!#include#include

c++ - 在着色器中同时在同一纹理单元中使用不同的纹理类型

当我尝试在我的着色器中对不同的纹理类型(即普通2D纹理和立方体贴图)使用相同的纹理单元(编号0)时,我在我的程序中遇到了一个棘手的问题。看起来GL在第一次glDrawArrays调用后发出502H(无效操作)。在我的应用程序代码中,我将纹理加载到不同的纹理目标:voidsetup_textures(){unsignedintwidth,height;intcomponents;unsignedintformat;floatparam[8];vectorpngData;GLenumtexture_target;glGenTextures(2,textures);glGetFloatv(G