标签: texture-mapping

opengl纹理lod偏差调整通过opengl函数调用?

如何通过opengl函数调用来改变lod偏差?我不喜欢默认设置,过早更改miplevels并使附近的地面看起来很难看.

我无法找到任何代码来执行此操作,每个主题都是关于一些执行此任务的外部程序...

编辑:这是我的纹理设置:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
Run Code Online (Sandbox Code Playgroud)

opengl texture-mapping

3
推荐指数
1
解决办法
3562
查看次数

在进行纹理映射操作之前设置GL颜色有什么作用?

我正在看一本书中的一些示例代码,它通过重复将场景(在不同的偏移处)渲染到屏幕外纹理来创建抖动的抗锯齿效果,然后使用该纹理在主视图中重复绘制四边形,并设置一些混合内容.

为了"正确"累积颜色,代码设置颜色如下:

glColor4f(f, f, f, 1);
Run Code Online (Sandbox Code Playgroud)

其中f是1.0/number_of_samples,然后绑定屏幕外纹理并渲染它.

由于纹理带有自己的颜色和alpha数据,因此提前设置整体"颜色"的效果(数学和直观)是什么?

谢谢.

opengl texture-mapping

3
推荐指数
1
解决办法
130
查看次数

OpenGL ES/WebGL中的GL_TEXTURE_2D_ARRAY?

我有一个应用程序,将大大受益于数组纹理的使用.但是,我还无法确定当前WebGL规范和/或WebGL所基于的OpenGL ES 2.0中是否有数组纹理可用.

谁能解释一下这个问题呢?

opengl-es texture-mapping webgl

3
推荐指数
1
解决办法
1084
查看次数

OpenGL 4.3中的纹理点精灵

有没有办法在OpenGl 4.3中将纹理应用于点精灵?我在互联网上搜索过,但大多数教程和指南都使用了仍然支持的旧版本:

 glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_FALSE);
Run Code Online (Sandbox Code Playgroud)

但是,似乎不再支持此功能,并且标准纹理环境似乎不起作用.关于如何做到或在何处找到如何做的任何建议?

opengl texture-mapping point-sprites

3
推荐指数
1
解决办法
1765
查看次数

从 obj 文件的 UV 值(浮点数)查找图像像素坐标(整数)

我正在解析一个包含纹理坐标(vt)值的 obj 文件。据我了解,vt 值是与该 obj 对应的纹理图像的映射。

假设我的图像 im = 400x300 像素

我有一个 vt 值

VT .33345 .8998

映射表示,在图像中,转到坐标:

imageWidth x .3345 、 imageHeight x .8998 并使用那里的值。

我已将图像值加载到二维数组中。

问题是,这些映射坐标是浮点值,我该如何将它们映射到像素坐标的整数值?我总是可以截断小数部分、四舍五入等。但是标准是否定义了要执行哪一个选项?

graphics texture-mapping

3
推荐指数
1
解决办法
5448
查看次数

如何使用opengl纹理将非标准化/非固定值发送到GLSL着色器?

我正在尝试将浮点值(高度图)数组作为GL_TEXTURE_2D发送到GLSL。当我设置好采样器后,问题出在使用glTexImage2D()上传纹理时发生的钳位。

  glGenTextures(1, &_idnewTID);
  glBindTexture(GL_TEXTURE_2D, _idnewTID);

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

  glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, regMesh._cols, regMesh._rows, 0, GL_RED, GL_FLOAT, regMesh._heightMap);
Run Code Online (Sandbox Code Playgroud)

我要发送的值在900.0f至1590.0f范围内。但这在加载到时会被完全钳制到1.0f GL_TEXTURE_2D

如何保持值不被钳制到[0,1]。如何修改glTexImage2D()函数以实现此目标?

PS我知道采样器工作正常,因为当我将值除以1500.0f并将其上载到GPU并在着色器中缩放时,我得到了正确的高度图结构。

opengl glsl texture-mapping heightmap

3
推荐指数
1
解决办法
87
查看次数

在Android OpenGL ES中使用Wavefront .obj的纹理坐标的问题

我正在使用openGL ES编写一个Android应用程序.我遵循了一些在线教程并设法使用硬编码顶点/索引/纹理坐标加载纹理立方体

作为下一步,我为wavefront .obj文件编写了一个解析器.我使用教程中的顶点等制作了一个模拟文件,加载很好.

但是,当我使用使用3d建模包制作的文件时,所有纹理都会混乱

下面是我目前获取纹理坐标的方式:

首先,我将所有纹理坐标加载vt到一个大向量中

接下来我找到每个f三角形的前两个纹理坐标(所以f 1/2/3 2/5/2 3/4/1意味着我采用第2和第5纹理坐标.因为.obj从1开始计数而不是0,我从位置开始必须为-1,然后将位置乘以2作为x坐标位置,并对我的vt数组中的y坐标位置执行相同但+1

我采用刚刚找到的那些纹理坐标并将它们添加到另一个矢量中.

一旦我完成了所有顶点.我将矢量转换为FloatBuffer,将其传递给glTexCoordPointer我的draw方法

这是解析文件的代码:

private void openObjFile(String filename, Context context, GL10 gl){

    Vector<String> lines = openFile(filename, context); // opens the file

    Vector<String[]> tokens = new Vector<String[]>();

    Vector<Float> vertices = new Vector<Float>();
    Vector<Float> textureCoordinates = new Vector<Float>();
    Vector<Float> vertexNormals = new Vector<Float>();

    // tokenise
    for(int i = 0;i<lines.size();i++){
        String line = lines.get(i);
        tokens.add(line.split(" "));
    }

    for(int j = 0;j<tokens.size();j++){
        String[] linetokens = tokens.get(j); …
Run Code Online (Sandbox Code Playgroud)

android opengl-es texture-mapping wavefront .obj

2
推荐指数
1
解决办法
5040
查看次数

使用alpha和glColor4f的OpenGL纹理,glColor4f正在影响纹理

我想从包含alpha透明度的.tga文件中应用纹理.当纹理绑定到对象时,它会显示对象本身的纯色.我希望颜色消失,或至少透明.如果我将对象颜色更改为透明,那么纹理整体变得更加透明,这不是我想要的.

有没有办法关闭颜色,或者我怎样才能使glColor4f不影响纹理?

void Sector::DrawPlanets(double gameTime){
  glEnable(GL_TEXTURE_2D);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glEnable( GL_BLEND );
  glColor4f(0.0f, 0.0f, 1.0f,0.1f);

  for(std::vector<Planet *>::iterator it = Planets.begin(); it != Planets.end(); it++){
    double x,y,angle;
    (*it)->GetPosition(&x,&y,&angle,gameTime);
    int radius = (*it)->GetRadius();
    glPushMatrix();
    glTranslatef(x,y,0);
    GLUquadricObj * sphere = gluNewQuadric();
    gluQuadricDrawStyle(sphere, GLU_FILL);
    gluQuadricTexture(sphere, GL_TRUE);
    glBindTexture(GL_TEXTURE_2D, get_textures()[static_cast<int>((*it)->GetPlanetZone())]);
    gluSphere(sphere,radius,20,20);
    glPopMatrix();
  }
  glDisable(GL_TEXTURE_2D);
  }
Run Code Online (Sandbox Code Playgroud)

侧面信息 我已经看到,加载纹理的方式也可能是问题的罪魁祸首.我也会把它包括在内.这是我从课堂上得到的代码,这就是我使用.tga的原因,因为它已经可以使用了.这是我认为相关的,一些功能不包括在内.

const int num_textures = 5;
static GLuint texName[num_textures];

void InitializeTextures(){
bool repeat[num_textures];
bool border[num_textures];
gliGenericImage *image[num_textures];
int n=0;
repeat[n] = false; border[n] = false;
image[n++] = readImage("ice.tga");
repeat[n] = false; …
Run Code Online (Sandbox Code Playgroud)

c++ opengl transparency texture-mapping

2
推荐指数
1
解决办法
958
查看次数

在表面上循环纹理

我想知道如何在对象的表面上循环纹理.

对于一个实际的例子,我正在尝试处理渲染世界几何,所以当我调整一个两倍于其纹理大小的世界对象时,纹理将出现两次 - 不是两倍大小.

有没有正确的方法来处理这个?我能想到的唯一一件事就是物理地创建一个全新的纹理,它具有合适的大小并手动复制X次,但听起来它会很快耗尽大量内存.

这是在XAxis上调整平面大小时显示我正在寻找的图片:

例

与许多其他变量一起,我将对象的UVMap作为"纹理坐标"传递给我的着色器,然后执行以下操作以在绘制数组调用之前渲染对象的纹理:

QImage image;
image = worldObject->getQImage(i); //Within a for loop, grabs the right texture if the object has differing textures per face of object

glBindTexture(GL_TEXTURE_2D, spot);
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, image.width(), image.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, image.bits());
Run Code Online (Sandbox Code Playgroud)

c++ opengl qt textures texture-mapping

2
推荐指数
1
解决办法
56
查看次数

从glTexStorage3D切换到glTexImage3D

glBindTexture(GL_TEXTURE_2D_ARRAY, texture_id);
glTexStorage3D(GL_TEXTURE_2D_ARRAY,
               1,             // No mipmaps
               GL_RGBA8,      // Internal format
               width, height, // width,height
               1              // Number of layers
               );
glTexSubImage3D(GL_TEXTURE_2D_ARRAY,
                0,                // Mipmap number
                0, 0, 0,          // xoffset, yoffset, zoffset
                width, height, 1, // width, height, depth
                GL_RGBA8,         // format
                GL_UNSIGNED_BYTE, // type
                image);           // pointer to data
Run Code Online (Sandbox Code Playgroud)

为了测试我只创建一个长度为1的数组.我目前正在使用OpenGL 4.3,但我想切换回OpenGL 3.3,这意味着我无法使用glTexStorage3D.

所以我试着转向 glTexImage3D

glBindTexture(GL_TEXTURE_2D_ARRAY, texture_id);
glTexImage3D(GL_TEXTURE_2D_ARRAY,
             1,                // level
             GL_RGBA8,         // Internal format
             width, height, 1, // width,height,depth
             0,                // border?
             GL_RGBA,         // format
             GL_UNSIGNED_BYTE, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl texture-mapping opengl-3

2
推荐指数
1
解决办法
1293
查看次数