看一下Panda3D的Tut-Procedural-Cube示例;

一个旋转的立方体;

可以在六个面上添加纹理;

单独看一下绘制立方体这部分代码;

from direct.showbase.ShowBase import ShowBase
from panda3d.core import lookAt
from panda3d.core import GeomVertexFormat, GeomVertexData
from panda3d.core import Geom, GeomTriangles, GeomVertexWriter
from panda3d.core import Texture, GeomNode
from panda3d.core import PerspectiveLens
from panda3d.core import Vec3, Vec4, Point3
import sys, osdef myNormalize(myVec):myVec.normalize()return myVecdef makeSquare(x1,y1,z1, x2,y2,z2):format=GeomVertexFormat.getV3n3cpt2()vdata=GeomVertexData('square', format, Geom.UHDynamic)vertex=GeomVertexWriter(vdata, 'vertex')normal=GeomVertexWriter(vdata, 'normal')color=GeomVertexWriter(vdata, 'color')texcoord=GeomVertexWriter(vdata, 'texcoord')#make sure we draw the sqaure in the right planeif x1!=x2:vertex.addData3f(x1, y1, z1)vertex.addData3f(x2, y1, z1)vertex.addData3f(x2, y2, z2)vertex.addData3f(x1, y2, z2)normal.addData3f(myNormalize(Vec3(2*x1-1, 2*y1-1, 2*z1-1)))normal.addData3f(myNormalize(Vec3(2*x2-1, 2*y1-1, 2*z1-1)))normal.addData3f(myNormalize(Vec3(2*x2-1, 2*y2-1, 2*z2-1)))normal.addData3f(myNormalize(Vec3(2*x1-1, 2*y2-1, 2*z2-1)))else:vertex.addData3f(x1, y1, z1)vertex.addData3f(x2, y2, z1)vertex.addData3f(x2, y2, z2)vertex.addData3f(x1, y1, z2)normal.addData3f(myNormalize(Vec3(2*x1-1, 2*y1-1, 2*z1-1)))normal.addData3f(myNormalize(Vec3(2*x2-1, 2*y2-1, 2*z1-1)))normal.addData3f(myNormalize(Vec3(2*x2-1, 2*y2-1, 2*z2-1)))normal.addData3f(myNormalize(Vec3(2*x1-1, 2*y1-1, 2*z2-1)))#adding different colors to the vertex for visibilitycolor.addData4f(1.0,0.0,0.0,1.0)color.addData4f(0.0,1.0,0.0,1.0)color.addData4f(0.0,0.0,1.0,1.0)color.addData4f(1.0,0.0,1.0,1.0)texcoord.addData2f(0.0, 1.0)texcoord.addData2f(0.0, 0.0)texcoord.addData2f(1.0, 0.0)texcoord.addData2f(1.0, 1.0)#quads arent directly supported by the Geom interface#you might be interested in the CardMaker class if you are#interested in rectangle thoughtri1=GeomTriangles(Geom.UHDynamic)tri2=GeomTriangles(Geom.UHDynamic)tri1.addVertex(0)tri1.addVertex(1)tri1.addVertex(3)tri2.addConsecutiveVertices(1,3)tri1.closePrimitive()tri2.closePrimitive()square=Geom(vdata)square.addPrimitive(tri1)square.addPrimitive(tri2)return squareclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.camera.setPos(0, -10, 0)square0=makeSquare(-1,-1,-1, 1,-1, 1)square1=makeSquare(-1, 1,-1, 1, 1, 1)square2=makeSquare(-1, 1, 1, 1,-1, 1)square3=makeSquare(-1, 1,-1, 1,-1,-1)square4=makeSquare(-1,-1,-1,-1, 1, 1)square5=makeSquare( 1,-1,-1, 1, 1, 1)snode=GeomNode('square')snode.addGeom(square0)snode.addGeom(square1)snode.addGeom(square2)snode.addGeom(square3)snode.addGeom(square4)snode.addGeom(square5)cube=render.attachNewNode(snode)app = MyApp()
app.run()

运行一下;如下;应该是只看到一个面;

square0=makeSquare(-1,-1,-1, 1,-1, 1)
        square1=makeSquare(-1, 1,-1, 1, 1, 1)
        square2=makeSquare(-1, 1, 1, 1,-1, 1)
        square3=makeSquare(-1, 1,-1, 1,-1,-1)
        square4=makeSquare(-1,-1,-1,-1, 1, 1)
        square5=makeSquare( 1,-1,-1, 1, 1, 1)

这部分把1改为3或者0.5,都是一样;

先大体理解一下上面代码;

顶点信息由GeomVertexData保存;
顶点一般有四列:位置,法线,颜色,纹理坐标;
默认,顶点索引从0开始,连续递增;

每个GeomVertexData和一个GeomVertexFormat关联;GeomVertexFormat描述顶点格式;

GeomTriangles,三角形条带类,三角形条带就是多个三角形组成一条带状;

Geom,几何形体类;单个Geom对象构成最小的场景;

GeomNode,几何形体节点类;一个或多个几何形体组合构成几何形体节点;

GeomVertexWriter,顶点数据读写器,每列都有;

Geom.UHDynamic、Geom.UHStatic,顶点数据在帧之间可调整或不需要修改;

大体就是生成顶点数据,构成三角形条带,构成Geom,再形成几何形体节点,把几何形体节点加入场景;下回再看为什么占了整个绘制窗口;

此处是用三角形条带构成立方体,绘制立方体不一定使用三角形条带;

Panda3D绘制立方体相关推荐

  1. python画正方体_python绘制立方体的方法

    本文实例为大家分享了python绘制立方体的具体代码,供大家参考,具体内容如下 #!/usr/bin/env python # This is (almost) a direct C++ to Pyt ...

  2. 学以致用——Java源码——使用Graphics2D类draw方法绘制立方体(Drawing Cubes)

    程序功能: 使用Graphics2D类draw方法绘制立方体 运行示例: 源码: 1. 实体类 import java.awt.Graphics2D; import java.awt.Polygon; ...

  3. adobe illustrator 绘制 立方体

    adobe illustrator 绘制平行四边形 1.在PPT里绘制完毕后,拽到Adobe illustrator中:2 2.先绘制四边形,然后绘制立方体

  4. Android OpenGLES2.0(五)——绘制立方体

    上篇博客中我们提到了OpenGLES中绘制的两种方法,顶点法和索引法.之前我们所使用的都是顶点法,这次绘制立方体使用索引法来绘制立方体. 构建立方体 上篇博客讲到正方形的绘制,立方体是是由六个正方形组 ...

  5. android平台下OpenGL ES 3.0绘制立方体的几种方式

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  6. php绘制正方体,Three.js利用顶点绘制立方体方法

    本文主要给大家介绍了关于Three.js利用顶点绘制立方体的方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧.希望能帮助到大家. 前言 之前我们在学些WebGL基础的时候 ...

  7. WebGL绘制立方体-每个面一种颜色

    WebGL绘制立方体-每个面一种颜色 本文是WebGL电子书的1.8节内容 思路很简单,在线框模式的立方体源码基础上直接进行更改,添加varying变量,引入顶点数据颜色,立方体6个面,每个面可以分为 ...

  8. 【OpenGL ES】绘制立方体

    1 前言 本文主要介绍使用 OpenGL ES 绘制立方体,读者如果对 OpenGL ES 不太熟悉,请回顾以下内容: 绘制三角形 绘制彩色三角形 绘制正方形 绘制圆形 在绘制立方体的过程中,主要用到 ...

  9. OpenGL ES for Android 绘制立方体

    立方体有6个面,8个顶点,因此绘制立方体其实就是绘制6个面. 顶点shader attribute vec4 a_Position; attribute vec4 a_color; varying v ...

最新文章

  1. java 取整型的低八位_Java 基础(十五)并发工具包 concurrent
  2. 实现BFS之“营救”
  3. hdfs中一个block块默认多大?
  4. C语言九十五之实现经典的反转数组(通过指针或数组下标操作)
  5. [转载] Java重载、覆盖与构造函数
  6. shell打开wifi命令_远程执行命令的填坑记录
  7. Java NIO学习篇之通道FileChannel详解
  8. 使用git将本地仓库上传到远程仓库
  9. Excel单元格区域快速导出为PDF
  10. HDU—— 2567 寻梦
  11. 包含tsx的react项目创建
  12. App 测试中 ios 和 Android 有哪些区别
  13. 计算机主板是cpu吗,主板和cpu是一起的吗
  14. 基于MATLAB的矩阵基础(附例题与代码)
  15. Unity实用小工具或脚本——读写Json工具
  16. android高德方向,Android 高德地图进阶功能
  17. 10个程序员可以接私活的平台和一些建议!
  18. 计算机怎样结束应用进程,结束进程,详细教您电脑怎么结束进程
  19. html css rel,css中rel是什么意思?
  20. 新IT云领未来 新华三Navigate 2017开启数字时代新引擎

热门文章

  1. php获取本机的IP
  2. “华为杯”研究生数学建模竞赛2020年-【华为杯】C题:面向康复工程的脑电信号分析和判别模型(附优秀论文)
  3. vue provide / inject 实现组件数据的实时响应
  4. 要做好网站,你需要这三点
  5. 鼠标右键快捷方式小技巧
  6. centos7 搭建深度学习环境
  7. centos安装telnet
  8. 【慕课笔记】第五章 JAVA中的集合框架(中) 第1节 MapHashMap简介
  9. 远程访问本地mysql
  10. 浙江省2021高考成绩查询时间6,2021浙江高考成绩查询时间公布:6月26日