gpt4 book ai didi

android - OpenGL,如何将单色纹理设置为彩色形状?

转载 作者:行者123 更新时间:2023-11-29 16:27:10 24 4
gpt4 key购买 nike

我正在使用 OpenGL ES 在 Android 上进行开发,我绘制了一些立方体并使用 glColor4f 更改了它们的颜色。现在,我想要在立方体上提供更逼真的效果,因此我创建了一个单色 8 位深度、64x64 像素大小的 PNG 文件。我加载了一个纹理,这是我的问题,即如何将颜色和纹理结合起来,将彩色和纹理立方体放到屏幕上?

我不是 OpenGL 专家,我试过这个:

创建时:

public void asignBitmap(GL10 gl, Bitmap bitmap)
{
int[] textures = new int[1];
gl.glGenTextures(1, textures, 0);

mTexture = textures[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, mTexture);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE);

GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_ALPHA, bitmap, 0);

ByteBuffer tbb = ByteBuffer.allocateDirect(texCoords.length * 4);
tbb.order(ByteOrder.nativeOrder());
mTexBuffer = tbb.asFloatBuffer();
for (int i = 0; i < 48; i++) mTexBuffer.put(texCoords[i]);
mTexBuffer.position(0);
}

和 OnDraw:

public void draw(GL10 gl, int alphawires) {
gl.glColor4f(1.0f, 0.0f, 0.0f, 0.5f); //RED
gl.glBindTexture(GL10.GL_TEXTURE_2D, mTexture);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glEnable(GL10.GL_BLEND);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTexBuffer);

//Set the face rotation
gl.glFrontFace(GL10.GL_CW);

//Point to our buffers
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

//Enable the vertex and color state
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

//Draw the vertices as triangles, based on the Index Buffer information
gl.glDrawElements(GL10.GL_TRIANGLES, 36, GL10.GL_UNSIGNED_BYTE, indexBuffer);

//Disable the client state before leaving
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisable(GL10.GL_BLEND);
gl.glDisable(GL10.GL_TEXTURE_2D);
}

我什至不确定我是否必须使用混合选项,因为我不需要透明度,但这是一个加号:)

最佳答案

设置纹理环境模式时,使用 GL_MODULATE 而不是 GL_REPLACE。 MODULATE 会将插值颜色与采样的纹理颜色相乘,其中 REPLACE 会完全丢弃插值颜色,并将其替换为采样的纹理颜色。

关于android - OpenGL,如何将单色纹理设置为彩色形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2841316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com