OpenGL到OpenSceneGraph迁移:在某些纹理尺寸的情况下显示不正确
我正在用使用OpenSceneGraph的代码替换我应用程序的OpenGL代码 我正在处理大图像(分辨率高于5000x5000px),因此图像被分割成更小的分幅 绘制平铺的OpenGL代码使用OpenGL到OpenSceneGraph迁移:在某些纹理尺寸的情况下显示不正确,opengl,texture2d,openscenegraph,Opengl,Texture2d,Openscenegraph,我正在用使用OpenSceneGraph的代码替换我应用程序的OpenGL代码 我正在处理大图像(分辨率高于5000x5000px),因此图像被分割成更小的分幅 绘制平铺的OpenGL代码使用glTexImage2D(GL\u TEXTURE\u 2D,…,imageData),其中imageData是平铺字节数组 使用OpenSceneGraph,我使用相同的imageData创建了一个osg::Image,并使用这个osg::Image对一个简单的四边形进行纹理处理 问题是,我的显示很难看,
glTexImage2D(GL\u TEXTURE\u 2D,…,imageData)
,其中imageData
是平铺字节数组
使用OpenSceneGraph,我使用相同的imageData
创建了一个osg::Image
,并使用这个osg::Image
对一个简单的四边形进行纹理处理
问题是,我的显示很难看,导致某些osg::Image
维度
对于256x128这样的瓷砖,一切正常
这就是原始图像在OpenGL中的表现
但下面是254x130瓷砖和osg::Image的外观:
我想了解问题是什么。由于OpenSceneGraph是基于OpenGL的,我想我写的OpenSceneGraph代码相当于旧的OpenGL代码。此外,我无法更改瓷砖大小,因此我确实需要使用254x130瓷砖
图像创建代码:
`osg::Image * image = new osg::Image();
//width, height, textFormat, pixelFormat, type and data
//are the ones that were used with glTexImage2D
image->setImage(width, height, 1, textFormat, pixelFormat, type, data, NO_DELETE);
osg::Texture2D * texture = new osg::Texture2D;
texture->setImage(image);
stateset->setTextureAttributeAndModes(0, texture, osg::StateAttribute::ON);`
我认为很可能是像素数据与传递给setImage()的格式/类型不匹配。
例如,如果图像数据是RGB,每种颜色有一个字节,则应调用
image->setImage(w, h, 1, GL_RGBA8, GL_RGB, GL_UNSIGNED_BYTE, data, osg::Image::NO_DELETE);
如果你的纹理垂直翻转,那是因为OpenGL总是考虑左下角的纹理原点,所以你必须在调用SeTimeAGE()之前翻转图像数据(或者反转你的几何图形的UV坐标)。
我认为它很可能是像素数据和你传递给SimTime的格式/类型之间的不匹配。()。
例如,如果图像数据是RGB,每种颜色有一个字节,则应调用
image->setImage(w, h, 1, GL_RGBA8, GL_RGB, GL_UNSIGNED_BYTE, data, osg::Image::NO_DELETE);
如果你的纹理垂直翻转,那是因为OpenGL总是考虑左下角的纹理原点,所以你必须在调用SeTimeAGE()之前翻转图像数据(或者反转你的几何图形的UV坐标)。.
请分享一些关于如何创建、分配和填充osg::Image的代码-错误的图像应该是黑白的吗?我在原始消息中添加了一些代码。灰色图像应该看起来像绿色的。我还注意到每个瓷砖都是倾斜的。请分享一些关于如何创建、分配和填充osg的代码::图像-错误的图像应该是黑白的吗?我在原始消息中添加了一些代码。灰色图像应该看起来像绿色的。我还注意到每个瓷砖都是倾斜的。我朝那个方向做了一些测试,没有,像素数据、格式和类型都是可以的。对于一组固定的像素数据,格式类型和源,我mage,破坏显示的唯一因素是OpenSceneGraph和4个平铺大小的非倍数。我在那个方向做了一些测试,没有,像素数据、格式和类型都可以。对于一组固定的像素数据、格式类型和源图像,破坏显示的唯一因素是OpenSceneGraph和4个平铺大小的非倍数。