Re: [android-developers] GL_POINTS not drawing points

2012-09-02 Thread Satya Komatineni
Sorry this line

Finally to get your gl_position = mvp * gl_position; and not the other way.

should read

Finally to get your gl_position = mvp * positionAttributeVariable; and not
the other way.

On Sat, Sep 1, 2012 at 11:10 PM, Satya Komatineni 
satya.komatin...@gmail.com wrote:

 Guich,
 Given a number of ways how to do the same thing in OpenGL it will be quite
 hard to debug.

 On Sat, Sep 1, 2012 at 9:11 AM, guich guiha...@gmail.com wrote:

 Hi,

 I've spent a full day trying to draw a series of points using GL_POINTS.
 I know i could use a texture, but i want to learn how to draw points. The
 resulting image (zoomed) is shown here:

 The code is written below. Any help on why are only 4 points appearing is
 greatly appreciated. Although it is possible to create your model, view,
 and projection matrices, it is better to use Matrix class and use the
 methods available on that class to generate the required matrices.


 To get the view matrix you can call
 Matrix.setLookAtM(viewMatrix)

 To get the projection matrix
 Matrix.frustumM(projectionMatrix)

 Then you can get your ModelViewProjection matrix by doing
 Matrix.multiplyMM(mvp, projmatrix, viewmatrix)

 Finally to get your gl_position = mvp * gl_position; and not the other way.

 I would start with a simple program that works and then gradually increase
 the complexity. A triangle or a square is a good place to start and then
 make it work using the examples in the tutorial on the android developer
 site.

 If there is a specific issue that you are not clear ask that specifically
 and you may be able to debug it that way

 http://satyakomatineni.com/android/training
 http://satyakomatineni.com
 http://androidbook.com
 http://twitter.com/SatyaKomatineni



 https://lh5.googleusercontent.com/-lelPSZoY4dw/UEIH5mVQfII/AD4/o5q5GMFuL00/s1600/points.png

 public class MainActivity extends Activity
 {
class MyGLSurfaceView extends GLSurfaceView
{
   public MyGLSurfaceView(Context context)
   {
  super(context);

  setEGLContextClientVersion(2); // Create an OpenGL ES 2.0
 context.
  setEGLConfigChooser(8, 8, 8, 8, 0, 0);
  getHolder().setFormat(PixelFormat.RGBA_);
  setRenderer(new MyGLRenderer()); // Set the Renderer for drawing
 on the GLSurfaceView
 // setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); // Render
 the view only when there is a change in the drawing data (must be after
 setRenderer!)
   }
}

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new MyGLSurfaceView(this));
}
 }

 class MyGLRenderer implements GLSurfaceView.Renderer
 {
byte[][] bitmap = {
  {1,1,1,1,1,1,1,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,1,1,1,1,1,1,1}};

static final int COORDS_PER_VERTEX = 3;

// Set color with red, green, blue and alpha (opacity) values
float color[] = { 0,0,0, 1.0f };
float coords[] = new float[4 * COORDS_PER_VERTEX];
int w,h;

public void onSurfaceCreated(GL10 unused, EGLConfig config)
{
}

public void onDrawFrame(GL10 unused)
{
   try
   {
  drawText();
   } catch (Exception e) {debug(e.getMessage());}
}

private String vertexShaderCode(int w, int h)
{
   return // http://www.songho.ca/opengl/gl_projectionmatrix.html
  attribute vec4 vPosition; +
  mat4 projectionMatrix = mat4( 2.0/+w+.0, 0.0, 0.0, -1.0,+
   0.0, -2.0/+h+.0, 0.0, 1.0,+
   0.0, 0.0, -1.0, 0.0,+
   0.0, 0.0, 0.0, 1.0);+
  void main() {gl_Position = vPosition*projectionMatrix;}; //
 the matrix must be included as a modifier of gl_Position
}

private final String fragmentShaderCode =
   precision mediump float; +
   uniform vec4 vColor; +
   void main() {gl_FragColor = vColor;};

private int mProgram;
private int mPositionHandle;
private int mColorHandle;

public void onSurfaceChanged(GL10 unused, int width, int height)
{
   w = width; h = height;
   // Adjust the viewport based on geometry changes, such as screen
 rotation
   GLES20.glViewport(0, 0, width, height);

   // prepare shaders and OpenGL program
   int vertexShader =
 MyGLRenderer.loadShader(GLES20.GL_VERTEX_SHADER,vertexShaderCode(width,height));
   int fragmentShader =
 MyGLRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER,fragmentShaderCode);

   mProgram = GLES20.glCreateProgram(); // create empty
 OpenGL Program
   GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex
 shader to program
   GLES20.glAttachShader(mProgram, fragmentShader); // add the
 fragment shader to program
   

Re: [android-developers] GL_POINTS not drawing points

2012-09-02 Thread Satya Komatineni
I am on my way to take my kids to the beach. I will look at it a bit closer
next week. May be just give me the simple problem defintion and I will try
to create the program for you and send the zip file.

ButI will try a quick answer

Say you want a 20x20 graph.

Specify your point vertices as (0,0) (1,1,)(5,5) all x,y and specify the z
as 0 if needed.

Then you need to set your camera using

Matrix.setLookAtM(mVMatrix, 0, 0, 0, -15, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

This is saying set your camera on the 'z' axis at -15 and look at the
origin (0,0,0) and make it look up (0,1,0) See the docs for full detail.
This populate your client memory mVMatrix.

then do

//take your width and height of the window and do
float ratio = (float) w / h;
Matrix.frustumM(mProjMatrix, 0, -ratio * 30, ratio * 30, -30 //top,
30//bottom, 3, 7);

Read up on frustum to give it enough height and width and some depth to fit
your coords. You get the projection matrix.

Now do Matrix.Multiply to do

final MVP = projection * mVMarix;

then send your position attributes to the shader and in the shader

gl_position = final MVP * your_position_attribute; //like all matrix
multiplications order is important


On Sun, Sep 2, 2012 at 10:39 AM, Satya Komatineni 
satya.komatin...@gmail.com wrote:

 Sorry this line

 Finally to get your gl_position = mvp * gl_position; and not the other way.


 should read

 Finally to get your gl_position = mvp * positionAttributeVariable; and not
 the other way.


 On Sat, Sep 1, 2012 at 11:10 PM, Satya Komatineni 
 satya.komatin...@gmail.com wrote:

 Guich,
 Given a number of ways how to do the same thing in OpenGL it will be
 quite hard to debug.

 On Sat, Sep 1, 2012 at 9:11 AM, guich guiha...@gmail.com wrote:

 Hi,

 I've spent a full day trying to draw a series of points using GL_POINTS.
 I know i could use a texture, but i want to learn how to draw points. The
 resulting image (zoomed) is shown here:

 The code is written below. Any help on why are only 4 points appearing
 is greatly appreciated. Although it is possible to create your model, view,
 and projection matrices, it is better to use Matrix class and use the
 methods available on that class to generate the required matrices.


 To get the view matrix you can call
 Matrix.setLookAtM(viewMatrix)

 To get the projection matrix
 Matrix.frustumM(projectionMatrix)

 Then you can get your ModelViewProjection matrix by doing
 Matrix.multiplyMM(mvp, projmatrix, viewmatrix)

 Finally to get your gl_position = mvp * gl_position; and not the other
 way.

 I would start with a simple program that works and then gradually
 increase the complexity. A triangle or a square is a good place to start
 and then make it work using the examples in the tutorial on the android
 developer site.

 If there is a specific issue that you are not clear ask that specifically
 and you may be able to debug it that way

 http://satyakomatineni.com/android/training
 http://satyakomatineni.com
 http://androidbook.com
 http://twitter.com/SatyaKomatineni



 https://lh5.googleusercontent.com/-lelPSZoY4dw/UEIH5mVQfII/AD4/o5q5GMFuL00/s1600/points.png

 public class MainActivity extends Activity
 {
class MyGLSurfaceView extends GLSurfaceView
{
   public MyGLSurfaceView(Context context)
   {
  super(context);

  setEGLContextClientVersion(2); // Create an OpenGL ES 2.0
 context.
  setEGLConfigChooser(8, 8, 8, 8, 0, 0);
  getHolder().setFormat(PixelFormat.RGBA_);
  setRenderer(new MyGLRenderer()); // Set the Renderer for
 drawing on the GLSurfaceView
 // setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); // Render
 the view only when there is a change in the drawing data (must be after
 setRenderer!)
   }
}

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new MyGLSurfaceView(this));
}
 }

 class MyGLRenderer implements GLSurfaceView.Renderer
 {
byte[][] bitmap = {
  {1,1,1,1,1,1,1,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,1,1,1,1,1,1,1}};

static final int COORDS_PER_VERTEX = 3;

// Set color with red, green, blue and alpha (opacity) values
float color[] = { 0,0,0, 1.0f };
float coords[] = new float[4 * COORDS_PER_VERTEX];
int w,h;

public void onSurfaceCreated(GL10 unused, EGLConfig config)
{
}

public void onDrawFrame(GL10 unused)
{
   try
   {
  drawText();
   } catch (Exception e) {debug(e.getMessage());}
}

private String vertexShaderCode(int w, int h)
{
   return // http://www.songho.ca/opengl/gl_projectionmatrix.html
  attribute vec4 vPosition; +
  mat4 projectionMatrix = mat4( 2.0/+w+.0, 0.0, 0.0, -1.0,+

Re: [android-developers] GL_POINTS not drawing points

2012-09-01 Thread Satya Komatineni
Guich,
Given a number of ways how to do the same thing in OpenGL it will be quite
hard to debug.

On Sat, Sep 1, 2012 at 9:11 AM, guich guiha...@gmail.com wrote:

 Hi,

 I've spent a full day trying to draw a series of points using GL_POINTS. I
 know i could use a texture, but i want to learn how to draw points. The
 resulting image (zoomed) is shown here:

 The code is written below. Any help on why are only 4 points appearing is
 greatly appreciated. Although it is possible to create your model, view,
 and projection matrices, it is better to use Matrix class and use the
 methods available on that class to generate the required matrices.


To get the view matrix you can call
Matrix.setLookAtM(viewMatrix)

To get the projection matrix
Matrix.frustumM(projectionMatrix)

Then you can get your ModelViewProjection matrix by doing
Matrix.multiplyMM(mvp, projmatrix, viewmatrix)

Finally to get your gl_position = mvp * gl_position; and not the other way.

I would start with a simple program that works and then gradually increase
the complexity. A triangle or a square is a good place to start and then
make it work using the examples in the tutorial on the android developer
site.

If there is a specific issue that you are not clear ask that specifically
and you may be able to debug it that way

http://satyakomatineni.com/android/training
http://satyakomatineni.com
http://androidbook.com
http://twitter.com/SatyaKomatineni



 https://lh5.googleusercontent.com/-lelPSZoY4dw/UEIH5mVQfII/AD4/o5q5GMFuL00/s1600/points.png

 public class MainActivity extends Activity
 {
class MyGLSurfaceView extends GLSurfaceView
{
   public MyGLSurfaceView(Context context)
   {
  super(context);

  setEGLContextClientVersion(2); // Create an OpenGL ES 2.0 context.
  setEGLConfigChooser(8, 8, 8, 8, 0, 0);
  getHolder().setFormat(PixelFormat.RGBA_);
  setRenderer(new MyGLRenderer()); // Set the Renderer for drawing
 on the GLSurfaceView
 // setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); // Render
 the view only when there is a change in the drawing data (must be after
 setRenderer!)
   }
}

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new MyGLSurfaceView(this));
}
 }

 class MyGLRenderer implements GLSurfaceView.Renderer
 {
byte[][] bitmap = {
  {1,1,1,1,1,1,1,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,0,0,1,1,0,0,1},
  {1,1,1,1,1,1,1,1}};

static final int COORDS_PER_VERTEX = 3;

// Set color with red, green, blue and alpha (opacity) values
float color[] = { 0,0,0, 1.0f };
float coords[] = new float[4 * COORDS_PER_VERTEX];
int w,h;

public void onSurfaceCreated(GL10 unused, EGLConfig config)
{
}

public void onDrawFrame(GL10 unused)
{
   try
   {
  drawText();
   } catch (Exception e) {debug(e.getMessage());}
}

private String vertexShaderCode(int w, int h)
{
   return // http://www.songho.ca/opengl/gl_projectionmatrix.html
  attribute vec4 vPosition; +
  mat4 projectionMatrix = mat4( 2.0/+w+.0, 0.0, 0.0, -1.0,+
   0.0, -2.0/+h+.0, 0.0, 1.0,+
   0.0, 0.0, -1.0, 0.0,+
   0.0, 0.0, 0.0, 1.0);+
  void main() {gl_Position = vPosition*projectionMatrix;}; // the
 matrix must be included as a modifier of gl_Position
}

private final String fragmentShaderCode =
   precision mediump float; +
   uniform vec4 vColor; +
   void main() {gl_FragColor = vColor;};

private int mProgram;
private int mPositionHandle;
private int mColorHandle;

public void onSurfaceChanged(GL10 unused, int width, int height)
{
   w = width; h = height;
   // Adjust the viewport based on geometry changes, such as screen
 rotation
   GLES20.glViewport(0, 0, width, height);

   // prepare shaders and OpenGL program
   int vertexShader =
 MyGLRenderer.loadShader(GLES20.GL_VERTEX_SHADER,vertexShaderCode(width,height));
   int fragmentShader =
 MyGLRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER,fragmentShaderCode);

   mProgram = GLES20.glCreateProgram(); // create empty
 OpenGL Program
   GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex
 shader to program
   GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment
 shader to program
   GLES20.glLinkProgram(mProgram);  // create OpenGL
 program executables
   GLES20.glUseProgram(mProgram); // Add program to OpenGL environment

   // get handle to fragment shader's vColor member
   mColorHandle = GLES20.glGetUniformLocation(mProgram, vColor);