看一下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. 红帽linux系统更改主机名称,怎么在 redhat 中修改计算机名
  2. 【Python】将字典(dict)转化为Dataframe
  3. 独家 | 教你用Python来计算偏差-方差权衡
  4. android WebView 显示网页
  5. copy与mutableCopy的区别总结
  6. 聊一聊 RestTemplate
  7. 使用Spring Task轻松完成定时任务
  8. Ormlite数据库
  9. PTA(BasicLevel)-1009 说反话
  10. Struts2.0中ActionInvocation使用
  11. 安卓udp发包工具_Sendip 命令行发包工具,支持IP、TCP、UDP等
  12. 擦地机器人修理_第一次修扫地机器人
  13. 【AD封装】电感(带3D)
  14. Unity中世界坐标与相对于某个物体的相对坐标的转换
  15. php阴阳万年历转换的接口,阴历阳历转换(阴阳转换万年历查询表)
  16. 解决cpu和内存占用率高的问题
  17. 总结]关于守护进程解释文章
  18. 【C语言】C语言的三种基本控制结构-顺序、选择、循环
  19. BIOS、EFI与UEFI【系统启动专文二】转载自IT之家 (wkdubhe1987)
  20. 一个最低限度的国学书目

热门文章

  1. 电容传感器FDC2214单通道应用寄存器计算
  2. 算法概述——四大算法总结
  3. 2021-11-15 VScode如何连接工作站
  4. 简述 Symbol 类型用途
  5. json格式在C语言中的应用
  6. hyperterminal停止工作_hyperterminal
  7. 【鬼畜】UVA - 401每日一题·猛男就是要暴力打表
  8. 数据名称:中国社会追踪调查数据CGSS区县码(最全版本)数据年限:2010-2015年数据简介:搭配CGSS数据使用,可精准匹配至区县层面,对于从事微观层面研究具有重要价值。
  9. Qt之应用部署(Windows)
  10. 2020年8月试题分析-计算机网络原理