android 使用OPENGL ES绘制一个圆环-三维空间

本文展示了如何在Android中使用OpenGL ES来绘制一个三维圆环,包括实现效果的截图,以及关键的`huanCH.java`和`GL_Cirque.java`源码文件的编写说明。
摘要由CSDN通过智能技术生成

效果图:



编写huanCH.java

  *设置圆锥曲面的控制属性,包括纹理、环半径、截面半径、环角度切分单位和截面角度切分单位
  *通过上述属性可以控制圆环曲面的大小,并获取网格顶点坐标;最后设置顶点、纹理、法向量缓冲,并定义绘制方      法drawSelf()

   
package com.scout.eeeeeee;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.util.ArrayList;

import javax.microedition.khronos.opengles.GL10;

public class huanCH
{
    private FloatBuffer ding;//顶点缓冲
    private FloatBuffer wen;//纹理缓冲
    private FloatBuffer myNormalBuffer;//法向量缓冲

    int vcount;
    int textureid;

    float rSpan;
    float cSpan;

    float ring_Radius;
    float circle_Radius;

    public float mAngleX;
    public float mAngleY;
    public float mAngleZ;

    public huanCH(float rSpan,float cSpan,float ring_Radius,float circle_Radius,int textureid)
    {
        //rSpan表示环每一份多少度;cSpan表示圆截环每一份多少度;ring_Radius表示环半径;circle_Radius圆截面半径。
        this.rSpan=rSpan;
        this.cSpan=cSpan;
        this.circle_Radius=circle_Radius;
        this.ring_Radius=ring_Radius;
        this.textureid=textureid;

        ArrayList<Float> val=new ArrayList<Float>();
        ArrayList<Float> ial=new ArrayList<Float>();//法向量存放列表

        for(float circle_Degree=50f;circle_Degree<130f;circle_Degree+=cSpan)
        {
            for(float ring_Degree=-90f;ring_Degree<0f;ring_Degree+=rSpan)
            {
                float x1=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree)))*Math.cos(Math.toRadians(ring_Degree)));
                float y1=(float) (circle_Radius*Math.sin(Math.toRadians(circle_Degree)));
                float z1=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree)))*Math.sin(Math.toRadians(ring_Degree)));

                float x2=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree)))*Math.cos(Math.toRadians(ring_Degree+rSpan)));
                float y2=(float) (circle_Radius*Math.sin(Math.toRadians(circle_Degree)));
                float z2=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree)))*Math.sin(Math.toRadians(ring_Degree+rSpan)));

                float x3=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree+cSpan)))*Math.cos(Math.toRadians(ring_Degree+rSpan)));
                float y3=(float) (circle_Radius*Math.sin(Math.toRadians(circle_Degree+cSpan)));
                float z3=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree+cSpan)))*Math.sin(Math.toRadians(ring_Degree+rSpan)));

                float x4=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree+cSpan)))*Math.cos(Math.toRadians(ring_Degree)));
                float y4=(float) (circle_Radius*Math.sin(Math.toRadians(circle_Degree+cSpan)));
                float z4=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree+cSpan)))*Math.sin(Math.toRadians(ring_Degree)));

                val.add(x1);val.add(y1);val.add(z1);
                val.add(x4);val.add(y4);val.add(z4);
                val.add(x2);val.add(y2);val.add(z2);

                val.add(x2);val.add(y2);val.add(z2);
                val.add(x4);val.add(y4);val.add(z4);
                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值