Java JOGL textured object not translating -


i have been attempting use jogl in standalone java app. have done work opengles on android , ported code android opengl java app. there have been syntax changes methods , build steps similar , in place.

i able draw vertex arrays of floats on canvas , pass color data shaders. working on texturing. problem is. able texture , apply additional colors shaders via java want able move object in 3d space.

without texturing, able rotate/translate object when apply texturing object (which apply texture), can not rotate/translate object.

if can point in right direction of overlooking. have searched , looked @ tutorials , examples seem doing basics of have.

to clarify, having issues moving textured object in 3d space.

this examplegl main renderer:

    private glu glu;  float xloc = 0;  @override public void display(glautodrawable drawable) {     // todo auto-generated method stub      gl2 gl = drawable.getgl().getgl2();      gl.glclear(gl2.gl_color_buffer_bit | gl2.gl_depth_buffer_bit);                   gl.glloadidentity();      // call draw code here          gl.gltranslatef(0, 0, xloc);         gl.glrotatef(rotatex, 1, 0, 0);         gl.glrotatef(rotatey, 0, 1, 0);         gl.glrotatef(rotatez, 0, 0, 1);          square.draw(gl);       // end calls drawing   }  @override public void dispose(glautodrawable drawable) {     // todo auto-generated method stub  }  glsquareex square; int mprogramshader;  @override public void init(glautodrawable drawable) {     // todo auto-generated method stub     gl2 gl = drawable.getgl().getgl2();     glu = new glu();     openglinit(gl);       square = new glsquareex(gl, true);//boolean true = textured; false = not textured     if(square.textured()){         mprogramshader = shaderhelper.loadandcompileshader(gl, "texturevertexshader.txt", "texturefragmentshader.txt",                  new string[]{                 "vertcolor",                 "a_texcoord"                 });     } else {         mprogramshader = shaderhelper.loadandcompileshader(gl, "vertexshader.txt", "fragmentshader.txt",                  new string[]{                 "vertcolor"                 });     }     square.setshaderprogram(mprogramshader); }  @override public void reshape(glautodrawable arg0, int arg1, int arg2, int arg3,         int arg4) {     // todo auto-generated method stub  }  @override public void keypressed(keyevent e) {     int key = e.getkeycode();     if ( key == keyevent.vk_left ){         rotatey -= 15;     } else if ( key == keyevent.vk_right ){         rotatey += 15;     } else if ( key == keyevent.vk_down){         xloc -= 1.0f;         rotatex += 15;     } else if ( key == keyevent.vk_up ){         xloc += 1.0f;         rotatex -= 15;     } else if ( key == keyevent.vk_page_up ){         rotatez += 15;     } else if ( key == keyevent.vk_page_down ){         rotatez -= 15;     } else if ( key == keyevent.vk_home ){         rotatex = rotatey = rotatez = 0;     }     system.out.println(keyevent.getkeytext(key));     //repaint(); }  @override public void keyreleased(keyevent arg0) {     // todo auto-generated method stub  }  @override public void keytyped(keyevent arg0) {     // todo auto-generated method stub  }  private void openglinit(gl2 gl) {     // todo auto-generated method stub     gl.glclearcolor(0.392f, 0.584f, 0.929f, 1.0f);     gl.glcleardepth(1.0f);      // set clear depth value farthest     gl.glenable(gl2.gl_depth_test); // enables depth testing     gl.gldepthfunc(gl2.gl_lequal);  // type of depth test     gl.glhint(gl2.gl_perspective_correction_hint, gl2.gl_nicest); // best perspective correction     gl.glshademodel(gl2.gl_smooth); // blends colors nicely, , smoothes out lighting     setcameraview(gl, 30); }  private void setcameraview(gl2 gl, float distance) {     // todo auto-generated method stub        // change projection matrix.     gl.glmatrixmode(gl2.gl_projection);     gl.glloadidentity();      // perspective.     float widthheightratio = (float) getwidth() / (float) getheight();     glu.gluperspective(45.0f, widthheightratio, 0.1f, 100f);     glu.glulookat(0, 0, distance, 0, 0, 0, 0, 1, 0);      // change model view matrix.     gl.glmatrixmode(gl2.gl_modelview);     gl.glloadidentity(); }  } 

this object want draw:

public class glsquareex { private floatbuffer vertexbuffer;  // buffer vertex-array private floatbuffer colorbuffer;   // buffer color-array (new) private floatbuffer texbuffer; private boolean istextured; private texture tex = null; int mprogram;  private int msamplerloc; private int mtexcoordloc; private int colloc;  private float[] vertices = {    -1.0f, -1.0f,  0.0f,  // 0. left-bottom    1.0f, -1.0f,  0.0f,  // 1. right-bottom   -1.0f,  1.0f,  0.0f,  // 2. left-top    1.0f,  1.0f,  0.0f   // 3. right-top };  private float[] texmap = {           0f,  0f,            1f,  0f,           1f,  1f,           0f,  1f        };  // constructor - setup vertex buffer public glsquareex(gl2 gl, boolean istex) {    createvertexbuffer();    istextured = istex;    if(istex){        createtexturebuffer();        initializetexture(gl);    } }  // render shape public void draw(gl2 gl) {    gl.glpushmatrix();   /*    * start drawing    */   // enable vertex-array , define buffer       gl.glenableclientstate(gl2.gl_vertex_array);       gl.gluseprogram(mprogram);      colloc = gl.glgetuniformlocation(mprogram, "vertcolor");      gl.gluniform3f(colloc, 0.8f, 0.0f, 0.0f);       if(istextured){           gl.glenableclientstate(gl2.gl_texture_coord_array);               //gl.gltexcoordpointer(2, gl2.gl_float, 0, texbuffer);           //gl.glactivetexture(gl2.gl_texture0);          tex.enable(gl);          tex.bind(gl);                  mtexcoordloc = gl.glgetattriblocation(mprogram, "a_texcoord" );          msamplerloc = gl.glgetuniformlocation(mprogram, "s_texture" );                     gl.glenablevertexattribarray ( mtexcoordloc );           gl.gluniform1i( msamplerloc, 0);          gl.glvertexattribpointer ( mtexcoordloc, 2, gl2.gl_float, false, 0, texbuffer);                       }                     gl.glvertexpointer(3, gl2.gl_float, 0, getvertexbuffer());       gl.gldrawarrays(gl2.gl_triangle_strip, 0, getvertices().length/3);        gl.gldisableclientstate(gl2.gl_vertex_array);       if(istextured){           tex.disable(gl);          gl.gldisablevertexattribarray(mtexcoordloc);          gl.gldisableclientstate(gl2.gl_texture_coord_array) ;      }    /*    * end drawing    */    gl.glpopmatrix();   }  public void setshaderprogram(int prog){    mprogram = prog; }  public boolean textured(){    return istextured; }  private void initializetexture(gl2 gl) { // todo auto-generated method stub    string dir = system.getproperty("user.dir")+"\\lib\\";     try {         tex = texturehelper.loadtexture(gl, gl.getglprofile(), dir + "cia.jpg", textureio.jpg);         tex.settexparameteri(gl, gl2.gl_texture_min_filter,                 gl2.gl_linear);         tex.settexparameteri(gl, gl2.gl_texture_mag_filter,                 gl2.gl_linear);         tex.settexparameteri(gl, gl2.gl_texture_wrap_s,                 gl2.gl_clamp_to_edge);//gl_repeat         tex.settexparameteri(gl, gl2.gl_texture_wrap_t,                 gl2.gl_clamp_to_edge);//gl_repeat     } catch (exception e) {         // todo auto-generated catch block         e.printstacktrace();     }  }  private void createtexturebuffer() { // todo auto-generated method stub       texbuffer = buffers.newdirectfloatbuffer(texmap);       texbuffer.put(texmap);       texbuffer.rewind(); }  private void createvertexbuffer() { // todo auto-generated method stub       vertexbuffer = buffers.newdirectfloatbuffer(vertices);       vertexbuffer.put(vertices);       vertexbuffer.rewind(); }  public float[] getvertices(){    return vertices; }  public floatbuffer getvertexbuffer() {     // todo auto-generated method stub    return vertexbuffer;  }  } 

this texturehelper class:

public class texturehelper {  public static texture loadtexture(gl2 gl, glprofile glprofile, string filepath, string extension) {      try {             gl.glmatrixmode(gl2.gl_texture);             gl.glloadidentity();              inputstream stream = new fileinputstream(filepath);             texturedata data = textureio.newtexturedata(glprofile, stream, false, extension);             texture tex = textureio.newtexture(data);                          return tex;         }         catch (ioexception exc) {             exc.printstacktrace();             system.exit(1);         }     return null; }  } 

below vertex shader using when attempting apply texture:

uniform vec3 vertcolor;  attribute vec2 a_texcoord;  varying vec2 v_texcoord; varying vec3 col;   void main() {  gl_position=gl_modelviewprojectionmatrix*gl_vertex;  col=vertcolor;  v_texcoord = a_texcoord; } 

below fragment shader using when attempting apply texture:

precision mediump float;          uniform sampler2d s_texture; varying vec2 v_texcoord;  varying vec3 col;             void main()                          {                                // pass through color gl_fragcolor = vec4( col, 1.0 ) * texture2d(s_texture, v_texcoord);                                          } 

just woke morning , went right program starring @ it. realized may need set modelview matrix drawing before translation. worked!

this method missing , needed add before loading identitiy matrix. must have been set matrix.

gl.glmatrixmode(gl2.gl_modelview); 

honestly don't understand why works not but, when not textured, worked.

here simple change drawing method in main renderer:

@override public void display(glautodrawable drawable) {     // todo auto-generated method stub      gl2 gl = drawable.getgl().getgl2();      gl.glclear(gl2.gl_color_buffer_bit | gl2.gl_depth_buffer_bit);                   gl.glmatrixmode(gl2.gl_modelview);      gl.glloadidentity();      // call draw code here          gl.gltranslatef(0, 0, xloc);         gl.glrotatef(rotatex, 1, 0, 0);         gl.glrotatef(rotatey, 0, 1, 0);         gl.glrotatef(rotatez, 0, 0, 1);          square.draw(gl);       // end calls drawing   } 

Comments

Popular posts from this blog

1111. appearing after print sequence - php -

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

Ruby on Rails, ActiveRecord, Postgres, UTF-8 and ASCII-8BIT encodings -