How to draw only edges of 3d object, BUT with visible all edges, as it is truly made of wire (i.e. the wire behind the body must be visible too).
I draw simple Pyramid with square bottom and rotate it. This is object “ob”.
I try this:
ob.setRenderModeWireframe()
ob.setRenderModeThickness(5)
the Wires are visible, but NO these that are behind the “invisible” body of the Pyramid as it rotates.
I try some things, that I do not understand like:
ob.setDepthWrite(False)
ob.setDepthTest(False)
ob.setAttrib(DepthTestAttrib.make(RenderAttrib.MAlways))
but this do not change anything!
I try also transparency, but the wires turn transparent, and these that are behind the invisible body, are also invisible.
How to make model to look entirely like real body, made of wire?
Another question:
I make model as Geom from TRIANGLES, Panda have no Squads, therefore, the Pyramid base, which is SQUARE, made of TWO Triangles - in “wireframe” shows the diagonal vetex.
Is it possible to hide it?!
(I make the Pyramid from 6 fully independent triangles - 4 for the sides and 2 for the square base, to set independent vertices normals, the result is not so sharp… btw).
If the fully code is necessary:
from direct.showbase.ShowBase import ShowBase
from panda3d.core import *
from direct.task import Task
from math import *
vdata = GeomVertexData("vertices", GeomVertexFormat.getV3n3(), Geom.UHStatic)
vdata.setNumRows(18)
k = sqrt(1.0/2)
vertexWriter = GeomVertexWriter(vdata, "vertex")
normalWriter = GeomVertexWriter(vdata, "normal")
vertexWriter.addData3f(100, -100, -50); normalWriter.addData3f(0, 0, -1);
vertexWriter.addData3f(-100, -100, -50); normalWriter.addData3f(0, 0, -1);
vertexWriter.addData3f(100, 100, -50); normalWriter.addData3f(0, 0, -1);
vertexWriter.addData3f(-100, -100, -50); normalWriter.addData3f(0, 0, -1);
vertexWriter.addData3f(-100, 100, -50); normalWriter.addData3f(0, 0, -1);
vertexWriter.addData3f(100, 100, -50); normalWriter.addData3f(0, 0, -1);
vertexWriter.addData3f(100, -100, -50); normalWriter.addData3f(0, -k, k);
vertexWriter.addData3f(0, 0, 50); normalWriter.addData3f(0, -k, k);
vertexWriter.addData3f(-100, -100, -50); normalWriter.addData3f(0, -k, k);
vertexWriter.addData3f(100, 100, -50); normalWriter.addData3f(k, 0, k);
vertexWriter.addData3f(0, 0, 50); normalWriter.addData3f(k, 0, k);
vertexWriter.addData3f(100, -100, -50); normalWriter.addData3f(k, 0, k);
vertexWriter.addData3f(-100, 100, -50); normalWriter.addData3f(0, k, k);
vertexWriter.addData3f(0, 0, 50); normalWriter.addData3f(0, k, k);
vertexWriter.addData3f(100, 100, -50); normalWriter.addData3f(0, k, k);
vertexWriter.addData3f(-100, 100, -50); normalWriter.addData3f(-k, 0, k);
vertexWriter.addData3f(-100, -100, -50); normalWriter.addData3f(-k, 0, k);
vertexWriter.addData3f(0, 0, 50); normalWriter.addData3f(-k, 0, k);
tris=GeomTriangles(Geom.UHStatic)
tris.setShadeModel(Geom.SM_uniform)
tris.addVertex(0)
tris.addVertex(1)
tris.addVertex(2)
tris.closePrimitive()
tris.addVertex(3)
tris.addVertex(4)
tris.addVertex(5)
tris.closePrimitive()
tris.addVertex(6)
tris.addVertex(7)
tris.addVertex(8)
tris.closePrimitive()
tris.addVertex(9)
tris.addVertex(10)
tris.addVertex(11)
tris.closePrimitive()
tris.addVertex(12)
tris.addVertex(13)
tris.addVertex(14)
tris.closePrimitive()
tris.addVertex(15)
tris.addVertex(16)
tris.addVertex(17)
tris.closePrimitive()
squareGeom=Geom(vdata)
squareGeom.addPrimitive(tris)
squareGN=GeomNode("square")
squareGN.addGeom(squareGeom)
app = ShowBase()
ob = app.render.attachNewNode(squareGN)
ob.setAntialias(AntialiasAttrib.MMultisample)
#ob.node().setAttrib(ShadeModelAttrib.make(ShadeModelAttrib.MSmooth))
#ob.node().setAttrib(ShadeModelAttrib.make(ShadeModelAttrib.MFlat))
ob.setRenderModeWireframe()
ob.setRenderModeThickness(5)
ob.setRenderModePerspective(True)
ob.setDepthWrite(False)
ob.setDepthTest(False)
ob.setAttrib(DepthTestAttrib.make(RenderAttrib.MAlways))
#ob.setRenderModeFilled()
dl1 = Spotlight('a')
lens = PerspectiveLens()
dl1.setLens(lens)
dl1n = app.render.attachNewNode(dl1)
dl1n.setPos(500, -500, -0.1)
dl1n.lookAt(ob)
app.render.setLight(dl1n)
al1 = AmbientLight('al1')
al1n = app.render.attachNewNode(al1)
app.render.setLight(al1n)
pl1 = PointLight('pl1')
pl1n = app.render.attachNewNode(pl1)
pl1n.setPos(0, 0, 60)
app.render.setLight(pl1n)
pl2 = PointLight('pl2')
pl2n = app.render.attachNewNode(pl2)
pl2n.setPos(0, 0, -60)
app.render.setLight(pl2n)
m1 = Material()
m1.setShininess(50)
m1.setAmbient((0.7, 0.7, 0.8, 1))
m1.setDiffuse((0.7, 0.7, 0.8, 1))
m1.setSpecular((0.7, 0.7, 1, 1))
ob.setMaterial(m1)
app.cam.setPos(500, -500, -0.1)
app.cam.lookAt(ob)
def rr(task):
ob.setHpr(20*task.time, 25*task.time, 13*task.time)
return Task.cont
app.taskMgr.add(rr, 'rr')
app.run()