读书人

OpenGL ES 纹理上画点,该如何解决

发布时间: 2012-03-29 12:53:12 作者: rapoo

OpenGL ES 纹理上画点
我尝试在一张全屏的背景纹理上画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我不熟,不过原理上都一样的。


读书人网 >VC/MFC

热点推荐