OpenGL ES 纹理上画点,该如何解决
OpenGL ES 纹理上画点
我尝试在一张全屏的背景纹理上画N个红点,点上但是整个背景图都会被渲染成红色。求高手指点啊,弄了好久都没解决!!!
------解决方案--------------------
查了下,应该是这样
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
点坐标取-1到1.意思是说
0,0点在中心 -1,-1是 左上角。
上面这个是d3d的坐标系,ogl不一定一样,你可以自己试试看,画几个点就知道了。
ogl我不熟,不过原理上都一样的。
我尝试在一张全屏的背景纹理上画N个红点,点上但是整个背景图都会被渲染成红色。求高手指点啊,弄了好久都没解决!!!
- Java code
//绑定背景纹理,绘制背景纹理,代码略。。。。 //开始绘制红点 //gl.glClear(GL10.GL_COLOR_BUFFER_BIT); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); Dot myDot = new Dot(); myDot.draw(gl); class Dot{ private FloatBuffer vertexBuffer; //点的坐标(x, y, z); private float vertices[] = { 100.0f,100.0f,0, 200.0f,200.0f,0, 300.0f,300.0f,0, 400.0f,400.0f,0 }; //准备顶点数据 private void init(){ ByteBuffer vertexByteBuffer = ByteBuffer.allocateDirect(vertices.length * 4); vertexByteBuffer.order(ByteOrder.nativeOrder()); vertexBuffer = vertexByteBuffer.asFloatBuffer(); vertexBuffer.put(vertices); vertexBuffer.position(0); } public Dot(){ init(); } public void draw(GL10 gl){ //开始数组功能 GL_VERTEX_ARRAY gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); //设定颜色值 此处为红 (red, green, blue, alpha)~[0.0f-1.0f] gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); // 指向数组数据 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); //设置点的大小 为 5 像素 gl.glPointSize(5); // 绘制点 GL_POINTS ; vertices.length/3 点的个数 gl.glDrawArrays(GL10.GL_POINTS, 0, vertices.length / 3); //关闭数组功能 GL_VERTEX_ARRAY gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } }
------解决方案--------------------
查了下,应该是这样
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
点坐标取-1到1.意思是说
0,0点在中心 -1,-1是 左上角。
上面这个是d3d的坐标系,ogl不一定一样,你可以自己试试看,画几个点就知道了。
ogl我不熟,不过原理上都一样的。