GVKun编程网logo

Python-找不到记录程序“ OpenGL.error”的处理程序(找不到python.h)

2

此处将为大家介绍关于Python-找不到记录程序“OpenGL.error”的处理程序的详细内容,并且为您解答有关找不到python.h的相关问题,此外,我们还将为您介绍关于3DComputerGra

此处将为大家介绍关于Python-找不到记录程序“ OpenGL.error”的处理程序的详细内容,并且为您解答有关找不到python.h的相关问题,此外,我们还将为您介绍关于3D Computer Grapihcs Using OpenGL - 14 OpenGL Instancing、Android OpenGL ES 2.0:E/libEGL:在没有当前上下文的情况下调用 OpenGL ES API、Android OpenGL ES 开发(九): OpenGL ES 纹理贴图、ElasticSearch 没有在字段 [field_name] 上声明的类型 [search_as_you_type] 的处理程序的有用信息。

本文目录一览:

Python-找不到记录程序“ OpenGL.error”的处理程序(找不到python.h)

Python-找不到记录程序“ OpenGL.error”的处理程序(找不到python.h)

好的,这是什么,为什么它会在Win2003服务器上而不是在WinXP上发生。

它似乎根本不影响我的应用程序,但是当我关闭应用程序时收到此错误消息。而且很烦人(因为错误消息应该如此)。

我正在使用pyOpenGl和wxPython做图形工作。不幸的是,我是一个接管了这个Python应用程序的C#程序员,我必须学习Python才能做到这一点。

我可以提供代码和版本号等,但是我仍在学习技术知识,因此将不胜感激。

Python 2.5,wxPython和pyOpenGL

3D Computer Grapihcs Using OpenGL - 14 OpenGL Instancing

3D Computer Grapihcs Using OpenGL - 14 OpenGL Instancing

如果我们需要绘制两个(或者多个)一样的立方体(或者物体),只是位置、缩放、旋转不一样,那么我们可以不需要多次将这个物体的顶点信息、颜色信息等发送到显卡,而是发送一次,绘制多次,仅仅是每次绘制之前应用不同的转换矩阵。这种方法叫做 OpenGL Instancing。它的效率比每次都重新发送一次数据到显卡要高很多。

看具体代码:

 1 void MyGlWindow::paintGL()
 2 {
 3     glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
 4     glViewport(0, 0, width(), height());
 5 
 6     //cube1
 7     glm::mat4 projectionMatrix = glm::perspective(30.0f, ((float)width()) / height(), 0.1f, 10.0f);
 8     glm::mat4 translationMatrix = glm::translate(projectionMatrix, glm::vec3(0.0f, 0.0f,-3.0f));
 9     glm::mat4 fullTransformMatrix = glm::rotate(translationMatrix, 54.0f, glm::vec3(1.0f, 0.0f, 0.0f));
10 
11     GLint fullTransformMatrixUniformLocation = glGetUniformLocation(programID, "fullTransformMatrix");
12     glUniformMatrix4fv(fullTransformMatrixUniformLocation, 1, GL_FALSE, &fullTransformMatrix[0][0]);
13     glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, 0);
14 
15     //cube2
16     translationMatrix = glm::translate(projectionMatrix, glm::vec3(2.0f, 0.0f, -4.0f));
17     fullTransformMatrix = glm::rotate(translationMatrix, 126.0f, glm::vec3(0.0f, 1.0f, 0.0f));
18     glUniformMatrix4fv(fullTransformMatrixUniformLocation, 1, GL_FALSE, &fullTransformMatrix[0][0]);
19     glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, 0);
20 
21 }

我们仅在 paintGL () 函数中增加了几行代码(16-19 行),就可以绘制另外一个立方体。

我们在 16-17 行重新改变了 translationMatrix 和 fullTransformMatrix 转换矩阵(我们甚至都没有定义新的矩阵,而仅仅是改变其数值),重新改变了位置、旋转。projection 矩阵我们并不想改变,还是之前的设置。

第 18 行和 12 行完全一样,但是这是必须的,因为要重新应用这个 uniform 变量才能起作用。

第 19 行使用了新的变换矩阵对立方体进行了第二次绘制。编译运行我们得到以下效果:

Android OpenGL ES 2.0:E/libEGL:在没有当前上下文的情况下调用 OpenGL ES API

Android OpenGL ES 2.0:E/libEGL:在没有当前上下文的情况下调用 OpenGL ES API

如何解决Android OpenGL ES 2.0:E/libEGL:在没有当前上下文的情况下调用 OpenGL ES API

我想在用户单击按钮时更新纹理位图,logcat 日志:

  1. E/libEGL: call to OpenGL ES API with no current context (logged once per thread)

这是我的 updateTexture 方法,我在 Android MainThread(UI Thread) 上调用它:

  1. fun updateTexture(textureId: Int,bitmap: Bitmap?) {
  2. GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,textureId)
  3. if (bitmap != null && !bitmap.isRecycled) {
  4. glutils.texImage2D(GLES20.GL_TEXTURE_2D,bitmap,0)
  5. }
  6. }

如何解决?

我正在 GLSurfaceView 中绘制 2D 图像,我知道问题是更新方法不在渲染器线程中,但我不知道如何从主线程切换到渲染器线程并执行更新方法。

Android OpenGL ES 开发(九): OpenGL ES 纹理贴图

Android OpenGL ES 开发(九): OpenGL ES 纹理贴图

一、概念

一般说来,纹理是表示物体表面的一幅或几幅二维图形,也称纹理贴图(texture)。当把纹理按照特定的方式映射到物体表面上的时候,能使物体看上去更加真实。当前流行的图形系统中,纹理绘制已经成为一种必不可少的渲染方法。在理解纹理映射时,可以将纹理看做应用在物体表面的像素颜色。在真实世界中,纹理表示一个对象的颜色、图案以及触觉特征。纹理只表示对象表面的彩色图案,它不能改变对象的几何形式。更进一步的说,它只是一种高强度的计算行为。 概括为一句就是:纹理贴图就是把一个纹理(对于2D贴图,可以简单的理解为图片),按照所期望的方式显示在诸多三角形组成的物体的表面。

二、原理

首先介绍一下纹理映射时的坐标系,纹理映射的坐标系和顶点着色器的坐标系是不一样的。 纹理坐标用浮点数来表示,范围一般从0.0到1.0,左上角坐标为(0.0,0.0),右上角坐标为(1.0,0.0),左下角坐标为(0.0,1.0),右下角坐标为(1.0,1.0),具体如下:

顶点着色器的坐标系如下:

将纹理映射到右边的两个三角形上(也就是一个矩形),需要将纹理坐标指定到正确的顶点上,才能使纹理正确的显示,否则显示出来的纹理会无法显示,或者出现旋转、翻转、错位等情况。 将右图顶点按照V2V1V4V3传入,以三角形条带方式绘制,则纹理坐标应按照V2V1V4V3传入。如果按照V3V4V1V2传入,会得到一个旋转了180度的纹理。如果按照V4V3V2V1传入,则会得到一个左右翻转的纹理。

三、显示纹理图片

我们可以根据以下步骤利用OpenGL ES显示一张图片:

1.修改着色器

首先,我们需要修改我们的着色器,将顶点着色器修改为:

attribute vec4 vPosition;
attribute vec2 vCoordinate;
uniform mat4 vMatrix;

varying vec2 aCoordinate;

void main(){
    gl_Position=vMatrix*vPosition;
    aCoordinate=vCoordinate;
}

可以看到,顶点着色器中增加了一个vec2变量,并将这个变量传递给了片元着色器,这个变量就是纹理坐标。接着我们修改片元着色器为:

precision mediump float;

uniform sampler2D vTexture;
varying vec2 aCoordinate;

void main(){
    gl_FragColor=texture2D(vTexture,aCoordinate);
}

片元着色器中,增加了一个sampler2D的变量,sampler2D我们在前一篇博客GLSL语言基础中提到过,是GLSL的变量类型之一的取样器。texture2D也有提到,它是GLSL的内置函数,用于2D纹理取样,根据纹理取样器和纹理坐标,可以得到当前纹理取样得到的像素颜色。

2. 设置顶点坐标和纹理坐标

根据纹理映射原理中的介绍,我们将顶点坐标设置为:

private final float[] sPos={
            -1.0f,1.0f,    //左上角
            -1.0f,-1.0f,   //左下角
            1.0f,1.0f,     //右上角
            1.0f,-1.0f     //右下角
    };

相应的,对照顶点坐标,我们可以设置纹理坐标为:

private final float[] sCoord={
            0.0f,0.0f,
            0.0f,1.0f,
            1.0f,0.0f,
            1.0f,1.0f,
    };

3. 计算变换矩阵

按照上步设置顶点坐标和纹理坐标,大多数情况下我们得到的一定是一张拉升或者压缩的图片。为了让图片完整的显示,且不被拉伸和压缩,我们需要向绘制等腰直角三角形一样,计算一个合适的变换矩阵,传入顶点着色器,代码如下:

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
    GLES20.glViewport(0,0,width,height);

    int w=mBitmap.getWidth();
    int h=mBitmap.getHeight();
    float sWH=w/(float)h;
    float sWidthHeight=width/(float)height;
    if(width>height){
        if(sWH>sWidthHeight){
            Matrix.orthoM(mProjectMatrix, 0, -sWidthHeight*sWH,sWidthHeight*sWH, -1,1, 3, 7);
        }else{
            Matrix.orthoM(mProjectMatrix, 0, -sWidthHeight/sWH,sWidthHeight/sWH, -1,1, 3, 7);
        }
    }else{
        if(sWH>sWidthHeight){
            Matrix.orthoM(mProjectMatrix, 0, -1, 1, -1/sWidthHeight*sWH, 1/sWidthHeight*sWH,3, 7);
        }else{
            Matrix.orthoM(mProjectMatrix, 0, -1, 1, -sWH/sWidthHeight, sWH/sWidthHeight,3, 7);
        }
    }
    //设置相机位置
    Matrix.setLookAtM(mViewMatrix, 0, 0, 0, 7.0f, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
    //计算变换矩阵
    Matrix.multiplyMM(mMVPMatrix,0,mProjectMatrix,0,mViewMatrix,0);
}

mMVPMatrix即为我们所需要的变换矩阵。

4. 显示图片

然后我们需要做的,就和之前绘制正方形一样容易了。和之前不同的是,在绘制之前,我们还需要将纹理和纹理坐标传入着色器:

@Override
public void onDrawFrame(GL10 gl) {
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT|GLES20.GL_DEPTH_BUFFER_BIT);
    GLES20.glUseProgram(mProgram);
    onDrawSet();
    GLES20.glUniformMatrix4fv(glHMatrix,1,false,mMVPMatrix,0);
    GLES20.glEnableVertexAttribArray(glHPosition);
    GLES20.glEnableVertexAttribArray(glHCoordinate);
    GLES20.glUniform1i(glHTexture, 0);
    textureId=createTexture();
    //传入顶点坐标
    GLES20.glVertexAttribPointer(glHPosition,2,GLES20.GL_FLOAT,false,0,bPos);
    //传入纹理坐标
    GLES20.glVertexAttribPointer(glHCoordinate,2,GLES20.GL_FLOAT,false,0,bCoord);
    GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP,0,4);
}

public abstract void onDrawSet();
public abstract void onDrawCreatedSet(int mProgram);

private int createTexture(){
    int[] texture=new int[1];
    if(mBitmap!=null&&!mBitmap.isRecycled()){
        //生成纹理
        GLES20.glGenTextures(1,texture,0);
        //生成纹理
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,texture[0]);
        //设置缩小过滤为使用纹理中坐标最接近的一个像素的颜色作为需要绘制的像素颜色
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,GLES20.GL_NEAREST);
        //设置放大过滤为使用纹理中坐标最接近的若干个颜色,通过加权平均算法得到需要绘制的像素颜色
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MAG_FILTER,GLES20.GL_LINEAR);
        //设置环绕方向S,截取纹理坐标到[1/2n,1-1/2n]。将导致永远不会与border融合
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_CLAMP_TO_EDGE);
        //设置环绕方向T,截取纹理坐标到[1/2n,1-1/2n]。将导致永远不会与border融合
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE);
        //根据以上指定的参数,生成一个2D纹理
        GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, mBitmap, 0);
        return texture[0];
    }
    return 0;
}

这样我们就可以显示出我们需要显示的图片,并且保证它完整的居中显示而且不会变形了。

ElasticSearch 没有在字段 [field_name] 上声明的类型 [search_as_you_type] 的处理程序

ElasticSearch 没有在字段 [field_name] 上声明的类型 [search_as_you_type] 的处理程序

如何解决ElasticSearch 没有在字段 [field_name] 上声明的类型 [search_as_you_type] 的处理程序

我正在尝试使用 EslasticSearch 实现自动完成功能,并且我遵循“按您输入搜索”文档:

https://www.elastic.co/guide/en/elasticsearch/reference/7.x/search-as-you-type.html#search-as-you-type

当我在下面运行映射查询时,出现异常。

  1. import re
  2. regex= "(\\/ \\[(\\d+)\\])$"
  3. str = "https://3836200.domain.com/ [404]"
  4. search = re.search(regex,str)
  5. if search is not None:
  6. print(search.group(2))

是文档提供了错误的映射查询还是我做错了什么?

解决方法

search_as_you_type 类型字段是在 7.2 版本中引入的

由于您使用的是 elasticsearch 版本 5,您会收到以下错误

"reason": "没有在字段上声明的类型 [search_as_you_type] 的处理程序 [my_field]

今天关于Python-找不到记录程序“ OpenGL.error”的处理程序找不到python.h的分享就到这里,希望大家有所收获,若想了解更多关于3D Computer Grapihcs Using OpenGL - 14 OpenGL Instancing、Android OpenGL ES 2.0:E/libEGL:在没有当前上下文的情况下调用 OpenGL ES API、Android OpenGL ES 开发(九): OpenGL ES 纹理贴图、ElasticSearch 没有在字段 [field_name] 上声明的类型 [search_as_you_type] 的处理程序等相关知识,可以在本站进行查询。

本文标签: