OpenGL ES 三 opengl 坐标系 ,纹理坐标系

本文详细讲解了Android View、OpenGL和纹理坐标系的区别,通过实例展示了如何在OpenGL中定位和绘制坐标轴,并探讨了纹理坐标系的操作与验证。重点介绍了纹理坐标系的左下角原点和Android Bitmap的上下颠倒问题,以及如何正确调整纹理坐标进行贴图显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、  常用的坐标系

 

 1.   Android View 坐标系

2. opengl坐标系中采用的是3维坐标:

                这里写图片描述

 static final float COORD[] = {
            -1.0f, -1.0f,  //1
            1.0f, -1.0f,   //2
            -1.0f, 1.0f,   //3
            1.0f, 1.0f,    //4
    };

坐标原点默认在屏幕的中间,即(width/2,height/2)位置上,z轴是从屏幕"内"指向屏幕外,而且还要注意原点和x,y轴平面是在屏幕的"表面",有引号,这个"表面"刚好是人看不到的面,所以如果你要画一条线,线端点(1,0,0),(0,1,0),直接画到屏幕上,将看不到显示,怎么办?很简单,这个坐标系是三维空间的,那么就将坐标系沿Z轴的负轴方向移动一点,将X,Y平面稍微向屏幕内部移动一点,就能够看到直线了,想象一下在三维空间中,将坐标系往屏幕里面推一下,那么x,y轴形成的平面就在屏幕里面了,在它上面的直线就可以看见了.后面有例子.

 

3. opengl 纹理的坐标系:

     

一般坐标系都自由操作移动(或旋转).


怎样证明 open gl 的纹理坐标系是什么样子的

在open gl 的坐标系中画出 x、Y、Z 轴的直线,根据现象就可以确定 

public class MainActivity extends Activity {
 
    private GLSurfaceView mSurfaceView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        mSurfaceView=new GLSurfaceView(this);
        mSurfaceView.setRenderer(new PumpKinRenderer()/*new PumpkinDotRenderer()*//*new PumpKinLineRenderer(this)*//*new PumpKinTriangleRenderer()*//*new PumpKinPyramidRenderer()*/);
        setContentView(mSurfaceView/*R.layout.activity_main*/);
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        mSurfaceView.onResume();
    }
 
    @Override
    protected void onPause() {
        super.onPause();
        mSurfaceView.onPause();
    }
}
public class PumpKinRenderer implements GLSurfaceView.Renderer {
 
    private PumpKin pumpKin;
 
    public PumpKinRenderer(){
        pumpKin=new PumpKin();
    }
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
 
        gl.glClearColor(0.0f,0.0f,0.0f,1.0f);
        gl.glClearDepthf(1.0f);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glDepthFunc(GL10.GL_LEQUAL);
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_NICEST);
        gl.glShadeModel(GL10.GL_SMOOTH);
        gl.glDisable(GL10.GL_DITHER);
 
    }
 
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
 
        if(height==0){
            height=1;
        }
        float aspect=(float)width/height;
 
        gl.glViewport(0,0,width,height);
 
        gl.glMatrixMode(GL10.GL_PROJ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李磊LL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值