Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if self.meshgentype == "marching":
mesher = MarchingCubes()
elif self.meshgentype == "dual":
mesher = DualContour()
else:
mesher = Voxel()
triangles = mesher.generateMesh(terrain, size, lod)
#format = GeomVertexFormat.registerFormat(GeomVertexFormat.getV3n3c4t2())
format = GeomVertexFormat.registerFormat(GeomVertexFormat.getV3n3c4())
vdata = GeomVertexData('chunk_mesh', format, Geom.UHStatic)
vertex = GeomVertexWriter(vdata, 'vertex')
normal = GeomVertexWriter(vdata, 'normal')
color = GeomVertexWriter(vdata, 'color')
texcoord = GeomVertexWriter(vdata, 'texcoord')
prim = GeomTriangles(Geom.UHStatic)
vertexcount = 0
for triangle in triangles:
for avertex in triangle:
#print triangle
#make vertices here
shade = 0.5
vertex.addData3f(avertex[0], avertex[1], avertex[2])
#fix normals
x1, y1, z1 = triangle[0][0], triangle[0][1], triangle[0][2]
x2, y2, z2 = triangle[1][0], triangle[1][1], triangle[1][2]
x3, y3, z3 = triangle[2][0], triangle[2][1], triangle[2][2]
normx = (z1 - z2) * (y3 - y2) - (y1 - y2) * (z3 - z2)
normy = (x1 - x2) * (z3 - z2) - (z1 - z2) * (x3 - x2)
blendarr.addColumn(InternalName.make('transform_blend'), 1, Geom.NTUint16, Geom.CIndex)
format = GeomVertexFormat()
format.addArray(array)
format.addArray(blendarr)
aspec = GeomVertexAnimationSpec()
aspec.setPanda()
format.setAnimation(aspec)
format = GeomVertexFormat.registerFormat(format)
dataname = controller.id + '-' + controlled_prim.primitive.material.id
vdata = GeomVertexData(dataname, format, Geom.UHStatic)
vertex = GeomVertexWriter(vdata, 'vertex')
normal = GeomVertexWriter(vdata, 'normal')
texcoord = GeomVertexWriter(vdata, 'texcoord')
transform = GeomVertexWriter(vdata, 'transform_blend')
numtris = 0
if type(controlled_prim.primitive) is collada.polylist.BoundPolygonList:
for poly in controlled_prim.primitive.polygons():
for tri in poly.triangles():
for tri_pt in range(3):
vertex.addData3f(tri.vertices[tri_pt][0], tri.vertices[tri_pt][1], tri.vertices[tri_pt][2])
normal.addData3f(tri.normals[tri_pt][0], tri.normals[tri_pt][1], tri.normals[tri_pt][2])
if len(controlled_prim.primitive._texcoordset) > 0:
texcoord.addData2f(tri.texcoords[0][tri_pt][0], tri.texcoords[0][tri_pt][1])
transform.addData1i(tri.indices[tri_pt])
numtris+=1
elif type(controlled_prim.primitive) is collada.triangleset.BoundTriangleSet:
for tri in controlled_prim.primitive.triangles():
for tri_pt in range(3):
vertex.addData3f(tri.vertices[tri_pt][0], tri.vertices[tri_pt][1], tri.vertices[tri_pt][2])
array.addColumn(InternalName.make('color'), 4, Geom.NTFloat32, Geom.CColor)
if texture:
array.addColumn(InternalName.make('texcoord'), 2, Geom.NTFloat32, Geom.CTexcoord)
if normal:
array.addColumn(InternalName.make('normal'), 3, Geom.NTFloat32, Geom.CVector)
if tanbin:
array.addColumn(InternalName.make('binormal'), 3, Geom.NTFloat32, Geom.CVector)
array.addColumn(InternalName.make('tangent'), 3, Geom.NTFloat32, Geom.CVector)
format = GeomVertexFormat()
format.addArray(array)
format = GeomVertexFormat.registerFormat(format)
gvd = GeomVertexData('gvd', format, Geom.UHStatic)
if nb_data != 0:
gvd.unclean_set_num_rows(nb_data)
geom = Geom(gvd)
gvw = GeomVertexWriter(gvd, 'vertex')
if color:
gcw = GeomVertexWriter(gvd, 'color')
else:
gcw = None
if texture:
gtw = GeomVertexWriter(gvd, 'texcoord')
else:
gtw = None
if normal:
gnw = GeomVertexWriter(gvd, 'normal')
else:
gnw = None
if tanbin:
gtanw = GeomVertexWriter(gvd, 'tangent')
gbiw = GeomVertexWriter(gvd, 'binormal')
else:
array.addColumn(InternalName.make('texcoord'), 2, Geom.NTFloat32, Geom.CTexcoord)
if normal:
array.addColumn(InternalName.make('normal'), 3, Geom.NTFloat32, Geom.CVector)
if tanbin:
array.addColumn(InternalName.make('binormal'), 3, Geom.NTFloat32, Geom.CVector)
array.addColumn(InternalName.make('tangent'), 3, Geom.NTFloat32, Geom.CVector)
format = GeomVertexFormat()
format.addArray(array)
format = GeomVertexFormat.registerFormat(format)
gvd = GeomVertexData('gvd', format, Geom.UHStatic)
if nb_data != 0:
gvd.unclean_set_num_rows(nb_data)
geom = Geom(gvd)
gvw = GeomVertexWriter(gvd, 'vertex')
if color:
gcw = GeomVertexWriter(gvd, 'color')
else:
gcw = None
if texture:
gtw = GeomVertexWriter(gvd, 'texcoord')
else:
gtw = None
if normal:
gnw = GeomVertexWriter(gvd, 'normal')
else:
gnw = None
if tanbin:
gtanw = GeomVertexWriter(gvd, 'tangent')
gbiw = GeomVertexWriter(gvd, 'binormal')
else:
gtanw = None
gbiw = None
blendarr = GeomVertexArrayFormat()
blendarr.addColumn(InternalName.make('transform_blend'), 1, Geom.NTUint16, Geom.CIndex)
format = GeomVertexFormat()
format.addArray(array)
format.addArray(blendarr)
aspec = GeomVertexAnimationSpec()
aspec.setPanda()
format.setAnimation(aspec)
format = GeomVertexFormat.registerFormat(format)
dataname = controller.id + '-' + controlled_prim.primitive.material.id
vdata = GeomVertexData(dataname, format, Geom.UHStatic)
vertex = GeomVertexWriter(vdata, 'vertex')
normal = GeomVertexWriter(vdata, 'normal')
texcoord = GeomVertexWriter(vdata, 'texcoord')
transform = GeomVertexWriter(vdata, 'transform_blend')
numtris = 0
if type(controlled_prim.primitive) is collada.polylist.BoundPolygonList:
for poly in controlled_prim.primitive.polygons():
for tri in poly.triangles():
for tri_pt in range(3):
vertex.addData3f(tri.vertices[tri_pt][0], tri.vertices[tri_pt][1], tri.vertices[tri_pt][2])
normal.addData3f(tri.normals[tri_pt][0], tri.normals[tri_pt][1], tri.normals[tri_pt][2])
if len(controlled_prim.primitive._texcoordset) > 0:
texcoord.addData2f(tri.texcoords[0][tri_pt][0], tri.texcoords[0][tri_pt][1])
transform.addData1i(tri.indices[tri_pt])
numtris+=1
elif type(controlled_prim.primitive) is collada.triangleset.BoundTriangleSet:
for tri in controlled_prim.primitive.triangles():
for tri_pt in range(3):
(1,0,0) : GeomVertexFormat.getV3c4(),
(0,1,0) : GeomVertexFormat.getV3t2(),
(1,0,1) : GeomVertexFormat.getV3n3c4(),
(1,1,0) : GeomVertexFormat.getV3c4t2(),
(0,1,1) : GeomVertexFormat.getV3n3t2(),
(1,1,1) : GeomVertexFormat.getV3n3c4t2()
}
vertex_format = formats[(colors != None, uvs != None, normals != None)]
vdata = GeomVertexData('name', vertex_format, static_mode)
vdata.setNumRows(len(verts)) # for speed
# normal = GeomVertexWriter(vdata, 'normal')
# texcoord = GeomVertexWriter(vdata, 'texcoord')
vertexwriter = GeomVertexWriter(vdata, 'vertex')
for v in verts:
vertexwriter.addData3f((v[0], v[2], v[1])) # swap y and z
if colors:
colorwriter = GeomVertexWriter(vdata, 'color')
for c in colors:
colorwriter.addData4f(c)
if uvs:
uvwriter = GeomVertexWriter(vdata, 'texcoord')
for uv in uvs:
uvwriter.addData2f(uv[0], uv[1])
# normal.addData3f(0, 0, 1)
# texcoord.addData2f(1, 0)
modes = {
'triangle' : GeomTriangles(static_mode),
def makeGeom(self, points, colors, sizes):
#format = GeomVertexFormat.getV3c4()
array = GeomVertexArrayFormat()
array.addColumn(InternalName.make('vertex'), 3, Geom.NTFloat32, Geom.CPoint)
array.addColumn(InternalName.make('color'), 4, Geom.NTFloat32, Geom.CColor)
if self.use_sizes:
array.addColumn(InternalName.make('size'), 1, Geom.NTFloat32, Geom.COther)
format = GeomVertexFormat()
format.addArray(array)
format = GeomVertexFormat.registerFormat(format)
vdata = GeomVertexData('vdata', format, Geom.UH_static)
vdata.unclean_set_num_rows(len(points))
self.vwriter = GeomVertexWriter(vdata, 'vertex')
self.colorwriter = GeomVertexWriter(vdata, 'color')
if self.use_sizes:
self.sizewriter = GeomVertexWriter(vdata, 'size')
geompoints = GeomPoints(Geom.UH_static)
geompoints.reserve_num_vertices(len(points))
index = 0
for (point, color, size) in zip(points, colors, sizes):
self.vwriter.addData3f(*point)
#self.colorwriter.addData3f(color[0], color[1], color[2])
self.colorwriter.addData4f(*color)
if self.use_sizes:
self.sizewriter.addData1f(size)
geompoints.addVertex(index)
geompoints.closePrimitive()
index += 1
geom = Geom(vdata)
geom.addPrimitive(geompoints)
def drawBody(nodePath, vdata, pos, vecList, radius=1, keepDrawing=True, numVertices=8):
circleGeom = Geom(vdata)
vertWriter = GeomVertexWriter(vdata, "vertex")
colorWriter = GeomVertexWriter(vdata, "color")
normalWriter = GeomVertexWriter(vdata, "normal")
drawReWriter = GeomVertexRewriter(vdata, "drawFlag")
texReWriter = GeomVertexRewriter(vdata, "texcoord")
startRow = vdata.getNumRows()
vertWriter.setRow(startRow)
colorWriter.setRow(startRow)
normalWriter.setRow(startRow)
sCoord = 0
if (startRow != 0):
texReWriter.setRow(startRow - numVertices)
sCoord = texReWriter.getData2f().getX() + 1
drawReWriter.setRow(startRow - numVertices)
if(drawReWriter.getData1f() == False):
def visualize(centers, corners, edges):
from meshtool.filters.panda_filters.pandacore import getVertexData, attachLights, ensureCameraAt
from meshtool.filters.panda_filters.pandacontrols import KeyboardMovement, MouseDrag, MouseScaleZoom, MouseCamera
from panda3d.core import GeomPoints, GeomTriangles, Geom, GeomNode, GeomVertexFormat, GeomVertexData, GeomVertexWriter, LineSegs, VBase3
from direct.showbase.ShowBase import ShowBase
format = GeomVertexFormat.getV3c4()
vdata = GeomVertexData('pts', format, Geom.UHDynamic)
vertex = GeomVertexWriter(vdata, 'vertex')
color = GeomVertexWriter(vdata, 'color')
vertex_index = 0
center_vertex_indices = {}
corner_vertex_indices = {}
for key, center in centers.iteritems():
vertex.addData3f(center.x * X_SCALE, center.y * Y_SCALE, center.elevation * Z_SCALE)
curcolor = hex2rgb(COLORS[center.biome])
color.addData4f(curcolor[0], curcolor[1], curcolor[2], 1)
center_vertex_indices[key] = vertex_index
vertex_index += 1
for corner in center.corners:
vertex.addData3f(corner.x * X_SCALE, corner.y * Y_SCALE, corner.elevation * Z_SCALE)
color.addData4f(curcolor[0], curcolor[1], curcolor[2], 1)
corner_vertex_indices[corner.id] = vertex_index
def generate(self): # call this after setting some of the variables to update it
if hasattr(self, 'geomNode'):
self.geomNode.removeAllGeoms()
static_mode = Geom.UHStatic if self.static else Geom.UHDynamic
vertex_format = Mesh._formats[(bool(self.colors), bool(self.uvs), bool(self.normals))]
vdata = GeomVertexData('name', vertex_format, static_mode)
vdata.setNumRows(len(self.vertices)) # for speed
self.geomNode = GeomNode('mesh')
self.attachNewNode(self.geomNode)
vertexwriter = GeomVertexWriter(vdata, 'vertex')
for v in self.vertices:
vertexwriter.addData3f(*v)
if self.colors:
colorwriter = GeomVertexWriter(vdata, 'color')
for c in self.colors:
colorwriter.addData4f(c)
if self.uvs:
uvwriter = GeomVertexWriter(vdata, 'texcoord')
for uv in self.uvs:
uvwriter.addData2f(uv[0], uv[1])
if self.normals != None:
normalwriter = GeomVertexWriter(vdata, 'normal')
for norm in self.normals: