마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

android opengl text 출력 질문이요...

0 추천
Android opengl text 출력 관련 자료 찾다가 코드를 이곳 저곳에서 찾았습니다...

그것들을 가지고 class를 만들어 봤는 데...작동 하지 않습니다. 뭐가 문제 인가요?

일단 코드 입니다.

public class Render implements GLSurfaceView.Renderer {

    private Context m_context = null;

    OpenglText ot;

    public Render(Context co){
        this.m_context = co;
        ot = new OpenglText();
    }

    public void onDrawFrame(GL10 gl) {
        // TODO Auto-generated method stub
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();

        ot.setPosition(50.0f, 40.0f, 70.0f);
        ot.setObjectSize(50.0f, 50.0f);
        ot.setTexturePosition();
        ot.CreateTextBitMap(gl,"Hello");
        ot.drawTexture(gl);
    }
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        // TODO Auto-generated method stub
      if(height == 0){
            height = 1;
        }
        gl.glViewport(0, 0, width, height);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();

        GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100.0f);
       // gl.glOrthof(0, width, 0, height, 1, -1 );
        //gl.glOrthof(0, 480, 0, 800, 1, -1);

        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
           // TODO Auto-generated method stub
        gl.glEnable(GL10.GL_TEXTURE_2D);
        gl.glShadeModel(GL10.GL_SMOOTH);
        gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
        gl.glClearDepthf(1.0f);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glEnable(GL10.GL_BLEND);
        //gl.glDisable(GL10.GL_DEPTH_TEST);
    }
  }

public class OpenglText {
    protected FloatBuffer m_vertexBuffer;
    protected FloatBuffer m_textureBuffer;
    protected float vertices[] = null;
    protected float texture[] = null;
    float Ov, Oh;
    float TexXS, TexXL, TexYS ,TexYL;
    int textureId;
    protected  float x,y, z;
    public float r = 1.0f;
    public float g = 1.0f;
    public float b = 1.0f;
    public float a = 1.0f;

    public OpenglText(){}

    public void setPosition(float x, float y, float z){
        this.x = x;
        this.y = y;
 this.z = z;
}

    public void setObjectSize(float v, float h){
        this.Objectvertice = v;
        this.Objectheight = h;
    }

    public void setTexturePosition(){
        float TexXS = 0.0f;
        float TexXL = 1.0f;
        float TexYS = 0.0f;
        float TexYL = 1.0f;
    }

    public void CreateTextBitMap(GL10 gl ,String str){

        int mTextures[] = new int[1];

        Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_4444);
        Canvas canvas = new Canvas(bitmap);
        bitmap.eraseColor(0);

        // get a background image from resources
        // note the image format must match the bitmap format
//        Drawable background = context.getResources().getDrawable(R.drawable.ic_launcher);
//        background.setBounds(0, 0, 256, 256);
//        background.draw(canvas); // draw the background to our bitmap

        Paint textPaint = new Paint();
        textPaint.setTextSize(32);
        textPaint.setAntiAlias(true);
        textPaint.setARGB(0xff, 0x00, 0x00, 0x00);
        canvas.drawText("Hello World", 16,112, textPaint);

        gl.glGenTextures(1, mTextures, 0);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextures[0]);
        this.textureId = mTextures[0];

        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_REPEAT);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);

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

        bitmap.recycle();
    }

    public void drawTexture(GL10 gl){

        vertices = new float[]{-this.Ov, -this.Oh, 0.0f,
                                   this.Ov, -this.Oh, 0.0f,
                                   this.Ov,  this.Oh, 0.0f,
                                 -this.Ov,  this.Oh, 0.0f};

        this.texture = new float[]{ TexXS,  TexYL,
                TexXL,  TexYL,
                TexXL,  TexYS,
                TexXS,  TexYS};

        ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4);
        byteBuf.order(ByteOrder.nativeOrder());
        m_vertexBuffer = byteBuf.asFloatBuffer();
        m_vertexBuffer.put(vertices);
        m_vertexBuffer.position(0);

        byteBuf = ByteBuffer.allocateDirect(texture.length * 4);
        byteBuf.order(ByteOrder.nativeOrder());
        m_textureBuffer = byteBuf.asFloatBuffer();
        m_textureBuffer.put(texture);
        m_textureBuffer.position(0);

        gl.glEnable(GL10.GL_BLEND);
        gl.glBlendFunc(GL10.GL_DST_COLOR, GL10.GL_ZERO);
        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

        gl.glEnable(GL10.GL_ALPHA_TEST);
        gl.glAlphaFunc(GL10.GL_NOTEQUAL, 0.0f);

        gl.glColor4f(r, g, b, a);

        gl.glBindTexture(GL10.GL_TEXTURE_2D, this.textureId);

        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

        gl.glFrontFace(GL10.GL_CW);

        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, m_vertexBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, m_textureBuffer);

        gl.glTranslatef(this.x, this.y , -z);

        gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, vertices.length/3);

        gl.glTranslatef(-this.x, -this.y , +z);

        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

        gl.glDisable(GL10.GL_BLEND);
        gl.glDisable(GL10.GL_ALPHA_TEST);
    }
}

 

public class Contoller extends GLSurfaceView {

    Render render;
    Context m_co;

    public void setRenderer(Renderer renderer) {
        // TODO Auto-generated method stub
        super.setRenderer(renderer);
        this.render = (Render)renderer;
    }

    public Contoller(Context co){
        super(co);
        m_co = co;
    }
}

public class MainActivity extends Activity {

    private Render m_gsView = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        Contoller Game = new Contoller(this.getApplicationContext());

        m_gsView = new Render(this.getApplicationContext());

        Game.setRenderer(m_gsView);

        setContentView(Game);

    }

}
 

뭐가 잘못 됐는 지 좀 가르쳐 주시면 고맙겠습니다.
허접검 (550 포인트) 님이 2013년 8월 9일 질문
허접검님이 2013년 8월 9일 수정

2개의 답변

0 추천
코드보다는 에러로그를 올려주시는게 좋을듯 싶네요
Gradler (109,780 포인트) 님이 2013년 8월 9일 답변
에러가...없습니다;;
말 그대로 화면에 아무것도 띄우지 않습니다.
위에 만든 뷰를 올리는 쪽 소스는요?
코드 전부다 달았습니다...근데 저게 다에요;;
만들어만놓고 뷰위에 안올리면 당연히 아무것도 안보이는것 아닌가요?;;
Render 안에 배경화면색 바꾸는 것 정도는 정상작동 하기는 합니다만..
도무지 뭘 어쩌야 할지 모르곘습니다;;
0 추천

저도 opengl 쪽은 해본적이 없어서 뭐라 딱히 해답은 못드리겠군요

하지만 올려두신 코드를 보다보니 정말 여기저기서 막 주서다가 짜맞춘듯한 느낌이 많이 납니다.

이렇게 해서는 해결하기 힘드실것 같고요

검색하다보니 아래 링크에 안드로이드 opengl 관련 강좌가 아주 잘 정리되어 있어 공유해드립니다.

http://blog.naver.com/gidools/20107806808

 

처음부터 차근차근 하나씩 스텝을 밟아나가면서 배우는게 효과적일것 같네요

Gradler (109,780 포인트) 님이 2013년 8월 9일 답변
고맙습니다...다시 봐봐야 겠군요.
...