OpenGL 绘制螺旋线

1.如图:
这里写图片描述
2.代码

/**
 * @描述 使用opengl绘制螺旋线
 * @项目名称 App_OpenGL
 * @包名 com.android.opengl
 * @类名 SpiralMainActivity
 * @author chenlin
 * @date 2014年5月12日 下午10:57:20
 * @version 1.0
 */

public class SpiralMainActivity extends Activity {
    private static float ANGLE = -90F;
    private static float pos_x = 1f;
    private static float pos_y = 0f;
    private static float POS_Z = 0f;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyGlSurfaceView surfaceView = new MyGlSurfaceView(this);
        surfaceView.setRenderer(new MyRender());
        setContentView(surfaceView);
    }

    private class MyGlSurfaceView extends GLSurfaceView {
        public MyGlSurfaceView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }

        public MyGlSurfaceView(Context context) {
            super(context);
        }
    }

    /**
     * 根据按键改变位置
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        float step = 0.5f;
        // 判断按键
        if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
            pos_x = pos_x - step;
        } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
            pos_x = pos_x + step;

        } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
            pos_y = pos_y - step;

        } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
            pos_y = pos_y + step;

        }
        return super.onKeyDown(keyCode, event);
    }

    private class MyRender implements Renderer {


        private float mRatio;

        // 表层创建时
        @Override
        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            // 清平色(r,g,b,alpha)
            gl.glClearColor(0f, 0f, 0f, 1f);
            // 启用顶点缓冲区数组
            gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        }

        // 表层size时
        @Override
        public void onSurfaceChanged(GL10 gl, int width, int height) {
            gl.glViewport(0, 0, width, height);
            mRatio = width * 1.0f / height;
            gl.glMatrixMode(GL10.GL_PROJECTION);
            gl.glLoadIdentity();
            gl.glFrustumf(-1f, 1f, -mRatio, mRatio, 3f, 7f);
        }

        // 绘图
        @Override
        public void onDrawFrame(GL10 gl) {
            // 清除颜色缓存区
            gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
            // 设置绘图颜色
            gl.glColor4f(1f, 0f, 0f, 1f);
            // 操作模型矩阵
            gl.glMatrixMode(GL10.GL_MODELVIEW);
            gl.glLoadIdentity();
            // 设置眼睛的观测点
            GLU.gluLookAt(gl, 0f, 0f, 5f, 0f, 0f, 0f, 0f, 1f, 0f);

            // 旋转
            // gl.glRotatef(-90f, 1, 0, 0 );
            gl.glRotatef(ANGLE, pos_x, pos_y, POS_Z);

            // 绘制圆形
            float r = 0.5f;// 半径
            List<Float> coordsList = new ArrayList<Float>();
            // 定义圆心坐标
            float x = 0f, y = 0f, z = 1.5f;
            float zstep = 0.01f;
            for (float i = 0f; i < Math.PI * 6; i = (float) (i + Math.PI / 32)) {
                // 得到旋转时的坐标
                x = (float) (r * Math.cos(i));
                y = (float) (r * Math.sin(i));
                z = z - zstep;
                coordsList.add(x);
                coordsList.add(y);
                coordsList.add(z);
            }
            ByteBuffer bb = ByteBuffer.allocateDirect(coordsList.size() * 4);
            bb.order(ByteOrder.nativeOrder());
            FloatBuffer fb = bb.asFloatBuffer();
            for (float f : coordsList) {
                fb.put(f);
            }
            bb.position(0);
            // 指定顶点指针
            gl.glVertexPointer(3, GL10.GL_FLOAT, 0, bb);
            // 绘制多少个点
            gl.glDrawArrays(GL10.GL_POINTS, 0, coordsList.size() / 3);
        }

    }
}

3.绘制图片
这里写图片描述

OpenGL是一个强大的图形库,可用于绘制各种图形,包括等高线。 要绘制等高线,首先需要了解等高线的概念。等高线是指连接地形上相同高度的点的曲线。在绘制等高线时,我们需要已知地形的高度信息,以及等高线之间的间距。 在OpenGL中,可以利用顶点数组和索引数组来绘制等高线。首先,我们需要定义地形的高度信息,并将其保存在一个二维数组中。然后,根据高度信息,将地形转换成顶点数组,其中每个顶点的位置由其在数组中的索引决定。 接下来,我们需要定义等高线之间的间距,并计算出每个等高线所对应的高度值。然后,根据这些高度值,在地形上绘制等高线。 绘制等高线时,可以将地形的顶点数组作为输入,根据索引数组来确定等高线的形状。可以使用线段或折线来表示等高线。通过遍历索引数组,找到相同高度的点,将这些点连接起来形成等高线。 在绘制等高线时,可以根据需要调整线条的颜色和宽度,以增强可视效果。可以使用OpenGL的颜色和线条绘制函数来实现这些设置。 最后,将等高线绘制到屏幕上。可以使用OpenGL绘制函数来绘制等高线,如glDrawArrays或glDrawElements。 总之,通过利用OpenGL提供的功能,可以很容易地绘制等高线。需要了解地形的高度信息,并使用顶点数组和索引数组来绘制等高线的形状。同时,还可以通过调整颜色和线条的设置来增强等高线的可视效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lovoo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值