如何用opengl 显示中文显示一张已有的bitmap图在屏幕上

当前访客身份:游客 [
当前位置:
请大神指点。
@Mario_Q 你好,想跟你请教个问题:给我个完整的代码,我真的套不进去。
有人说OpenGL是一套标准,有不同的实现,那么API不是各语言通用的吗? OPenCL我看了几遍没看懂是做什么的,OpenCV是图型算法,OPenAL...
同样的参数,opengl一切都好,但是到了手机上就出现问题,这是怎么回事? OpenGL: OpenGLES:
我现在遇到的问题是:无法回收纹理内存。 GL10 onSurfaceCreated(GL10 gl...){mgk=...} surfac...
自己设置一个投影矩阵,在投影后使原模型深度坐标大的变小,小的变大,就是说,在投影后视点在模型的前方,而看到的却是模型的背面。。。
在Ubuntu下可以自己编译OpenGL吗? 它会和系统自己本身的显卡驱动有冲突吗?
@Mario_Q 你好,想跟你请教个问题:
在OpenGL超级宝典(第五版)中的代码,在VS2008中前五章都可以执行出来效果,而第六章有关...
大概步骤只有两步 一、用灯光视角渲染一张shadowmap(深度图) 二、生成纹理坐标,比较r与深度图里的深度值 我的疑问是, 一、深度图是带颜色的吗,还...
我的目的是这样:现在我实现了一个简单的OpenGL小程序,可以用鼠标或键盘控制窗口内的一个3D模型移动。我希望在这个3D模型移动的时候,假设物体所在的3D...
求大神指教一下。 我刚接触openGL时间不长, 我现在在做一个要用到openGL的项目,现在有一个功能的是:把openGL的绘制直接绘到Bitmap里,...
如果可以达到图中的效果,大家有什么好的教程么,或者类似的效果的demo
我正在学opencv,想结合opengl做一些东西。计算机视觉方面的书常用到矩阵,简单的还能看得懂。涉及到摄像头校正(camera calibration...
各位OpenGL的大神们,小弟有个问题想请教下, 红宝书中的例子 gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble...
课题要求是1、基本演示场景的构建与驱动2、Gouraud明暗处理的实现3、Phong明暗处理的实现4、光线跟踪算法的实现5、三种表面绘制算法的比较与分析。...
有谁自己写过C++的OpenGL的操作类呀? 能进行最简单的操作即可。要能在MFC的对话框程序中使用的
我用opengl es2.0贴图, 为什么后贴的在后面,先贴的在前面显示? 我使用正交投影,以下是投影代码。 public void onSurfaceC...
想请教一下位置变化这一方面为什么这么定义呢 public:
int fangwei[3];
int chushifangwei[3];
运行环境: win8.1 vs2012 freeglut2.8.1 glew1.10 运行代码: OpenGLSuperBible v5: Triangl...
这是一个魔方游戏的一段代码,初学乍道,不大明白,望大家指教 void DrawCube(GLfloat width, GLfloat height ,GL...
请问一下下列代码的详细解释,就是这些代码的含义和作用,谢谢! void xuanzhuanfangfa(int x,int y)
建立了工程,程序也能正常运行,保存并关闭vc6.0后再次打开工程就出现此问题,请问怎么解决呢??
c语言中做一个场景模拟 需要与现实同步 要限制帧数求一个可行方案 万分感谢
一个地形渲染程序,根据高程图设置顶点颜色,在摄像头拉得很近的时候,出现横向的条带,但是纵向却是正常的 插值。。求教如何做到双向都插值呢? 这是本人程序的效果。。
我想通过定义很多点,然后把这些点全部连成三角形(三角形线框)。如果用GL_TRIANGLE_STRIP函数形成三角形面的话,我实现的三角形面之间没有线表示...
我想在定义的A窗口中的某个小的矩形B内部画图形,但是不希望其超出小矩形区域,不知道怎么判断其是否超出,如图所示.opengl提供方法可以自动剪切掉超出部分...
CubeGame.exe 中的 0x000ebbae 处有未经处理的异常: 0xC0000005: 写入位置 0x 时发生访问冲突 请问这...
@pc朵拉 你好,想跟你请教个问题: for(inti=0;i&UNITS;i++){ 117 *(ver[i]) = xstep+=STEP; 1...
是这样的 我想请问如何把一个用opengl画的魔方 放入到artoolkit的simpletest里面去
在编程过程中,使用swapbuffers从缓存区获取图片时出现窗口为黑色,当移动窗口大小时,窗口图像又会出现乱码(如图1所示),但我使用网上的截取缓存区的...
毕设老师要求通过现场摄像机给出的动态数据,在OpenGL环境中实时建立动态模型,我完全没思路啊....他说扫描出的数据是顶点灰度什么的,那这些数据如何读取...
求大侠帮忙实现一个类似于cs中的瞄准镜的开镜效果,给提供个思路也行。。。。。。。。
最近在android上使用OpenGL ES,由于要使用shader language,有什么开发工具比较好使用呢?有没有调试工具啊?
Q1:在显示几何图元时可以使用顶点数组,应用程序(客户端)会不断向opengl内核(服务)发送数据。如果这些数据是实时(或者可能是定时器控...
【目的】 现在目的很简单,读取一个obj文件并且显示出来。 【问题】 弄了半天,成功读取了不包含素材的obj文件,但是无法让他正常显示。 下面是main函...
opengl用三个顶点坐标画一个三角形,如何知道三角形内其他点的坐标值呢?
找不到我想要的答案?如何使用Android中的OpenGL ES媒体效果
Android的媒体效果框架允许开发者可以很容易的应用多种令人印象深刻的视觉效果到照片或视频之上。作为这个媒体效果的框架,它使用GPU来处理图片处理的过程,它仅仅接收OpenGL的纹理(texture)作为输入。在本次教程中,你将会学习到如何使用OpenGL ES2.0将图片资源转化为纹理,以及如何使用框架为图片应用不同的处理效果。
为了开始本次的教程,你必须具备:
1.一款支持Android开发的IDE,如果你没有的话,可以在Android Developer website最新版本的Android studio。
2.一款运行Android4.0之上Android手机,并且GPU支持OpenGL ES2.0
3.对OpenGL的基本知识了解
设置OpenGL ES环境
创建GLSurfaceView
为了显示OpenGL的图形,你需要使用GLSurfaceView类,就像其他任何的View子类意义,你可以将它添加到你的Activity或Fragment之上,通过在布局xml文件中定义或者在代码中创建实例。
在本次的教程中,我们使用GLSurfaceView作为唯一的View在我们的Activity中,因此,为了简便,我们在代码中创建GLSurfaceView的实例并将其传入setContentView中,这样它将会填充你的整个手机屏幕。Activity中的onCreate方法如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GLSurfaceView view = new GLSurfaceView(this);
setContentView(view);
因为媒体效果的框架仅仅支持OpenGL ES2.0及以上的版本,所以在setEGLContextClientVersion 方法中传入2;
view.setEGLContextClientVersion(2);
为了确保GLSurfaceView仅仅在必要的时候进行渲染,我们在setRenderMode 方法中进行设置:
view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
创建Renderer
Renderer负责渲染GLSurfaceView中的内容。
创建类实现接口GLSurfaceView.Renderer,在这里我们打算将这个类命名为EffectsRenderer,添加构造函数并覆写接口中的抽象方法,如下:
public class EffectsRenderer implements GLSurfaceView.Renderer {
public EffectsRenderer(Context context){
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
public void onSurfaceChanged(GL10 gl, int width, int height) {
public void onDrawFrame(GL10 gl) {
回到Activity中调用setRenderer方法,让GLSurfaceView使用我们创建的Renderer:
view.setRenderer(new EffectsRenderer(this));
编写Manifest文件
如果你想要发布你的App到谷歌商店,在AndroidManifest.xml文件中添加如下语句:
这会确保你的app只能被安装在支持OpenGL ES2.0的设备之上。现在OpenGL环境准备完毕。
创建一个OpenGL平面
GLSurfaceView是不能直接显示一张照片的,照片首先应该被转化为纹理,应用在OpenGL square之上。在本次教程中,我将创建一个2D平面,并且具有4个顶点。为了简单,我将使用一个长方形,现在,创建一个新的类Square,用它来代表形状。
public class Square {
默认的OpenGL系统的坐标系中的原点是在中心,因此4个角的坐标可以表示为:
左下角: (-1, -1) 右下角:(1, -1) 右上角:(1, 1) 左上角:(-1, 1)
我们使用OpenGL绘制的所有的物体都应该是由三角形决定的,为了画一个方形,我们需要两个具有一条公共边的三角形,那意味着这些三角形的坐标应该是:
triangle 1: (-1, -1), (1, -1), 和 (-1, 1) triangle 2: (1, -1), (-1, 1), 和 (1, 1)
创建一个float数组来代表这些顶点:
private float vertices[] = {
为了在square上定位纹理,需要确定纹理的顶点坐标,创建另一个数组来表示纹理顶点的坐标:
private float textureVertices[] = {
创建缓冲区
这些坐标数组应该被转变为缓冲字符(byte buffer)在OpenGL可以使用之前,接下来进行定义:
private FloatBuffer verticesB
private FloatBuffer textureB
在initializeBuffers方法中去初始化这些缓冲区:使用ByteBuffer.allocateDirect来创建缓冲区,因为float是4个字节,那么我们需要的byte数组的长度应该为float的4倍。
下面使用ByteBuffer.nativeOrder方法来定义在底层的本地平台上的byte的顺序。使用asFloatBuffer方法将ByteBuffer转化为FloatBuffer,在FloatBuffer被创建后,我们调用put方法来将float数组放入缓冲区,最后,调用position方法来保证我们是由缓冲区的开头进行读取。
private void initializeBuffers(){
ByteBuffer buff = ByteBuffer.allocateDirect(vertices.length * 4);
buff.order(ByteOrder.nativeOrder());
verticesBuffer = buff.asFloatBuffer();
verticesBuffer.put(vertices);
verticesBuffer.position(0);
buff = ByteBuffer.allocateDirect(textureVertices.length * 4);
buff.order(ByteOrder.nativeOrder());
textureBuffer = buff.asFloatBuffer();
textureBuffer.put(textureVertices);
textureBuffer.position(0);
创建着色器
着色器只不过是简单的运行在GPU中的每个单独的顶点的C程序,在本次教程中,我们使用两种着色器:顶点着色器和片段着色器。
顶点着色器的代码:
attribute vec4 aP
attribute vec2 aTexP
varying vec2 vTexP
void main() {
gl_Position = aP
vTexPosition = aTexP
片段着色器的代码
uniform sampler2D uT
varying vec2 vTexP
void main() {
gl_FragColor = texture2D(uTexture, vTexPosition);
如果你了解OpenGL,那么这段代码对你来说是熟悉的,如果你不能理解这段代码,你可以参考OpenGL documentation。这里有一个简明扼要的解释:
顶点着色器负责绘制单个顶点。aPosition是一个变量被绑定到FloatBuffer上,包含着这些顶点的坐标。相似的,aTexPosition 是一个变量被绑定到FloatBuffer上,包含着纹理的坐标。gl_Position 是一个在OpenGL中创建的变量,代表每一个顶点的位置,vTexPosition是一个数组变量,它的值被传递到片段着色器中。
在本教程中,片段着色器负责square的着色。它使用texture2D方法从纹理中拾取颜色,并且使用一个在OpenGL中被创建的变量gl_FragColor将颜色分配到片段。
在该类中,着色器的代码应该被转化为String。
private final String vertexShaderCode =
attribute vec4 aP +
attribute vec2 aTexP +
varying vec2 vTexP +
void main() { +
gl_Position = aP +
vTexPosition = aTexP +
private final String fragmentShaderCode =
uniform sampler2D uT +
varying vec2 vTexP +
void main() { +
gl_FragColor = texture2D(uTexture, vTexPosition); +
创建新的方法initializeProgram来创建一个编译和链接着色器的OpenGL程序。
使用glCreateShader创建一个着色器对象,并且返回以int为表示形式的指针。为了创建顶点着色器,传递GL_VERTEX_SHADER给它。相似的,为了创建一个片段着色器,传递GL_FRAGMENT_SHADER给它。下面使用glShaderSource方法关联相对应的着色器代码到着色器上。使用glCompileShader编译着色器代码。
在编译了着色器的代码后,创建一段新的的程序glCreateProgram,与glCreateShader相似,它也返回一个以int为表示形式的指针。调用glAttachShader方法附着着色器到程序中,最后,调用glLinkProgram进行链接。
private int vertexS
private int fragmentS
private void initializeProgram(){
vertexShader = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
GLES20.glShaderSource(vertexShader, vertexShaderCode);
GLES20.glCompileShader(vertexShader);
fragmentShader = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
GLES20.glShaderSource(fragmentShader, fragmentShaderCode);
GLES20.glCompileShader(fragmentShader);
program = GLES20.glCreateProgram();
GLES20.glAttachShader(program, vertexShader);
GLES20.glAttachShader(program, fragmentShader);
GLES20.glLinkProgram(program);
你可能会发现,OpenGL的方法(以gl开头的)都是在GLES20类中,这是因为我们使用的是OpenGL ES2.0,如果我们使用更高的版本,就会用到这些类:GLES30,GLES31。
现在定义draw方法来利用我们之前定义的点和着色器进行绘制。
下面是你需要做的:
1.使用glBindFramebuffer方法创建一个帧缓冲对象(FBO)
2.调用glUseProgram创建程序,就像之前所提
3.传递GL_BLEND给glDisable方法,在渲染过程中禁用颜色的混合。
4.调用glGetAttribLocation得到变量aPosition和aTexPosition的句柄
5.使用glVertexAttribPointer连接aPosition和aTexPosition的句柄到各自的verticesBuffer和textureBuffer
6.使用glBindTexture方法绑定纹理(作为draw方法的参数传入)到片段着色器上
7.调用glClear方法清空GLSurfaceView的内容
8.最后,使用glDrawArrays方法画出两个三角形(也就是方形)
public void draw(int texture){
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
GLES20.glUseProgram(program);
GLES20.glDisable(GLES20.GL_BLEND);
int positionHandle = GLES20.glGetAttribLocation(program, aPosition);
int textureHandle = GLES20.glGetUniformLocation(program, uTexture);
int texturePositionHandle = GLES20.glGetAttribLocation(program, aTexPosition);
GLES20.glVertexAttribPointer(texturePositionHandle, 2, GLES20.GL_FLOAT, false, 0, textureBuffer);
GLES20.glEnableVertexAttribArray(texturePositionHandle);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture);
GLES20.glUniform1i(textureHandle, 0);
GLES20.glVertexAttribPointer(positionHandle, 2, GLES20.GL_FLOAT, false, 0, verticesBuffer);
GLES20.glEnableVertexAttribArray(positionHandle);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
在构造函数中添加初始化方法:
public Square(){
initializeBuffers();
initializeProgram();
渲染OpenGL平面和纹理
现在我们的渲染器什么也没做,我们需要改变它来渲染我们在前面创造的平面。
首先,让我们创建一个Bitmap,添加一张照片到res/drawable文件夹之下,我把它命名为forest.jpg,使用BitmapFactory将照片转化为Bitmap。另外将照片的尺寸存储下来。
改变EffectsRenderer的构造函数如下,
private int photoWidth, photoH
public EffectsRenderer(Context context){
photo = BitmapFactory.decodeResource(context.getResources(), R.drawable.forest);
photoWidth = photo.getWidth();
photoHeight = photo.getHeight();
创建一个新的方法generateSquare,将Bitmap转化为纹理,并且出初始化Square对象,你也需要一个数组来保存对纹理的引用,使用glGenTextures来初始化这个数组,glBindTexture方法来在位置0激活纹理。
现在,调用glTexParameteri设置不同的级别,决定纹理被怎样渲染。
设置GL_TEXTURE_MIN_FILTER(修正功能),GL_TEXTURE_MAG_FILTER(放大功能)给GL_LINEAR,确保图片是平滑的在它被拉伸的时候。
设置GL_TEXTURE_WRAP_S和GL_TEXTURE_WRAP_T给GL_CLAMP_TO_EDGE,保证纹理不会重复。
最后调用texImage2D方法将Bitmap放置到纹理中,实现方法如下:
private int textures[] = new int[2];
private void generateSquare(){
GLES20.glGenTextures(2, textures, 0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, photo, 0);
square = new Square();
当GLSurfaceView的尺寸发生改变时,onSurfaceChanged方法被调用,这时我们需要调用glViewPort确认新的尺寸。调用glClearColor使其变为黑色,接着调用generateSquare重新初始化纹理和平面。
public void onSurfaceChanged(GL10 gl, int width, int height) {
GLES20.glViewport(0,0,width, height);
GLES20.glClearColor(0,0,0,1);
generateSquare();
最后在onDrawFrame调用draw方法:
public void onDrawFrame(GL10 gl) {
square.draw(textures[0]);
最后,你可以运行程序,在手机上看到你选择的图片被渲染出来:
使用媒体效果框架
直到现在为止我们所写的复杂的代码都是为使用媒体效果而做的准备,现在是时候使用这个框架了,在你自己的Renderer类中添加:
private EffectContext effectC
使用EffectContext.createWithCurrentGlContext初始化effectContext,它负责管理内部一个OpenGL上下文的视觉效果的信息。为优化性能,应该只被调用一次。添加下面的代码到你的onDrawFrame的开头:
if(effectContext==null) {
effectContext = EffectContext.createWithCurrentGlContext();
创建一个效果是十分简单的,使用effectContext来创建一个Effect对象,一旦Effect对象可用,你可以调用apply方法,传递一个引用到原始的纹理中,在本例中是textures[0],随着对空白纹理对象,在本例中是textures[1],在apply方法被调用之后,textures[1]将会包含Effect的结果。
例如,我们使用灰度(grayscale)效果,这是代码:
private void grayScaleEffect(){
EffectFactory factory = effectContext.getFactory();
effect = factory.createEffect(EffectFactory.EFFECT_GRAYSCALE);
effect.apply(textures[0], photoWidth, photoHeight, textures[1]);
在onDrawFrame中调用此方法,并将textures[1]传递给Square的draw方法:
public void onDrawFrame(GL10 gl) {
if(effectContext==null) {
effectContext = EffectContext.createWithCurrentGlContext();
if(effect!=null){
effect.release();
grayScaleEffect();
square.draw(textures[1]);
release方法是用来释放Effect所持有的资源,当你运行app时,你可以看到这样的效果:
你可以使用相同的代码应用到一个纪录片效果上(documentary),
private void documentaryEffect(){
EffectFactory factory = effectContext.getFactory();
effect = factory.createEffect(EffectFactory.EFFECT_DOCUMENTARY);
effect.apply(textures[0], photoWidth, photoHeight, textures[1]);
看起来像这样
有一些效果需要参数,例如亮度调整的影响,brightness参数是一个float值,你可以使用setParameter方法改变参数值,就像下面的代码:
private void brightnessEffect(){
EffectFactory factory = effectContext.getFactory();
effect = factory.createEffect(EffectFactory.EFFECT_BRIGHTNESS);
effect.setParameter(brightness, 2f);
effect.apply(textures[0], photoWidth, photoHeight, textures[1]);
结果是这样:
在本教程中,你已经学会了如何利用媒体效果框架应用于各种效果到你的照片。这样做的时候,你也学会了如何绘制一个平面利用OpenGL ES 2.0并且应用各种纹理。
该框架可应用于照片和视频,如果是视频的话,你只需将应用效果的方法应用到各帧的onDrawFrame方法中。
你已经看到了本教程中的三种效果,在该框架中还有很多种效果你可以尝试,了解更多的话可以参考Android Developer&s website。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。当前位置: >
> opengl如何修改纹理的值用opengl来处理图片,把图片做为纹理来显示,如何来修改纹理的值,比
opengl如何修改纹理的值用opengl来处理图片,把图片做为纹理来显示,如何来修改纹理的值,比
qqliger & at
opengl 如何修改纹理的值用opengl来处理图片,把图片做为纹理来显示,如何来修改纹理的值,比如我要做图像的梯度运算读取纹理代码如下:  C/C++ code  #pragma once
#include &stdafx.h&
#include &template.h&
#include &gl/GL.h&
#include &gl/GLU.h&
#include &gl/glut.h&
#include &gl\glaux.h&
#pragma comment( lib, &opengl32.lib& )
#pragma comment( lib, &glu32.lib& )
#pragma comment( lib, &glaux.lib& )
// X Rotation ( NEW )
// Y Rotation ( NEW )
// Z Rotation ( NEW )
texture[1];
// Storage For One Texture ( NEW )
AUX_RGBImageRec *LoadBMP(char *Filename)
// Loads A Bitmap Image
FILE *File=NULL;
// File Handle
if (!Filename)
// Make Sure A Filename Was Given
return NULL;
// If Not Return NULL
File=fopen(Filename,&r&);
// Check To See If The File Exists
// Does The File Exist
fclose(File);
// Close The Handle
return auxDIBImageLoadA(Filename);
// Load The Bitmap And Return A Pointer
return NULL;
// If Load Failed Return NULL
int LoadGLTextures()
// Load Bitmaps And Convert To Textures
int Status=FALSE;
// Status Indicator
AUX_RGBImageRec *TextureImage[1];
// Create Storage Space For The Texture
memset(TextureImage,0,sizeof(void *)*1);
// Set The Pointer To NULL
// Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
if (TextureImage[0]=LoadBMP(&Data/NeHe.bmp&))
Status=TRUE;
// Set The Status To TRUE
glGenTextures(1, &texture[0]);
// Create The Texture
// Typical Texture Generation Using Data From The Bitmap
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]-&sizeX, TextureImage[0]-&sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]-&data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
if (TextureImage[0])
// If Texture Exists
if (TextureImage[0]-&data)
// If Texture Image Exists
free(TextureImage[0]-&data);
// Free The Texture Image Memory
free(TextureImage[0]);
// Free The Image Structure
// Return The Status
我从来不读别人的程序,因为大部分程序太弱智了。关于“用opengl来处理图片,把图片做为纹理来显示,如何来修改纹理的值,比如我要做图像的梯度运算”,原理很简单,显示一个面,把纹理贴上去,在像素着色器中,进行相关处理。如果有些功能不能实现,你也可以实施cuda。
qqlove00700 & &
& & (0)(0)
指针TextureImage[0]里面不就存着吗?qqlll1987 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-如何用OpenGL显示一张已有的bitmap图在屏幕上_百度知道
如何用OpenGL显示一张已有的bitmap图在屏幕上
我有更好的答案
请继续“追问”,互相帮助。如你还有别的问题,互相理解;答题不易,可另外向我求助,还有不懂的地方,可以将bitmap对象绘制到指定位置
你的采纳是我前进的动力;openg里面有这个类的这个方法.texImage2D(xxxx)GLUtils
其他类似问题
为您推荐:
bitmap的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Android有效解决加载大图片时内存溢出的问题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
喜欢此文档的还喜欢
Android有效解决加载大图片时内存溢出的问题
A​n​d​r​o​i​d​有​效​解​决​加​载​大​图​片​时​内​存​溢​出​的​问​题
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:7.84KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢}

我要回帖

更多关于 opengl屏幕坐标 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信