我想上傳一個簡單的紋理覆蓋我畫在屏幕上的正方形。沒有紋理的代碼在屏幕中央顯示紅色正方形。我編輯此代碼覆蓋頂部的紋理,但每次我嘗試將紋理應用到正方形時,它都會扭曲圖像並在屏幕上移動。 編輯:提供完整的代碼在這裏:http://codetidy.com/6291/OpenGL ES 2.0,紋理圖像沒有填充屏幕
質地之前應用:
應用後質地:
一些示例代碼:
void init()
// Create an OpenGL 2D texture from the BOX resource.
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_SRC_COLOR);
glGenTextures(1, &TextureHandle);
glBindTexture(GL_TEXTURE_2D, TextureHandle);
// Set texture parameters.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
maOpenGLTexImage2D(TEXTURE);
編輯:全平局()功能
void draw()
GLfloat vVertices[] = { -1.0f, 1.0f, 0.0f,
-1.0f, -1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
1.0f, -1.0f, 0.0f
};
GLfloat TexCoord[] = {0.0, 1.0,
0.0, 0.0,
1.0, 1.0,
1.0, 0.0};
// Set the viewport
glViewport(0, 0, mWidth, mHeight);
// Clear the color buffer
glClear(GL_COLOR_BUFFER_BIT);
// Use the program object
glUseProgram(mShader);
checkGLError("glUseProgram");
glBindTexture(GL_TEXTURE_2D, TextureHandle);
// Set uniform function
glUniformMatrix4fv(mMvpLoc, 1, false, MyMatrix);
checkGLError("glUniform4fv");
//glActiveTexture(GL_TEXTURE0);
glUniform1i(mTextureLoc, 0);
// Load the vertex data, i.e attributes and quads
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, TexCoord);
checkGLError("glVertexAttribPointer");
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
checkGLError("glEnableVertexAttribArray");
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
checkGLError("glDrawArrays");
頂點和片段着色器:
char vertexShaderSource[] =
"attribute vec4 vPosition; \n"
"uniform mat4 uMvp; \n"
"attribute vec2 TexCoordIn; \n"
"varying vec2 TexCoordOut; \n"
"void main() \n"
"{ \n"
"gl_Position = uMvp * vPosition; \n"
"TexCoordOut = TexCoordIn.xy; \n"
"} \n";
char fragmentShaderSource[] =
"precision highp float;\n"
"varying vec2 TexCoordOut;\n"
"uniform sampler2D Texture;\n"
"void main()\n"
"{\n"
"gl_FragColor = texture2D(Texture, TexCoordOut);\n"
"}\n";
上面的示例是整個源代碼嗎?請張貼整個'Draw()'代碼和生成頂點/紋理座標的部分 –
我編輯了問題以顯示包括頂點和紋理座標在內的整個繪製代碼。 –