Changed operation order, normalise vectors before computing normals
This commit is contained in:
parent
7720dcd6ba
commit
7836f327e0
|
@ -218,6 +218,8 @@ class ModelParser:
|
||||||
for face in part.faces:
|
for face in part.faces:
|
||||||
v1 = Vertex.from_points(self.vertices[face.a.vertex], self.vertices[face.b.vertex])
|
v1 = Vertex.from_points(self.vertices[face.a.vertex], self.vertices[face.b.vertex])
|
||||||
v2 = Vertex.from_points(self.vertices[face.a.vertex], self.vertices[face.c.vertex])
|
v2 = Vertex.from_points(self.vertices[face.a.vertex], self.vertices[face.c.vertex])
|
||||||
|
v1.normalize()
|
||||||
|
v2.normalize()
|
||||||
cross = Vertex.cross_product(v1, v2)
|
cross = Vertex.cross_product(v1, v2)
|
||||||
self.normals[face.a.vertex] += cross
|
self.normals[face.a.vertex] += cross
|
||||||
self.normals[face.b.vertex] += cross
|
self.normals[face.b.vertex] += cross
|
||||||
|
|
|
@ -189,6 +189,9 @@ class PLY_ASCII_ContentParser:
|
||||||
|
|
||||||
def parse_line(self, string):
|
def parse_line(self, string):
|
||||||
|
|
||||||
|
if string == '':
|
||||||
|
return
|
||||||
|
|
||||||
if self.current_element is None:
|
if self.current_element is None:
|
||||||
self.current_element = self.parent.elements[0]
|
self.current_element = self.parent.elements[0]
|
||||||
|
|
||||||
|
|
29
viewer.py
29
viewer.py
|
@ -72,8 +72,22 @@ def main(args):
|
||||||
|
|
||||||
# Load and parse the model
|
# Load and parse the model
|
||||||
log('Loading model...', file=sys.stderr, end='')
|
log('Loading model...', file=sys.stderr, end='')
|
||||||
|
sys.stderr.flush()
|
||||||
model = load_model(args.input, up_conversion)
|
model = load_model(args.input, up_conversion)
|
||||||
log(' done! (' + str(sum(map(lambda x: len(x.faces), model.parts))) + ' faces)\nInitialiazing OpenGL Context', file=sys.stderr, end='')
|
|
||||||
|
# Compute normals if not already computed
|
||||||
|
if len(model.normals) == 0:
|
||||||
|
log(' done! (' + str(sum(map(lambda x: len(x.faces), model.parts))) + ' faces)\nComputing normals...', file=sys.stderr, end='')
|
||||||
|
sys.stderr.flush()
|
||||||
|
model.generate_vertex_normals()
|
||||||
|
|
||||||
|
# Generate vbos for smooth rendering
|
||||||
|
log(' done!\nGenerating vbos...', file=sys.stderr, end='')
|
||||||
|
sys.stderr.flush()
|
||||||
|
model.generate_vbos()
|
||||||
|
|
||||||
|
log(' done!\nInitialiazing OpenGL Context', file=sys.stderr, end='')
|
||||||
|
sys.stderr.flush()
|
||||||
|
|
||||||
camera = Camera(Vector(0,0,5), Vector(0,0,0))
|
camera = Camera(Vector(0,0,5), Vector(0,0,0))
|
||||||
controls = OrbitControls()
|
controls = OrbitControls()
|
||||||
|
@ -100,21 +114,14 @@ def main(args):
|
||||||
|
|
||||||
|
|
||||||
log(' done!\nInitializing OpenGL textures...', file=sys.stderr, end='')
|
log(' done!\nInitializing OpenGL textures...', file=sys.stderr, end='')
|
||||||
|
sys.stderr.flush()
|
||||||
# Initializes OpenGL textures
|
# Initializes OpenGL textures
|
||||||
model.init_textures()
|
model.init_textures()
|
||||||
|
|
||||||
# Compute normals if not already computed
|
|
||||||
if len(model.normals) == 0:
|
|
||||||
log(' done!\nComputing normals...', file=sys.stderr, end='')
|
|
||||||
model.generate_vertex_normals()
|
|
||||||
|
|
||||||
# Generate vbos for smooth rendering
|
|
||||||
log(' done!\nGenerating vbos...', file=sys.stderr, end='')
|
|
||||||
model.generate_vbos()
|
|
||||||
|
|
||||||
shader = Shader()
|
shader = Shader()
|
||||||
|
|
||||||
log(' Done!\nReady!', file=sys.stderr)
|
log(' done!\nReady!', file=sys.stderr)
|
||||||
|
sys.stderr.flush()
|
||||||
|
|
||||||
while running:
|
while running:
|
||||||
for event in pg.event.get():
|
for event in pg.event.get():
|
||||||
|
|
Loading…
Reference in New Issue