android立体图形——三棱锥

其实画三角体很简单,就是有四个三角形组成的,所以会画三角形就会画三角体了,最好是自己先研究一下再看代码,其实不难,试试吧

 

 

 

package wyf.swq;
import java.nio.ByteBuffer;        //引人相关包
import java.nio.ByteOrder;        //引人相关包
import java.nio.IntBuffer;        //引人相关包
import javax.microedition.khronos.opengles.GL10;  //引人相关包
public class TrianglePair {
 private IntBuffer myVertexBuffer;   //顶点坐标数据缓冲
 private IntBuffer myColorBuffer;   //顶点着色数据缓冲
 private ByteBuffer myIndexBuffer;   //顶点索引数据缓冲
 int vCount=0;        //顶点数量
 int iCount=0;        //索引数量 
 float yAngle=0;        //绕y轴旋转的角度
 float zAngle=0;        //绕z轴旋转的角度
 public TrianglePair(){
  vCount=4;        //一个三角形,3个顶点
  final int UNIT_SIZE=10000;    //缩放比例
  int []vertices=new int[]{
    0,0,0,
    8*UNIT_SIZE,0,0,
          0,8*UNIT_SIZE,0,
          0,0,8*UNIT_SIZE
//          8*UNIT_SIZE,10*UNIT_SIZE,0,
//          2*UNIT_SIZE,10*UNIT_SIZE,0
        };
  //创建顶点坐标数据缓存,由于不同平台字节顺序不同,数据单元不是字节的(上面的事整型的缓存),一定要经过ByteBuffer转换,关键是通过ByteOrder设置nativeOrder()
  ByteBuffer vbb=ByteBuffer.allocateDirect(vertices.length*4);//分配的内存块
  vbb.order(ByteOrder.nativeOrder());//设置本地平台的字节顺序
  myVertexBuffer=vbb.asIntBuffer();//转换为int型缓冲
  myVertexBuffer.put(vertices);//向缓冲区中放入顶点坐标数据
  myVertexBuffer.position(0);//设置缓冲区的起始位置
  final int one=65535;//支持65535色色彩通道
  int []colors=new int[]{//顶点颜色值数组,每个顶点4个色彩值RGBA  
    one,one,one,0,
          0,0,one,0,
          0,0,one,0,
          one,one,one,0,
          one,0,0,0,
          one,0,0,0
  };
  ByteBuffer cbb=ByteBuffer.allocateDirect(colors.length*4);  //分配的内存块
  cbb.order(ByteOrder.nativeOrder());  //设置本地平台的字节顺序
  myColorBuffer=cbb.asIntBuffer();  //转换为int型缓冲
  myColorBuffer.put(colors);    //向缓冲区中放入顶点颜色数据
  myColorBuffer.position(0);    //设置缓冲区的起始位置
  //为三角形构造索引数据初始化
  iCount=12;
  byte []indices=new byte[]{
    0,1,2,
          0,1,3,
          0,2,3,
          1,2,3
            };
  //创建三角形构造索引数据缓冲
  myIndexBuffer=ByteBuffer.allocateDirect(indices.length);  //分配的内存块
  myIndexBuffer.put(indices);    //向缓冲区中放入顶点索引数据
  myIndexBuffer.position(0);    //设置缓冲区的起始位置
 }
 public void drawSelf(GL10 gl){
  gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//启用顶点坐标数组
  gl.glEnableClientState(GL10.GL_COLOR_ARRAY);//启用顶点颜色数组
  gl.glRotatef(yAngle,0,1,0);//根据yAngle的角度值,绕y轴旋转yAngle
  gl.glRotatef(zAngle,0,0,1);
  gl.glVertexPointer(   //为画笔指定顶点坐标数据
    3,     //每个顶点的坐标数量为3
    GL10.GL_FIXED,  //顶点坐标值的类型为GL_FIXED,整型
    0,     //连续顶点坐标数据之间的间隔
    myVertexBuffer  //顶点坐标数量
  );
  gl.glColorPointer(//为画笔指定顶点 颜色数据
   4,
   GL10.GL_FIXED,
   0,
   myColorBuffer
  );
  gl.glDrawElements(//绘制图形
   GL10.GL_TRIANGLES,    //填充模式,这里是以三角形方式填充
   iCount,       //
   GL10.GL_UNSIGNED_BYTE,   //开始点编号
   myIndexBuffer     //顶点数量
  );
 }}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Three.js是一个用于创建和展示3D图形的JavaScript库。它提供了丰富的功能和工具,可以轻松地在Web浏览器中创建交互式的3D场景。 要使用Three.js绘制三棱锥,首先需要创建一个场景(Scene)、相机(Camera)和渲染器(Renderer)。然后,可以创建一个几何体(Geometry)来表示三棱锥的形状,并将其添加到场景中。最后,通过渲染器将场景和相机渲染到HTML页面上。 以下是一个使用Three.js绘制三棱锥的示例代码: ```javascript // 创建场景 var scene = new THREE.Scene(); // 创建相机 var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = 5; // 创建渲染器 var renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // 创建三棱锥的几何体 var geometry = new THREE.ConeGeometry(1, 2, 3); // 创建材质 var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); // 创建网格对象 var cone = new THREE.Mesh(geometry, material); // 将三棱锥添加到场景中 scene.add(cone); // 渲染场景和相机 function animate() { requestAnimationFrame(animate); cone.rotation.x += 0.01; cone.rotation.y += 0.01; renderer.render(scene, camera); } animate(); ``` 这段代码创建了一个场景、相机和渲染器,并使用ConeGeometry创建了一个三棱锥的几何体。然后,将几何体和材质创建一个网格对象,并将其添加到场景中。最后,通过渲染器将场景和相机渲染到HTML页面上。 希望这个示例能帮助你理解如何使用Three.js绘制三棱锥
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值